44#include < moveit/task_constructor/stages/move_to.h>
55#include < moveit/task_constructor/stages/fixed_state.h>
66#include < moveit/task_constructor/solvers/joint_interpolation.h>
7+ #include < moveit/task_constructor/moveit_compat.h>
78
89#include < moveit/planning_scene/planning_scene.h>
910
@@ -33,7 +34,8 @@ struct PandaMoveTo : public testing::Test
3334
3435 scene = std::make_shared<PlanningScene>(t.getRobotModel ());
3536 scene->getCurrentStateNonConst ().setToDefaultValues ();
36- scene->getCurrentStateNonConst ().setToDefaultValues (t.getRobotModel ()->getJointModelGroup (" panda_arm" ), " ready" );
37+ scene->getCurrentStateNonConst ().setToDefaultValues (t.getRobotModel ()->getJointModelGroup (" panda_arm" ),
38+ " extended" );
3739 t.add (std::make_unique<stages::FixedState>(" start" , scene));
3840
3941 auto move = std::make_unique<stages::MoveTo>(" move" , std::make_shared<solvers::JointInterpolationPlanner>());
@@ -50,7 +52,7 @@ struct PandaMoveTo : public testing::Test
5052 }
5153
5254TEST_F (PandaMoveTo, namedTarget) {
53- move_to->setGoal (" extended " );
55+ move_to->setGoal (" ready " );
5456 EXPECT_ONE_SOLUTION;
5557}
5658
@@ -70,29 +72,87 @@ TEST_F(PandaMoveTo, stateTarget) {
7072 EXPECT_ONE_SOLUTION;
7173}
7274
75+ geometry_msgs::PoseStamped getFramePoseOfNamedState (RobotState state, std::string pose, std::string frame) {
76+ state.setToDefaultValues (state.getRobotModel ()->getJointModelGroup (" panda_arm" ), pose);
77+ auto frame_eigen{ state.getFrameTransform (frame) };
78+ geometry_msgs::PoseStamped p;
79+ p.header .frame_id = state.getRobotModel ()->getModelFrame ();
80+ p.pose = tf2::toMsg (frame_eigen);
81+ return p;
82+ }
83+
7384TEST_F (PandaMoveTo, pointTarget) {
74- move_to->setGoal ([this ]() {
75- RobotState state{ scene->getCurrentState () };
76- state.setToDefaultValues (t.getRobotModel ()->getJointModelGroup (" panda_arm" ), " extended" );
77- auto frame{ state.getFrameTransform (" panda_link8" ) };
78- geometry_msgs::PointStamped point;
79- point.header .frame_id = scene->getPlanningFrame ();
80- point.point = tf2::toMsg (Eigen::Vector3d{ frame.translation () });
81- return point;
82- }());
85+ geometry_msgs::PoseStamped pose{ getFramePoseOfNamedState (scene->getCurrentState (), " ready" , " panda_link8" ) };
86+
87+ geometry_msgs::PointStamped point;
88+ point.header = pose.header ;
89+ point.point = pose.pose .position ;
90+ move_to->setGoal (point);
91+
8392 EXPECT_ONE_SOLUTION;
8493}
8594
8695TEST_F (PandaMoveTo, poseTarget) {
87- move_to->setGoal ([this ]() {
88- RobotState state{ scene->getCurrentState () };
89- state.setToDefaultValues (t.getRobotModel ()->getJointModelGroup (" panda_arm" ), " extended" );
90- auto frame{ state.getFrameTransform (" panda_link8" ) };
91- geometry_msgs::PoseStamped pose;
92- pose.header .frame_id = scene->getPlanningFrame ();
93- pose.pose = tf2::toMsg (frame);
94- return pose;
96+ move_to->setGoal (getFramePoseOfNamedState (scene->getCurrentState (), " ready" , " panda_link8" ));
97+ EXPECT_ONE_SOLUTION;
98+ }
99+
100+ TEST_F (PandaMoveTo, poseIKFrameLinkTarget) {
101+ const std::string IK_FRAME{ " panda_hand" };
102+ move_to->setIKFrame (IK_FRAME);
103+ move_to->setGoal (getFramePoseOfNamedState (scene->getCurrentState (), " ready" , IK_FRAME));
104+ EXPECT_ONE_SOLUTION;
105+ }
106+
107+ moveit_msgs::AttachedCollisionObject createAttachedObject (const std::string& id) {
108+ moveit_msgs::AttachedCollisionObject aco;
109+ aco.link_name = " panda_hand" ;
110+ aco.object .header .frame_id = aco.link_name ;
111+ aco.object .operation = aco.object .ADD ;
112+ aco.object .id = id;
113+ aco.object .primitives .resize (1 , []() {
114+ shape_msgs::SolidPrimitive p;
115+ p.type = p.SPHERE ;
116+ p.dimensions .resize (1 );
117+ p.dimensions [p.SPHERE_RADIUS ] = 0.01 ;
118+ return p;
119+ }());
120+ #if MOVEIT_HAS_OBJECT_POSE
121+ aco.object .pose .position .z = 0.2 ;
122+ aco.object .pose .orientation .w = 1.0 ;
123+ #else
124+ aco.object .primitive_poses .resize (1 );
125+ aco.object .primitive_poses [0 ].position .z = 0.2 ;
126+ aco.object .primitive_poses [0 ].orientation .w = 1.0 ;
127+ #endif
128+ #if MOVEIT_HAS_STATE_RIGID_PARENT_LINK
129+ aco.object .subframe_names .resize (1 , " subframe" );
130+ aco.object .subframe_poses .resize (1 , []() {
131+ geometry_msgs::Pose p;
132+ p.orientation .w = 1.0 ;
133+ return p;
95134 }());
135+ #endif
136+ return aco;
137+ }
138+
139+ TEST_F (PandaMoveTo, DISABLED_poseIKFrameAttachedTarget) {
140+ const std::string ATTACHED_OBJECT{ " attached_object" };
141+ scene->processAttachedCollisionObjectMsg (createAttachedObject (ATTACHED_OBJECT));
142+
143+ move_to->setIKFrame (ATTACHED_OBJECT);
144+ move_to->setGoal (getFramePoseOfNamedState (scene->getCurrentState (), " ready" , ATTACHED_OBJECT));
145+ EXPECT_ONE_SOLUTION;
146+ }
147+
148+ TEST_F (PandaMoveTo, DISABLED_poseIKFrameAttachedSubframeTarget) {
149+ const std::string ATTACHED_OBJECT{ " attached_object" };
150+ const std::string IK_FRAME{ ATTACHED_OBJECT + " /subframe" };
151+
152+ scene->processAttachedCollisionObjectMsg (createAttachedObject (ATTACHED_OBJECT));
153+
154+ move_to->setIKFrame (IK_FRAME);
155+ move_to->setGoal (getFramePoseOfNamedState (scene->getCurrentState (), " ready" , IK_FRAME));
96156 EXPECT_ONE_SOLUTION;
97157}
98158
0 commit comments