From 1b3012770cb9b84110b7983fb6790406f8ccf43b Mon Sep 17 00:00:00 2001 From: Hoop77 <p.badenhoop@gmx.de> Date: Sun, 29 Apr 2018 21:38:24 +0200 Subject: [PATCH] mavlink node --- modules/catkin_ws/src/car/CMakeLists.txt | 6 +- .../src/car/include/mavLink/MavLink.h | 62 ++++++---- .../catkin_ws/src/car/src/mavLink/MavLink.cpp | 111 ++++++++++-------- 3 files changed, 107 insertions(+), 72 deletions(-) diff --git a/modules/catkin_ws/src/car/CMakeLists.txt b/modules/catkin_ws/src/car/CMakeLists.txt index f1664b37..52becb3e 100644 --- a/modules/catkin_ws/src/car/CMakeLists.txt +++ b/modules/catkin_ws/src/car/CMakeLists.txt @@ -125,7 +125,11 @@ target_link_libraries(lanekeeping ${catkin_LIBRARIES}) add_library(mav_link src/mavLink/MavLink.cpp) add_dependencies(mav_link ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_generate_messages_cpp) -target_link_libraries(mav_link ${catkin_LIBRARIES}) +target_link_libraries(mav_link + ${catkin_LIBRARIES} + VeloxProtocolLib) +target_include_directories(mav_link PUBLIC + ${VeloxProtocolLib_INCLUDE_DIRS}) # NotifiableThread Test set(NOTIFIABLE_THREAD_TEST_SOURCE_FILES diff --git a/modules/catkin_ws/src/car/include/mavLink/MavLink.h b/modules/catkin_ws/src/car/include/mavLink/MavLink.h index 857c542d..4b0c17dd 100644 --- a/modules/catkin_ws/src/car/include/mavLink/MavLink.h +++ b/modules/catkin_ws/src/car/include/mavLink/MavLink.h @@ -9,32 +9,46 @@ #include "car/rcEnabledMsg.h" #include "boost/thread.hpp" +#include "NetworkingLib/Networking.h" +#include "VeloxProtocolLib/Connection.h" namespace car { - class MavLink : public nodelet::Nodelet - { - public: - virtual void onInit(); - MavLink(ros::NodeHandle &nh, std::string &name); - MavLink(); - ~MavLink(); - private: - ros::NodeHandle nh_; - std::string name_; - - ros::Publisher stmData; - ros::Subscriber ccData; - ros::Subscriber laneData; - ros::Subscriber rcEnabled; - - - void ccDataCallback(const ccDataMsg::ConstPtr& inMsg); - void laneDataCallback(const laneDataMsg::ConstPtr& inMsg); - void rcEnabledCallback(const rcEnabledMsg::ConstPtr& inMsg); - - - boost::thread main; - }; +class MavLink : public nodelet::Nodelet +{ +public: + virtual void onInit(); + + MavLink(ros::NodeHandle & nh, std::string & name); + + MavLink(); + + ~MavLink(); + +private: + ros::NodeHandle nh_; + std::string name_; + + ros::Publisher stmData; + ros::Subscriber ccData; + ros::Subscriber laneData; + ros::Subscriber rcEnabled; + + void ccDataCallback(const ccDataMsg::ConstPtr & inMsg); + + void laneDataCallback(const laneDataMsg::ConstPtr & inMsg); + + void rcEnabledCallback(const rcEnabledMsg::ConstPtr & inMsg); + + void onStmDataReceived(); + + float convertSpeedToStm(float speed); + + float convertSpeedFromStm(float speed); + + networking::Networking net; + veloxProtocol::Connection::Ptr veloxConnection; +}; + } #endif diff --git a/modules/catkin_ws/src/car/src/mavLink/MavLink.cpp b/modules/catkin_ws/src/car/src/mavLink/MavLink.cpp index dcd99e90..0d6b005d 100644 --- a/modules/catkin_ws/src/car/src/mavLink/MavLink.cpp +++ b/modules/catkin_ws/src/car/src/mavLink/MavLink.cpp @@ -12,53 +12,70 @@ PLUGINLIB_EXPORT_CLASS(car::MavLink, nodelet::Nodelet); namespace car { - MavLink::MavLink(ros::NodeHandle &nh, std::string &name) : - nh_(nh), - name_(name) - {} - - MavLink::MavLink() {} - - MavLink::~MavLink() {} - - void MavLink::onInit() - { - NODELET_INFO("MavLink::onInit -- START"); - stmData = nh_.advertise<stmDataMsg>("stmData", 1); - ccData = nh_.subscribe("ccData", 1, &MavLink::ccDataCallback, this); - laneData = nh_.subscribe("laneData", 1, &MavLink::laneDataCallback, this); - rcEnabled = nh_.subscribe("rcEnabled", 1, &MavLink::rcEnabledCallback, this); - main = boost::thread( - [this]() - { - int counter = 0; - ros::Rate rate{1}; - while (ros::ok()) - { - stmDataMsg msg; - msg.speed = counter++; - msg.angle = 0; - stmData.publish(msg); - rate.sleep(); - } - }); - NODELET_INFO("MavLink::onInit -- END"); - } - - void MavLink::ccDataCallback(const ccDataMsg::ConstPtr& inMsg) - { - std::cout << "MavLink recived new cc data (" << inMsg->speed << ").\n"; - } - - void MavLink::laneDataCallback(const laneDataMsg::ConstPtr& inMsg) - { +MavLink::MavLink(ros::NodeHandle & nh, std::string & name) : + nh_(nh), name_(name) +{} + +MavLink::MavLink() +{} + +MavLink::~MavLink() +{} + +void MavLink::onInit() +{ + NODELET_INFO("MavLink::onInit -- START"); + + stmData = nh_.advertise<stmDataMsg>("stmData", 1); + ccData = nh_.subscribe("ccData", 1, &MavLink::ccDataCallback, this); + laneData = nh_.subscribe("laneData", 1, &MavLink::laneDataCallback, this); + rcEnabled = nh_.subscribe("rcEnabled", 1, &MavLink::rcEnabledCallback, this); + + veloxConnection = veloxProtocol::Connection::create(net); + veloxConnection->open( + "/dev/ttySAC0", + [this] + { onStmDataReceived(); }, + [this] + { NODELET_INFO("Connection to STM closed!\n"); }); + + NODELET_INFO("MavLink::onInit -- END"); +} + +void MavLink::ccDataCallback(const ccDataMsg::ConstPtr & inMsg) +{ + veloxConnection->setSpeed(convertSpeedToStm(inMsg->speed)); +} + +void MavLink::laneDataCallback(const laneDataMsg::ConstPtr & inMsg) +{ std::cout << "MavLink recived new lane data ( ).\n"; - } - - void MavLink::rcEnabledCallback(const rcEnabledMsg::ConstPtr& inMsg) - { +} + +void MavLink::rcEnabledCallback(const rcEnabledMsg::ConstPtr & inMsg) +{ std::cout << "MavLink recived new rc status (" << inMsg->enabled << ").\n"; - } - - +} + +void MavLink::onStmDataReceived() +{ + stmDataMsg msg; + msg.speed = convertSpeedFromStm(veloxConnection->getMeasuredSpeed().get()); + msg.angle = veloxConnection->getMeasuredSteeringAngle().get(); + stmData.publish(msg); +} + +float MavLink::convertSpeedToStm(float speed) +{ + // TODO: convert speed! + return speed; +} + +float MavLink::convertSpeedFromStm(float speed) +{ + // TODO: convert speed! + return speed; +} + + } -- GitLab