diff --git a/modules/build.sh b/modules/build.sh old mode 100644 new mode 100755 diff --git a/modules/catkin_ws/src/CMakeLists.txt b/modules/catkin_ws/src/CMakeLists.txt index 581e61db89fce59006b1ceb2d208d9f3e5fbcb5e..3421623bd042f7eb4d2675c8c9ca624feb01cd4f 120000 --- a/modules/catkin_ws/src/CMakeLists.txt +++ b/modules/catkin_ws/src/CMakeLists.txt @@ -1 +1 @@ -/opt/ros/kinetic/share/catkin/cmake/toplevel.cmake \ No newline at end of file +/opt/ros/lunar/share/catkin/cmake/toplevel.cmake \ No newline at end of file diff --git a/modules/catkin_ws/src/car/CMakeLists.txt b/modules/catkin_ws/src/car/CMakeLists.txt index a0072a0cd10346c8dff2e15c1ebe24cdc231988d..2847e81ed880604caa05c7d67940e4089d6a06a6 100644 --- a/modules/catkin_ws/src/car/CMakeLists.txt +++ b/modules/catkin_ws/src/car/CMakeLists.txt @@ -1,13 +1,15 @@ cmake_minimum_required(VERSION 3.5.1) project(car) -add_compile_options(-std=c++14) -# Include Boost -find_package(Boost REQUIRED COMPONENTS system regex) +set(CMAKE_CXX_STANDARD 14) +# add_compile_options(-std=c++14 -fPIC) # for dealing with threads set(CMAKE_CXX_FLAGS -pthread) +# Include Boost +find_package(Boost REQUIRED COMPONENTS system regex) + find_package(catkin REQUIRED COMPONENTS roscpp rospy @@ -15,7 +17,6 @@ find_package(catkin REQUIRED COMPONENTS nodelet message_generation ) -find_package(Boost REQUIRED COMPONENTS system) add_message_files( FILES @@ -40,6 +41,8 @@ catkin_package( LIBRARIES environment LIBRARIES ultrasonic LIBRARIES camera + LIBRARIES lanekeeping + LIBRARIES mav_link CATKIN_DEPENDS roscpp std_msgs nodelet rospy #message_runtime ) @@ -66,6 +69,7 @@ add_library(main_node ${MAIN_NODE_SOURCE_FILES}) add_dependencies(main_node ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_generate_messages_cpp) target_link_libraries(main_node ${catkin_LIBRARIES} + ${Boost_LIBRARIES} NetworkingLib PlatoonProtocolLib PC2CarLib) @@ -82,13 +86,6 @@ add_library(ultrasonic src/ultrasonic/ultrasonic.cpp) add_dependencies(ultrasonic ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_generate_messages_cpp) target_link_libraries(ultrasonic ${catkin_LIBRARIES}) -# NotifiableThread Test -set(NOTIFIABLE_THREAD_TEST_SOURCE_FILES - include/mainNode/NotifiableThread.h - src/mainNode/NotifiableThread.cpp - test/mainNode/NotifiableThreadTest.cpp) -add_executable(NotifiableThreadTest ${NOTIFIABLE_THREAD_TEST_SOURCE_FILES}) - add_library(camera src/camera/camera.cpp) add_dependencies(camera ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_generate_messages_cpp) target_link_libraries(camera ${catkin_LIBRARIES}) @@ -97,12 +94,25 @@ add_library(lanekeeping src/lanekeeping/lanekeeping.cpp) add_dependencies(lanekeeping ${catkin_EXPORTED_TARGETS} ${PROJECT_NAME}_generate_messages_cpp) 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}) + +# NotifiableThread Test +set(NOTIFIABLE_THREAD_TEST_SOURCE_FILES + include/mainNode/NotifiableThread.h + src/mainNode/NotifiableThread.cpp + test/mainNode/NotifiableThreadTest.cpp) +add_executable(NotifiableThreadTest ${NOTIFIABLE_THREAD_TEST_SOURCE_FILES}) + install( TARGETS main_node environment ultrasonic camera + lanekeeping + mav_link ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} diff --git a/modules/catkin_ws/src/car/include/mainNode/PlatoonController.h b/modules/catkin_ws/src/car/include/mainNode/PlatoonController.h index 09916fe02e61aa5e012f53ed30f446df1129406d..f14238758d086b12f93f5febeb3f0285e83dda73 100644 --- a/modules/catkin_ws/src/car/include/mainNode/PlatoonController.h +++ b/modules/catkin_ws/src/car/include/mainNode/PlatoonController.h @@ -5,15 +5,22 @@ #ifndef CAR_PLATOONCONTROLLER_H #define CAR_PLATOONCONTROLLER_H +#include <functional> + namespace car { class PlatoonController { public: + using Callback = std::function<void()>; + + PlatoonController(); + void run(); private: + Callback ccNotify; }; } diff --git a/modules/catkin_ws/src/car/include/mainNode/mainNode.h b/modules/catkin_ws/src/car/include/mainNode/mainNode.h index 6728e817613266926800060fc86078a36f68880c..8b5285d68418a00db8e916f7eb2073bce315440e 100644 --- a/modules/catkin_ws/src/car/include/mainNode/mainNode.h +++ b/modules/catkin_ws/src/car/include/mainNode/mainNode.h @@ -8,6 +8,8 @@ #include "NotifiableThread.h" #include "NetworkingLib/Networking.h" #include "PlatoonController.h" +#include "PlatoonProtocolLib/Vehicle.h" +#include "PC2CarLib/CommandReceiver.h" namespace car { @@ -23,27 +25,25 @@ public: ~MainNode(); private: - std::function<void()> platoonControllerNotify = - [this] - { platoonControllerThread.notify(); }; - - NotifiableThread::Callback platoonControllerRun = - [this] - { platoonController.run(); }; - + PlatoonController platoonController; + NotifiableThread platoonControllerThread; + + std::function<void()> platoonControllerNotify = + [this] { platoonControllerThread.notify(); }; + + // dont touch! + // networking::Networking c2cNet; + // networking::Networking pcNet; + // + // platoonProtocol::Vehicle::Ptr c2c; + // pc2car::CommandReceiver::Ptr commandReceiver; + // ros::NodeHandle nh; std::string name; - boost::thread loggerModule; + ros::Publisher logEnabled; + ros::Subscriber environmentData; - - networking::Networking net; - - //Networking platoonProtocolThread; - NotifiableThread platoonControllerThread; - - PlatoonController platoonController; - void environmentDataCallback(const environmentDataMsg::ConstPtr & inMsg); }; } diff --git a/modules/catkin_ws/src/car/include/mavLink/mavLink.h b/modules/catkin_ws/src/car/include/mavLink/mavLink.h new file mode 100644 index 0000000000000000000000000000000000000000..836a23f018f79f5d311af37eb5aeb6da15099f57 --- /dev/null +++ b/modules/catkin_ws/src/car/include/mavLink/mavLink.h @@ -0,0 +1,35 @@ +#ifndef ENVIRONMENT_H +#define ENVIRONMENT_H + +#include <nodelet/nodelet.h> +#include <ros/ros.h> + +#include "car/ccDataMsg.h" +#include "car/laneDataMsg.h" +#include "car/rcEnabledMsg.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); + }; +} +#endif diff --git a/modules/catkin_ws/src/car/launch/fullstart.launch b/modules/catkin_ws/src/car/launch/fullstart.launch index 5c39d9d8d3041864d4de71eaaa57595cdc979557..26f97c0b45bded7061cf299f0ab88ba61fdd26e0 100644 --- a/modules/catkin_ws/src/car/launch/fullstart.launch +++ b/modules/catkin_ws/src/car/launch/fullstart.launch @@ -8,6 +8,7 @@ <node pkg="nodelet" type="nodelet" name="nodelet_ultrasonic" args="load car/ultrasonic Master"/> <node pkg="nodelet" type="nodelet" name="nodelet_camera" args="load car/camera Master"/> <node pkg="nodelet" type="nodelet" name="nodelet_lanekeeping" args="load car/lanekeeping Master"/> + <node pkg="nodelet" type="nodelet" name="nodelet_mav_link" args="load car/mav_link Master"/> </launch> <!-- diff --git a/modules/catkin_ws/src/car/plugins/nodelet_plugins.xml b/modules/catkin_ws/src/car/plugins/nodelet_plugins.xml index 6726b019505016846a9f355cb3aeb9c384e75928..f41107561d1b1d855f4d742002355f022225c274 100644 --- a/modules/catkin_ws/src/car/plugins/nodelet_plugins.xml +++ b/modules/catkin_ws/src/car/plugins/nodelet_plugins.xml @@ -53,3 +53,13 @@ </description> </class> </library> + +<library path="lib/libmav_link"> + <class name="car/mav_link" + type="car::MavLink" + base_class_type="nodelet::Nodelet"> + <description> + Missing + </description> + </class> +</library> diff --git a/modules/catkin_ws/src/car/src/mainNode/PlatoonController.cpp b/modules/catkin_ws/src/car/src/mainNode/PlatoonController.cpp index fcb44c3c1f21b9fbd465cd09872e4ed9dbe02b5e..fd1aff2bf90581994202b196d226b904e09331a0 100644 --- a/modules/catkin_ws/src/car/src/mainNode/PlatoonController.cpp +++ b/modules/catkin_ws/src/car/src/mainNode/PlatoonController.cpp @@ -3,13 +3,20 @@ // #include "../../include/mainNode/PlatoonController.h" +#include <iostream> namespace car { +PlatoonController::PlatoonController() + : ccNotify() +{} + + void car::PlatoonController::run() { // TODO: implementation + std::cout << "PlatoonController was run." << std::endl; } } diff --git a/modules/catkin_ws/src/car/src/mainNode/mainNode.cpp b/modules/catkin_ws/src/car/src/mainNode/mainNode.cpp index 8bef4824b600daf1b26c7c1f8674147a93591b83..9be2fc067163150aedfa78b70c19971925ea9f37 100644 --- a/modules/catkin_ws/src/car/src/mainNode/mainNode.cpp +++ b/modules/catkin_ws/src/car/src/mainNode/mainNode.cpp @@ -16,15 +16,29 @@ PLUGINLIB_EXPORT_CLASS(car::MainNode, nodelet::Nodelet); namespace car { -MainNode::MainNode(ros::NodeHandle & nh, std::string & name) - : nh(nh) - , name(name) - , platoonControllerThread(platoonControllerRun) -{} +MainNode::MainNode(ros::NodeHandle & nh, std::string & name) : + platoonController() + , platoonControllerThread([this] { platoonController.run(); }) + // , c2cNet() + // , pcNet() + // , c2c() + // , commandReceiver(pc2car::CommandReceiver::create(pcNet)) + , nh(nh) + , name(name) +{ + std::cout << "Called MainNode(ros::NodeHandle & nh, std::string & name)." << std::endl; +} -MainNode::MainNode() - : platoonControllerThread(platoonControllerRun) -{} +MainNode::MainNode() : + platoonController() + , platoonControllerThread([this] { platoonController.run(); }) + // , c2cNet() + // , pcNet() + // , c2c() + // , commandReceiver(pc2car::CommandReceiver::create(pcNet)) +{ + std::cout << "Called MainNode()." << std::endl; +} MainNode::~MainNode() {} @@ -34,7 +48,6 @@ void MainNode::onInit() NODELET_INFO("MainNode::onInit -- START"); logEnabled = nh.advertise<logEnabledMsg>("logEnabled", 5); environmentData = nh.subscribe("environmentData", 1, &MainNode::environmentDataCallback, this); - std::cout << "MainNode &nh: " << &nh << "\n"; // CODE GOES HERE diff --git a/modules/catkin_ws/src/car/src/mavLink/mavLink.cpp b/modules/catkin_ws/src/car/src/mavLink/mavLink.cpp new file mode 100644 index 0000000000000000000000000000000000000000..94246aac076976252847b42e35c675452ea35a84 --- /dev/null +++ b/modules/catkin_ws/src/car/src/mavLink/mavLink.cpp @@ -0,0 +1,50 @@ +#include <pluginlib/class_list_macros.h> +#include <ros/ros.h> + +#include "mavLink/mavLink.h" + +#include "car/stmDataMsg.h" +#include "car/ccDataMsg.h" +#include "car/laneDataMsg.h" +#include "car/rcEnabledMsg.h" + +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); + 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) + { + std::cout << "MavLink recived new lane data ( ).\n"; + } + + void MavLink::rcEnabledCallback(const rcEnabledMsg::ConstPtr& inMsg) + { + std::cout << "MavLink recived new rc status (" << inMsg->enabled << ").\n"; + } + + +}