-
Notifications
You must be signed in to change notification settings - Fork 88
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
Add a Gazebo plugin to better match driver interfaces #51
base: dev/noetic
Are you sure you want to change the base?
Conversation
Add gazebo_ros_control PID gains Tuned manually to make movement via the teleop interface behave well Wheels still unspecified because they cause the robot to collapse Use effort joint interface for the gripper so that gripper contacts are well simulated
Removes most of the instability in simulation behavior when lifting objects
Makes tipping behavior in simulation more plausible I assume that the mass of an assembled base is at least this heavy, given that the robot is around 50lbs total
This better matches the physical robot, though this interface doesn't handle the virtual joints that the robot uses
This plug in is a modified version of the original ros_control plugin and that plugin's "default hardware plugin" (confusing, I know) The modified model plugin provides a /runstop service to match the real robot's driver, and hooks this up to ros_controls existing estop implementation The modified hardware plugin provides the mode switching services that the real robot has (mocked for now) and publishes joint states that include the virtual joints used by the real platform. The wrist extension joint behaves the same as the driver implementation. The rotation and translation joints aren't hooked up yet, and it may be difficult to provide their functionality without forking the actual "follow_joint_trajectory" implementation, which expects only joints that are present in the URDF Mirror the real platform setup and use a joint state publisher node to republish the subset of joints that match the URDF
Thank you for opening this PR @nickswalker. I'm just starting to read through it, but it sounds like these custom plugins drastically reduce the sim/real difference between Stretch and its gazebo simulation. This is a great win! As I continue to understand your changes here, I'll take a look at what it would take to get trajectory interface support for the mobile base joints into simulation. Overall, this is fantastic work and I'm excited to get this merged in. @vatanaksoytezer and I will begin testing out these two PRs. Thanks again! |
Add Gazebo plugin This plug in is a modified version of the original ros_control plugin and that plugin's "default hardware plugin" (confusing, I know) The modified model plugin provides a /runstop service to match the real robot's driver, and hooks this up to ros_controls existing estop implementation The modified hardware plugin provides the mode switching services that the real robot has (mocked for now) and publishes joint states that include the virtual joints used by the real platform. The wrist extension joint behaves the same as the driver implementation. The rotation and translation joints aren't hooked up yet, and it may be difficult to provide their functionality without forking the actual "follow_joint_trajectory" implementation, which expects only joints that are present in the URDF Mirror the real platform setup and use a joint state publisher node to republish the subset of joints that match the URDF Add controller shim that mimics the fake joints used by the real robot Use effort control for all arm joints Increase mass of base Makes tipping behavior in simulation more plausible I assume that the mass of an assembled base is at least this heavy, given that the robot is around 50lbs total Use single controller for the simulation This better matches the physical robot, though this interface doesn't handle the virtual joints that the robot uses This commit tracks the changes proposed in hello-robot/stretch_ros#51
This PR assumes the changes of #40.
This plug in is a modified version of the original ros_control plugin and that plugin's "default hardware plugin" (confusing, I know)
/runstop
service to match the real robot's driver, and hooks this up to ros_control's existing estop implementationstretch_controller_raw
to indicate that it behaves differently than the real robot's.I have been using this plugin, along with a shim on top of the
stretch_controller_raw
interface to run code that expects the physical robot API in the simulator. There's likely a better implementation strategy, but I think a lot of the alternatives would require custom controller implementations which would only be used in simulation. I'm opening this PR because the changes improve the sim/real correspondence considerably for basic uses, but there are still some subtleties around the modes to fill in.