From c478876ecfb695f3bc1e8ee286c3cd56ead20b2f Mon Sep 17 00:00:00 2001 From: ValsCSGO Date: Tue, 15 Feb 2022 22:21:15 -0500 Subject: [PATCH] Broken moveit_commander c++ --- src/action_server/CMakeLists.txt | 48 +++++++++++++++++++ .../include/action_server/action_server.hpp | 20 ++++++++ src/action_server/package.xml | 21 ++++++++ src/action_server/src/action_server.cpp | 40 ++++++++++++++++ 4 files changed, 129 insertions(+) create mode 100644 src/action_server/CMakeLists.txt create mode 100644 src/action_server/include/action_server/action_server.hpp create mode 100644 src/action_server/package.xml create mode 100644 src/action_server/src/action_server.cpp diff --git a/src/action_server/CMakeLists.txt b/src/action_server/CMakeLists.txt new file mode 100644 index 0000000..b9cfc11 --- /dev/null +++ b/src/action_server/CMakeLists.txt @@ -0,0 +1,48 @@ +cmake_minimum_required(VERSION 3.5) +project(action_server) + +# Default to C99 +if(NOT CMAKE_C_STANDARD) + set(CMAKE_C_STANDARD 99) +endif() + +# Default to C++14 +if(NOT CMAKE_CXX_STANDARD) + set(CMAKE_CXX_STANDARD 14) +endif() + +if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") + add_compile_options(-Wall -Wextra -Wpedantic) +endif() + +# find dependencies +find_package(ament_cmake REQUIRED) +find_package(rclcpp REQUIRED) +find_package(geometry_msgs REQUIRED) + +# uncomment the following section in order to fill in +# further dependencies manually. +# find_package( REQUIRED) + +add_executable(action_server src/action_server.cpp) +target_include_directories(action_server PUBLIC + $ + $) + +ament_target_dependencies(action_server rclcpp geometry_msgs) + +install(TARGETS action_server + DESTINATION lib/${PROJECT_NAME}) + +if(BUILD_TESTING) + find_package(ament_lint_auto REQUIRED) + # the following line skips the linter which checks for copyrights + # uncomment the line when a copyright and license is not present in all source files + #set(ament_cmake_copyright_FOUND TRUE) + # the following line skips cpplint (only works in a git repo) + # uncomment the line when this package is not in a git repo + #set(ament_cmake_cpplint_FOUND TRUE) + ament_lint_auto_find_test_dependencies() +endif() + +ament_package() diff --git a/src/action_server/include/action_server/action_server.hpp b/src/action_server/include/action_server/action_server.hpp new file mode 100644 index 0000000..01d46c2 --- /dev/null +++ b/src/action_server/include/action_server/action_server.hpp @@ -0,0 +1,20 @@ +#include "rclcpp/rclcpp.hpp" + +#include "geometry_msgs/msg/pose.hpp" + +#include + +class ActionServer : public rclcpp::Node { + public: + ActionServer(); + + private: + void set_pose_cb(geometry_msgs::msg::Pose); + + private: + rclcpp::Node::SharedPtr _move_group_node; + + rclcpp::Subscription _goal; + + const std::string PLANNING_GROUP = "ar3_arm"; +}; diff --git a/src/action_server/package.xml b/src/action_server/package.xml new file mode 100644 index 0000000..8bc107e --- /dev/null +++ b/src/action_server/package.xml @@ -0,0 +1,21 @@ + + + + action_server + 1.0.0 + Server for handling absolute movements + Thomas Muller + John Farrell + TODO: License declaration + + ament_cmake + rclcpp + geometry_msgs + + ament_lint_auto + ament_lint_common + + + ament_cmake + + diff --git a/src/action_server/src/action_server.cpp b/src/action_server/src/action_server.cpp new file mode 100644 index 0000000..c42e059 --- /dev/null +++ b/src/action_server/src/action_server.cpp @@ -0,0 +1,40 @@ +// https://github.com/ros-planning/moveit2_tutorials/blob/foxy/doc/move_group_interface/src/move_group_interface_tutorial.cpp +// maybe use this: https://github.com/ros-planning/moveit2/issues/775 + +#include +#include + +ActionServer::ActionServer() : rclcpp::Node("action_server") { + // Get the move_group we'll apply transformations to + moveit::planning_interface::MoveGroupInterface move_group(ActionServer::_move_group_node, PLANNING_GROUP); + + // Define the planning scene + moveit::planning_interface::PlanningSceneInterface planning_scene_interface; + + // Define a pointer to the planning scene because tutorial says it's faster + const moveit::core::JointModelGroup* joint_model_group = move_group.getCurrentState()->getJointModelGroup(ActionServer::PLANNING_GROUP); + + // Set up the callback for settings the pose from camera/joystick/etc + ActionServer::_goal = _move_group_node->create_subscription("/set_pose", 10, std::bind(&ActionServer::set_pose_cb, this, std::placeholders::_1)); +} + +void set_pose_cb(geometry_msgs::msg::Pose::SharedPtr pose) { + move_group.setPoseTarget(pose); + + // plan the trajectory for the move + moveit::planning_interface::MoveGroupInterface::Plan my_plan; + bool success = (move_group.plan(my_plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS); + + move_group.move(); +} + +int main(int argc, char **argv) { + rclcpp::init(argc, argv); + + _move_group_node = std::make_shared(); + rclcpp::spin(move_group_node); + + rclcpp::shutdown(); + return 0; +} +