ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

I faced the same problem.

I learn how to use a Cartesian planner thanks to moveit through python interface. I was able to move my arms one by one.

group_arm1.execute(plan)

Then I wanted to do simultaneous motion, so I started to look at the doc and figured out there is a function called AsyncExecute() in C++ but not for the Python interface. Some people help me to find a fix which is not implemented in indigo package yet. So i build from source with the fix, only to find out that this function is non blocking but that's all, you can't send several Trajectories at the same time.

This limitation is a bit weird because if you set your several arms as subgroup of a robot_group, then you can set a target for each end_effector, then go(). The mouvement is then simultaneous but not a Cartesian path.

group = moveit_commander.MoveGroupCommander("bot")
group.set_pose_target(pose_target1, "N1_ee_link")
#set-pose_target() for each end effector
group.go()

I faced the same problem.

I learn how to use a Cartesian planner thanks to moveit through python interface. I was able to move my arms one by one.

group_arm1.execute(plan)

Then I wanted to do simultaneous motion, so I started to look at the doc and figured out there is a function called AsyncExecute() in C++ but not for the Python interface. Some people help me to find a fix which is not implemented in indigo package yet. So i build from source with the fix, only to find out that this function is non blocking but that's all, you can't send several Trajectories at the same time.

This limitation is a bit weird because if you set your several arms as subgroup of a robot_group, then you can set a target for each end_effector, then go(). The mouvement is then simultaneous but not a Cartesian path.

group = moveit_commander.MoveGroupCommander("bot")
moveit_commander.MoveGroupCommander("robot_group")
group.set_pose_target(pose_target1, "N1_ee_link")
#set-pose_target() for each end effector
group.go()

I faced the same problem.

I learn how to use a Cartesian planner thanks to moveit through python interface. I was able to move my arms one by one.

group_arm1.execute(plan)

Then I wanted to do simultaneous motion, so I started to look at the doc and figured out there is a function called AsyncExecute() in C++ but not for the Python interface. Some people help me to find a fix which is not implemented in indigo package yet. So i build from source with the fix, only to find out that this function is non blocking but that's all, you can't send several Trajectories at the same time.

This limitation is a bit weird because if you set your several arms as subgroup of a robot_group, then you can set a target for each end_effector, then go(). The mouvement is then simultaneous but not a Cartesian path.

group = moveit_commander.MoveGroupCommander("robot_group")
group.set_pose_target(pose_target1, "N1_ee_link")
#set-pose_target() for each end effector
group.go()

A workaround with Cartesian planning can be to plan for each arm then try to fuse the trajectories (which are a list of joint angles, with time...). The problem is that it's not so easy to do because the trajectories can have different increment of positions and different time for execution.

I faced the same problem.

I learn how to use a Cartesian planner thanks to moveit through python interface. I was able to move my arms one by one.

group_arm1.execute(plan)

Then I wanted to do simultaneous motion, so I started to look at the doc and figured out there is a function called AsyncExecute() in C++ but not for the Python interface. Some people help me to find a fix which is not implemented in indigo package yet. So i build from source with the fix, only to find out that this function is non blocking but that's all, you can't send several Trajectories at the same time.

This limitation is a bit weird because if you set your several arms as subgroup of a robot_group, then you can set a target for each end_effector, then go(). The mouvement is then simultaneous but not a Cartesian path.

group = moveit_commander.MoveGroupCommander("robot_group")
group.set_pose_target(pose_target1, "N1_ee_link")
#set-pose_target() for each end effector
group.go()

A workaround with Cartesian planning can be to plan for each arm then try to fuse the trajectories (which are a list of joint angles, with time...). The problem is that it's not so easy to do because the trajectories can have different increment of positions and different time for execution.

This comment from http://answers.ros.org/question/74776/cartesian-controller-for-ros/ is the same idea

Much of ROS's internal design supports the idea of merging together successive trajectories using the "time_from_start" field in JointTrajectoryPoint. I'm not sure whether this is carried all the way through the robot drivers, though. You may need to do some "hacking" to get it working.