Skip to content

This issue was moved to a discussion.

You can continue the conversation there. Go to discussion →

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Question] is there any examples for using mobile manipulators ? #79

Closed
nikepupu opened this issue Apr 28, 2023 · 8 comments
Closed

[Question] is there any examples for using mobile manipulators ? #79

nikepupu opened this issue Apr 28, 2023 · 8 comments
Labels
enhancement New feature or request

Comments

@nikepupu
Copy link

Question

I have a usd file for my dualarm mobile robot. I want to run some RL with it. Is there any examples or descriptions on how I can get started?

@prajapatisarvesh
Copy link

@nikepupu I had the same question, I have a mobile manipulator (differential), and I modified the configuration file for my robot, but couldn't find any examples for differential base robots. Were you able to find something? Thanks

@nikepupu
Copy link
Author

yes, I am able to get my robot to work through modifying the Franka example in the code base. However, I need to modify the USD file quite a lot to get it to work. Somehow there are some issues with joints when changing URDF to USD.

@prajapatisarvesh
Copy link

That's amazing, what mobile robot are you using? Also, is it holonomic or differential? Thanks

@nikepupu
Copy link
Author

It's a ridgeback with 2 UR5s

@prajapatisarvesh
Copy link

Oh okay, that's a holonomic drive. I doubt if orbit supports differential or Ackerman drive for now, will have to dig more into documentation I guess. Thanks for the response though!

@nikepupu
Copy link
Author

I don't think orbit or isaac sim really has the concept of holonomic drive or differential drive. It's actually implemented through two prismatic joint in x and y direction and a revolute joint in x-y plane for holonomic drive. It not really simulating a wheel rotating. I don't really think the simulator is complex enough to handle actually wheel movement for a very complicated base. For differential, you need to come up with different constraints or equivalents.

@prajapatisarvesh
Copy link

Yes you are right. I suppose with prismatic x, y and revolute z we can model almost every holonomic drives but won't be the same for differential. Well that solves my problem. I have a mobile manipulator to I'm not sure if I'll be able to use underlying or it's feature even after modelling the constraints. Thanks though for the clarification!

Mayankm96 pushed a commit that referenced this issue Jul 24, 2023
@JChunX
Copy link

JChunX commented Oct 13, 2023

Not sure if this helps, but I was able to get the Nvidia Carter robot working with differential control commanding wheel velocities independently by simply remapping the dofs:

from omni.isaac.orbit.robots.mobile_manipulator import MobileManipulatorCfg
from omni.isaac.orbit.actuators.group import ActuatorControlCfg, ActuatorGroupCfg
from omni.isaac.orbit.actuators.model import ImplicitActuatorCfg

ROBOT_USD = "robot_usd_path"

ROBOT_CFG = MobileManipulatorCfg(
    meta_info=MobileManipulatorCfg.MetaInfoCfg(
        usd_path=ROBOT_USD,
        base_num_dof=2,
        tool_num_dof=0,
        arm_num_dof=0,
    ),
    init_state=MobileManipulatorCfg.InitialStateCfg(
        dof_pos={
            'left_wheel': 0.0,
            'right_wheel': 0.0,
        },
        dof_vel={
            'left_wheel': 0.0,
            'right_wheel': 0.0,
        },
    ),
    ee_info=MobileManipulatorCfg.EndEffectorFrameCfg(
        body_name="chassis_link", pos_offset=(0.0, 0.0, 0.1034), rot_offset=(1.0, 0.0, 0.0, 0.0)
    ),
    actuator_groups={
        "base": ActuatorGroupCfg(
            dof_names=["left_wheel", "right_wheel"],
            model_cfg=ImplicitActuatorCfg(velocity_limit=100.0, torque_limit=1000.0),
            control_cfg=ActuatorControlCfg(
                command_types=["v_abs"], 
                stiffness={".*": 0.0}, 
                damping={".*": 1e5}),
        ),
    },
)

The robot can then be operated using:

...

actions = torch.tensor([[left_vel, right_vel] for _ in range(robot.count)], device=robot.device)
robot.apply_action(actions)

...

@Mayankm96 Mayankm96 added the enhancement New feature or request label Jul 1, 2024
@isaac-sim isaac-sim locked and limited conversation to collaborators Oct 2, 2024
@Dhoeller19 Dhoeller19 converted this issue into discussion #1090 Oct 2, 2024

This issue was moved to a discussion.

You can continue the conversation there. Go to discussion →

Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

4 participants