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

Moveit, cartesian planning dual arm

asked 2014-02-19 05:20:36 -0500

Equanox gravatar image

Hey guys,

I'm trying to drive through multiple waypoints and would like to use a cartesian planner for this. It is working when i plan for each arm individually cause i can plan for each endeffector but i have no clue how to set it up using a move group including both arms. For the IK solver it is explained in the tutorials (e.g. docs.ros.org/api/pr2_moveit_tutorials/html/planning/src/doc/move_group_interface_tutorial.html). But its not explained how to use a cartesian planner.

Thanks for your help!

Cheers, Matthias

edit retag flag offensive close merge delete

Comments

This qa discusses cartesian, not necessarily limiting to MoveIt! nor dual-arm though http://answers.ros.org/question/74776/cartesian-controller-for-ros/

130s gravatar image 130s  ( 2014-04-03 17:11:09 -0500 )edit

1 Answer

Sort by ยป oldest newest most voted
2

answered 2015-05-21 02:36:17 -0500

Arowana gravatar image

updated 2015-05-21 02:50:13 -0500

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... 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.

edit flag offensive delete link more

Question Tools

1 follower

Stats

Asked: 2014-02-19 05:20:36 -0500

Seen: 2,321 times

Last updated: May 21 '15