Skip to content

Add Reachback mobile manipulator model#227

Merged
sea-bass merged 5 commits into
open-planning:mainfrom
stephanie-eng:seng/mobile-manipulator-model
Jun 4, 2026
Merged

Add Reachback mobile manipulator model#227
sea-bass merged 5 commits into
open-planning:mainfrom
stephanie-eng:seng/mobile-manipulator-model

Conversation

@stephanie-eng
Copy link
Copy Markdown
Contributor

Add the Reachback, which is more-or-less a Doosan H2017 bolted on top of a Clearpath Ridgeback with some other bits added in.

I'm new to this project, so I'm not 100% sure how you guys like to run and test things, so if there are millions of conventions I'm violating, let me know. I just tried to run the RRT demo with the Reachback model:

reachback-roboplan.mp4

Copy link
Copy Markdown
Collaborator

@sea-bass sea-bass left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yay, thank you! Good to see this. Your approach looks totally sensical, though I have a few comments:

  1. Testing wise, I would try out all the Python examples (IK, RRT, and Oink specifically)
  2. The Rolling job is known to fail right now because they just cut over from 24.04 to 26.04 but the image isn't updated yet. So ignore it
  3. As we start collecting more robot model, file size is going to keep being more of a problem. I have a standing issue to resolve this, but not something for today. But if you have any ideas...
  4. The one that maybe we do want to look at for this PR is that the Kinova model also has a Robotiq. So maybe we can find a way to reuse these meshes instead of duplicating them? wait different robotiq model nvm

Comment thread roboplan_examples/python/common.py Outdated
tform=pin.SE3(np.eye(3), np.array([0.0, 0.0, -0.1])).homogeneous,
color=np.array([0.5, 0.5, 0.5, 0.5]),
disabled_collisions=[
"base_link",
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems like it should be a permament disable in the SRDF?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll admit this is mostly copy-paste from https://github.com/open-planning/roboplan/blob/main/roboplan_examples/python/common.py#L435

For the reachback, base_link has no geometry though, chassis_link is the link with geometry. I can just as well remove base_link from here.

</material>

<link name="base_footprint" />
<joint name="base_joint" type="planar">
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cool, glad to see the planar worked!

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Haha, yes! When I first showed you the mobile manipulator with roboplan, I noticed you didn't have planar joint support so I just stacked x, y, and theta joints. But since that recently changed, I figured I should restore the planar joint, and it worked fantastically :D

Comment thread roboplan_example_models/models/reachback_robot_model/README.md Outdated
@stephanie-eng
Copy link
Copy Markdown
Contributor Author

stephanie-eng commented Jun 3, 2026

As we start collecting more robot model, file size is going to keep being more of a problem. I have a standing issue to resolve this, but not something for today. But if you have any ideas...

I assume we don't want to use LFS? Barring that, I'd imagine we'd want to have the models stored and retrieved from somewhere else.

@sea-bass
Copy link
Copy Markdown
Collaborator

sea-bass commented Jun 4, 2026

I assume we don't want to use LFS? Barring that, I'd imagine we'd want to have the models stored and retrieved from somewhere else.

Right. LFS helps retrieve the data, but it doesn't dimish the file size of the entire package. It would have some be something like the latter, which is done for example in https://github.com/robot-descriptions/robot_descriptions.py

Copy link
Copy Markdown
Collaborator

@sea-bass sea-bass left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tested this branch during my lunch break on all the examples:

  • In the RRT example, if you add --include-obstacles, then there is no valid initial configuration. I think the wheels are also colliding with the ground_plane object and may need to be excluded. Alternatively you could just lower the ground plane collision object, which also lets you remove the chassis_link from the exclusion list.
  • IK examples all worked great ✔️

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is a big boi

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Indeed, I deleted it and just used the collision since it looks the same to me anyway 🤷

Thanks for the pointers, got it working with --include-obstacles too. My bad for not checking that was even an option. I was kind of wondering where those test obstacles were used 😅

reachback.webm

- Lower ground plane to be at the height of the wheels
- Disable collisions between ground plane and wheels anyway
- Just use the collision mesh for the gripper
@sea-bass
Copy link
Copy Markdown
Collaborator

sea-bass commented Jun 4, 2026

By the way, I just went down a perf rabbit hole that should help with this example tremendously: #232

@sea-bass sea-bass merged commit 0f68962 into open-planning:main Jun 4, 2026
11 of 12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants