I just got the Stretch3, and plan to use it in a autonomous project.
I have tried to use the FUNMAP, however seems to me it is not doing collision checking at all when planning the arm’s trajectory.
On the other hand, some previous form post showed Moveit is not being developed for stretch3 humble.
Are there any other motion planning option that take into account the obstacle collision checking? If not, how should I start on porting the Moveit over to humble for my need? are there any existing work?
Thanks in advance.
Welcome to the Stretch community!
FUNMAP does collision checking when computing its initial plan. However, it does not do any replanning while executing that trajectory, and hence does not adjust to dynamic obstacles. If you are interested in more details about what goes on behind the hood of FUNMAP, the comments in this function and this function that calls it are a good starting point.
MoveIt2 does support replanning while a robot is moving (they call it hybrid planning). However, you are correct that we don’t have plans to support a MoveIt2+Stretch integration in the near future.
If you are interested in a full-featured planner, executor, and collision scene manager, I would recommend MoveIt2, which already exists for ROS humble
. I’d suggest starting with their tutorial series on “Integration with a New Robot.”
Based on our experience integrating MoveIt with Stretch in ROS1 several years ago, here are some notes and advice:
- We had trouble getting differential drive planning working. Since then, MoveIt2 has added a tutorial for that, but looking through the tutorial, it appears a bit outdated.
- Octomap planning with the mobile base took very long, perhaps due to the complexity of the planning scene.
- In general, when integrating MoveIt2 with Stretch, we’d recommend simplifying the problem as much as possible initially, and adding complexity as needed. For example, consider using a virtual revolute joint to model the mobile base, using the robot on hardwood floors for more reliable wheel odometry, using a small octomap scene or only primitives shapes in your planning scene, not using hybrid planning initially, etc.
This is exciting work; please keep us posted as you progress! I have no doubt that the insights you generate will help benefit the Stretch community more broadly.
2 Likes
I’ve tried to go throught the moveit2 tutorial. I’m a bit confused on the complex setup of mvoeit and ros controller. Since stretch have a ros launched stretch_driver. Do I to run the ros_controller that moveit seems to default launch?
I think I almost get moveit to work rn. The part that’s missing is actually the stretch_driver. Basically the arm lift and base are not moving when given a trajectory, while all motors in the wrist seems to be working fine.
What I found is the robot.lift
object’s motor state robot.lift.motor.status['waypoint_traj']['state']
is stuck in waiting_on_sync
, which the code logic didn’t allow it to execute the trajectory.