diff --git a/src/robot_controller/CMakeLists.txt b/src/robot_controller/CMakeLists.txt index cfbbf6e..cb80731 100644 --- a/src/robot_controller/CMakeLists.txt +++ b/src/robot_controller/CMakeLists.txt @@ -7,9 +7,8 @@ endif() # find dependencies find_package(ament_cmake REQUIRED) -# uncomment the following section in order to fill in -# further dependencies manually. -# find_package( REQUIRED) +find_package(rclcpp REQUIRED) +find_package(robot_interfaces REQUIRED) if(BUILD_TESTING) find_package(ament_lint_auto REQUIRED) @@ -22,16 +21,11 @@ if(BUILD_TESTING) ament_lint_auto_find_test_dependencies() endif() -find_package(ament_cmake REQUIRED) -find_package(rclcpp REQUIRED) -find_package(robot_interfaces REQUIRED) - -#add_executable(robotcontroller src/robotcontroller.cpp) -#ament_target_dependencies(robotcontroller rclcpp robot_interfaces) +add_executable(robot_controller src/cpp/robot_controller.cpp) +ament_target_dependencies(robot_controller rclcpp robot_interfaces) install(TARGETS - talker - listener + robot_controller DESTINATION lib/${PROJECT_NAME}) ament_package() diff --git a/src/robot_controller/package.xml b/src/robot_controller/package.xml index c2d1ad9..75a78da 100644 --- a/src/robot_controller/package.xml +++ b/src/robot_controller/package.xml @@ -9,6 +9,9 @@ ament_cmake + rclcpp + robot_interfaces + ament_lint_auto ament_lint_common diff --git a/src/robot_controller/src/cpp/robot_controller.cpp b/src/robot_controller/src/cpp/robot_controller.cpp new file mode 100644 index 0000000..3519e2d --- /dev/null +++ b/src/robot_controller/src/cpp/robot_controller.cpp @@ -0,0 +1,65 @@ +#include +#include "rclcpp/rclcpp.hpp" +#include "robot_interfaces/srv/execute_motion.hpp" + +class RobotController : public rclcpp::Node +{ +public: + /// Constructor + RobotController(std::string name) + : Node(name) + { + //this->service = this->create_service(name+"_execute_path", &this->executePath); + this->service = this->create_service(name+"_execute_path", std::bind(&RobotController::executePath, this, std::placeholders::_1, std::placeholders::_2)); + + // Subscribe to target pose + //target_pose_sub_ = this->create_subscription("/target_pose", rclcpp::QoS(1), std::bind(&MoveItFollowTarget::target_pose_callback, this, std::placeholders::_1)); + + //RCLCPP_INFO(this->get_logger(), "Initialization successful."); + + + //std::shared_ptr node = rclcpp::Node::make_shared("add_two_ints_server"); + + //rclcpp::Service::SharedPtr service = node->create_service("add_two_ints", &add); + + //RCLCPP_INFO(rclcpp::get_logger("rclcpp"), "Ready to add two ints."); + + //rclcpp::spin(node); + //rclcpp::shutdown(); + } + + //int (RobotController::*executePath)(const std::shared_ptr request, std::shared_ptr response); +void executePath(const std::shared_ptr request, std::shared_ptr response) const +{ + //request->motion->path PoseStamped[] + //request->motion->acceleration float64 + //request->motion->velocity float64 + RCLCPP_INFO(this->get_logger(), "NEW MOTION: Acceleration: "); + //RCLCPP_INFO(this->get_logger(), "Acceleration: " + std::to_string(request.motion.acceleration)); + response->status = "executePath not implemented"; + RCLCPP_WARN(this->get_logger(), "executePath not implemented"); +} + +private: + /// Callback that executes path on robot + + rclcpp::Service::SharedPtr service; +}; + + +//RobotController::RobotController(name) : Node(name) + +int main(int argc, char ** argv) +{ + rclcpp::init(argc, argv); + + RCLCPP_INFO(rclcpp::get_logger("rclcpp"), "Starting generic robot_controller"); + auto robot = std::make_shared("generic"); + + rclcpp::executors::SingleThreadedExecutor executor; + executor.add_node(robot); + executor.spin(); + + rclcpp::shutdown(); + return EXIT_SUCCESS; +} diff --git a/src/robot_controller/src/robotcontroller.cpp b/src/robot_controller/src/robotcontroller.cpp deleted file mode 100644 index 2f49900..0000000 --- a/src/robot_controller/src/robotcontroller.cpp +++ /dev/null @@ -1,41 +0,0 @@ -#include -#include - -class RobotController : public rclcpp::Node -{ -public: - /// Constructor - RobotController(); - -private: - /// Callback that executes path on robot - virtual void add(const std::shared_ptr request, - std::shared_ptr response); -}; - -RobotController::RobotController(string name) : Node(name) -{ - // Subscribe to target pose - target_pose_sub_ = this->create_subscription("/target_pose", rclcpp::QoS(1), std::bind(&MoveItFollowTarget::target_pose_callback, this, std::placeholders::_1)); - - RCLCPP_INFO(this->get_logger(), "Initialization successful."); -} - -int main(int argc, char ** argv) -{ - //rclcpp::init(argc, argv); - - //auto target_follower = std::make_shared(); - - //rclcpp::executors::SingleThreadedExecutor executor; - //executor.add_node(target_follower); - //executor.spin(); - - //rclcpp::shutdown(); - //return EXIT_SUCCESS; - (void) argc; - (void) argv; - - printf("hello world\n"); - return 0; -} diff --git a/src/robot_interfaces/CMakeLists.txt b/src/robot_interfaces/CMakeLists.txt index f8de5fe..69f4e66 100644 --- a/src/robot_interfaces/CMakeLists.txt +++ b/src/robot_interfaces/CMakeLists.txt @@ -24,11 +24,12 @@ endif() find_package(geometry_msgs REQUIRED) find_package(rosidl_default_generators REQUIRED) +find_package(rclcpp REQUIRED) rosidl_generate_interfaces(${PROJECT_NAME} "msg/Motion.msg" "srv/ExecuteMotion.srv" - DEPENDENCIES geometry_msgs # Add packages that above messages depend on, in this case geometry_msgs for Sphere.msg + DEPENDENCIES geometry_msgs # Add packages that above messages depend on ) ament_package()