diff --git a/CMakeLists.txt b/CMakeLists.txt index d99a7cdf830115fa2c5ed0571c853cda1b19d1d2..406747dd7dbdaad5f141800576b6d7aa7fc7c2be 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,6 +39,7 @@ add_service_files( generate_messages( DEPENDENCIES std_msgs + geometry_msgs ) # ################################################################################################################################ diff --git a/src/teaching/pose_replayer.cpp b/src/teaching/pose_replayer.cpp index c9dd564803914bdbe3e2ba6459d9a3cf53045e87..fe3fc08ebe0f81cee80d99f6ca40f872d17dfae3 100644 --- a/src/teaching/pose_replayer.cpp +++ b/src/teaching/pose_replayer.cpp @@ -4,6 +4,7 @@ #include <ros/ros.h> #include <std_msgs/String.h> +#include <geometry_msgs/Pose.h> #include <moveit/move_group_interface/move_group_interface.h> #include <moveit/planning_scene_interface/planning_scene_interface.h> @@ -21,7 +22,7 @@ void replayCallback(const std_msgs::String::ConstPtr &msg, ros::NodeHandle &node const robot_state::JointModelGroup *joint_model_group = move_group.getCurrentState()->getJointModelGroup(PLANNING_GROUP); - std::vector<double> x_transform, y_transform, z_transform, x_rotation, y_rotation, z_rotation, w_rotation; + std::vector<geometry_msgs::Pose> poses; // Visualization Setup namespace rvt = rviz_visual_tools; @@ -38,32 +39,18 @@ void replayCallback(const std_msgs::String::ConstPtr &msg, ros::NodeHandle &node panda_teaching::GetCollectedPoses srv; if (client.call(srv)) { - for (int i = 0; i < srv.response.x_transform.size(); i++) { - x_transform.push_back((double) srv.response.x_transform[i]); - y_transform.push_back((double) srv.response.y_transform[i]); - z_transform.push_back((double) srv.response.z_transform[i]); - - x_rotation.push_back((double) srv.response.x_rotation[i]); - y_rotation.push_back((double) srv.response.y_rotation[i]); - z_rotation.push_back((double) srv.response.z_rotation[i]); - w_rotation.push_back((double) srv.response.w_rotation[i]); + for (int i = 0; i < srv.response.pose_array.poses.size(); i++) { + poses.push_back(srv.response.pose_array.poses[i]); } } else { ROS_ERROR("Failed to fetch saved poses"); return; } - for (int i = 0; i < x_transform.size(); i++) { + for (int i = 0; i < srv.response.pose_array.poses.size(); i++) { move_group.setStartState(*move_group.getCurrentState()); - geometry_msgs::Pose another_pose; - another_pose.orientation.x = x_rotation.at(i); - another_pose.orientation.y = y_rotation.at(i); - another_pose.orientation.z = z_rotation.at(i); - another_pose.orientation.w = w_rotation.at(i); - another_pose.position.x = x_transform.at(i); - another_pose.position.y = y_transform.at(i); - another_pose.position.z = z_transform.at(i); + geometry_msgs::Pose another_pose = srv.response.pose_array.poses[i]; move_group.setPoseTarget(another_pose); moveit::planning_interface::MoveGroupInterface::Plan my_plan; diff --git a/src/teaching/pose_storage_service.cpp b/src/teaching/pose_storage_service.cpp index 925b797ba07e9b794bdcdcb63dc73df8dfec662d..8505bad07c367fddfb15b1281ca5e6b3d07d0599 100644 --- a/src/teaching/pose_storage_service.cpp +++ b/src/teaching/pose_storage_service.cpp @@ -5,35 +5,21 @@ #include <tf2_ros/transform_listener.h> #include <geometry_msgs/TransformStamped.h> #include <geometry_msgs/Twist.h> +#include <geometry_msgs/Pose.h> -std::vector<double> x_transform, y_transform, z_transform, x_rotation, y_rotation, z_rotation, w_rotation; +std::vector<geometry_msgs::Pose> poses; bool getCollectedPoses(panda_teaching::GetCollectedPoses::Request &req, panda_teaching::GetCollectedPoses::Response &res) { - res.x_transform = x_transform; - res.y_transform = y_transform; - res.z_transform = z_transform; - - res.x_rotation = x_rotation; - res.y_rotation = y_rotation; - res.z_rotation = z_rotation; - res.w_rotation = w_rotation; - + res.pose_array.poses = poses; return true; } bool saveCollectedPose(panda_teaching::SavePose::Request &req, panda_teaching::SavePose::Response &res) { - x_transform.push_back((double) req.x_transform); - y_transform.push_back((double) req.y_transform); - z_transform.push_back((double) req.z_transform); - - x_rotation.push_back((double) req.x_rotation); - y_rotation.push_back((double) req.y_rotation); - z_rotation.push_back((double) req.z_rotation); - w_rotation.push_back((double) req.w_rotation); + poses.push_back(req.pose); return true; } @@ -41,14 +27,7 @@ bool saveCollectedPose(panda_teaching::SavePose::Request &req, bool deleteCollectedPoses(panda_teaching::DeletePose::Request &req, panda_teaching::DeletePose::Response &res) { - x_transform.clear(); - y_transform.clear(); - z_transform.clear(); - - x_rotation.clear(); - y_rotation.clear(); - z_rotation.clear(); - w_rotation.clear(); + poses.clear(); return true; } diff --git a/src/teaching/pose_tf_listener.cpp b/src/teaching/pose_tf_listener.cpp index f86eaa99ac39df83332552d1e29a4408ed9cee6a..35e5e1d5609c49a8c39c5aa5c0f144bb79d2d132 100644 --- a/src/teaching/pose_tf_listener.cpp +++ b/src/teaching/pose_tf_listener.cpp @@ -13,14 +13,14 @@ void collect(ros::NodeHandle node_handle, geometry_msgs::TransformStamped t) { ros::ServiceClient client = node_handle.serviceClient<panda_teaching::SavePose>("SaveCollectedPose"); panda_teaching::SavePose srv; - srv.request.x_transform = t.transform.translation.x; - srv.request.y_transform = t.transform.translation.y; - srv.request.z_transform = t.transform.translation.z; + srv.request.pose.position.x = t.transform.translation.x; + srv.request.pose.position.y = t.transform.translation.y; + srv.request.pose.position.z = t.transform.translation.z; - srv.request.x_rotation = t.transform.rotation.x; - srv.request.y_rotation = t.transform.rotation.y; - srv.request.z_rotation = t.transform.rotation.z; - srv.request.w_rotation = t.transform.rotation.w; + srv.request.pose.orientation.x = t.transform.rotation.x; + srv.request.pose.orientation.y = t.transform.rotation.y; + srv.request.pose.orientation.z = t.transform.rotation.z; + srv.request.pose.orientation.w = t.transform.rotation.w; if (!client.call(srv)) { ROS_ERROR("Failed to call pose_storage_service."); diff --git a/srv/GetCollectedPoses.srv b/srv/GetCollectedPoses.srv index fc924e4b310f29a28510dcf23c02216f81ce0022..1dd5ab5f63d99cea469ce8d62d0489c86b8c3663 100644 --- a/srv/GetCollectedPoses.srv +++ b/srv/GetCollectedPoses.srv @@ -1,8 +1,2 @@ --- -float64[] x_transform -float64[] y_transform -float64[] z_transform -float64[] x_rotation -float64[] y_rotation -float64[] z_rotation -float64[] w_rotation \ No newline at end of file +geometry_msgs/PoseArray pose_array \ No newline at end of file diff --git a/srv/SavePose.srv b/srv/SavePose.srv index 542634afa5a77af2efbc7ba8bc94af7dc24a0b49..7cd0fe54c483b24818ad9d765d23a669fbe39c04 100644 --- a/srv/SavePose.srv +++ b/srv/SavePose.srv @@ -1,8 +1,2 @@ -float64 x_transform -float64 y_transform -float64 z_transform -float64 x_rotation -float64 y_rotation -float64 z_rotation -float64 w_rotation +geometry_msgs/Pose pose --- \ No newline at end of file