Skip to content
This repository has been archived by the owner on Feb 3, 2025. It is now read-only.

TracksDrivePlugin #863

Open
osrf-migration opened this issue Sep 30, 2013 · 17 comments
Open

TracksDrivePlugin #863

osrf-migration opened this issue Sep 30, 2013 · 17 comments
Labels

Comments

@osrf-migration
Copy link

Original report (archived issue) by Aris Synodinos (Bitbucket: Progtologist).


Although various types of locomotion are supported in Gazebo with their appropriate ROS plugin, such as the DiffDrivePlugin, the SkidSteerPlugin and the VehiclePlugin, there is no plugin for track driven robots (which is a very common means of locomotion nowadays).

In this nature, we decided to build a plugin for Gazebo (and the appropriate ROS plugin) that supports tracks. However, in the velocity assignment, following the other plugins concept, we encountered (probably) the reason why noone has ever done this before.

There is no easy way to assign robot velocities to joint velocities because the actual tracks are contacting through a non-rigid material, transferring power through friction from the driving drum to the belt and finally to the floor.

We have thought of modelling the tracks using many small wheels that can have vertical displacement and share the same linear velocity with all the other wheels (differentially driven) but this would only be a partial solution as this is not an accurate model and the degrees of freedom of the robot would increase considerably making the simulation a hard task.

There is no SDF/URDF way of declaring tracks or non-rigid materials (for belts). Maybe this is the point were some decisions have to be made of how track-driven robots should be integrated in Gazebo/SDF/URDF/ROS. We would be willing to help in developing such functionality, if this is something planned or can be easily incorporated in Gazebo.

@osrf-migration
Copy link
Author

Original comment by Nate Koenig (Bitbucket: Nathan Koenig).


We would love to see track driven vehicles in Gazebo. This capability is not on our todo list right now, but we are more than willing to offer guidance and help.

It would be worthwhile to start with your many wheels approach. It would get something working, and could be used as a baseline for further improvements.

You might also want to look at soft-bodies within Bullet (which is almost integrated with Gazebo).

@osrf-migration
Copy link
Author

Original comment by Aris Synodinos (Bitbucket: Progtologist).


I have created a python script that creates the SDF model for track driven vehicles in Gazebo. The script is configurable but the model created has a very high complexity, since it approximates the tracks with a closed kinematic chain of small pads.

The code is available in github here:

https://github.com/progtologist/gazebo-tracks

and the model generated looks like this:

track driven robot

The model can be controlled by applying torque directly to the drums just as a classic skid-steer robot would.

Any feedback would be highly appreciated.

@osrf-migration
Copy link
Author

Original comment by Nate Koenig (Bitbucket: Nathan Koenig).


This is fantastic. What kind of performance do you get with this model?

We could build this functionality directly into Gazebo. Would you be okay with me translating your python script into a gazebo class? The end result would be an SDF element that has the track parameters, and Gazebo automatically creates the track on load.

@osrf-migration
Copy link
Author

Original comment by Nate Koenig (Bitbucket: Nathan Koenig).


  • set assignee_account_id to "557058:095b1e12-74ed-4e20-b44f-2f0745b616e0"
  • set assignee to "nkoenig (Bitbucket: nkoenig, GitHub: nkoenig)"

@osrf-migration
Copy link
Author

Original comment by Aris Synodinos (Bitbucket: Progtologist).


I get about .6 realtime on a Core i7 920 on a single thread.

Of course I would be more than happy if I see this properly integrated in Gazebo, The main problem I had when building this model was placing the pads in the perimeter and still closing the track correctly. If you can find a better way than mine, I would love to see that!

Still the drums need finetuning to prevent the pads from escaping (displacement over y-axis) but these are small details I think.

@osrf-migration
Copy link
Author

Original comment by Nate Koenig (Bitbucket: Nathan Koenig).


Great. Thanks for the info. I'll start work on this asap.

@osrf-migration
Copy link
Author

Original comment by Stefan Kohlbrecher (Bitbucket: Stefan_Kohlbrecher).


Revisiting this, I implemented the "many wheels" approach with limited success as described here on Gazebo Answers. The main issue appears setting the friction parameters so the system works as intended. Currently, I am not sure this is in fact possible.

So two approaches have been implemented so far:

  • Proper track modeling presented by the OP of this issue. Main issue: Relatively slow, but also likely most realistic simulation

  • Simulation of tracks by multiple intersecting wheels. Main issues: Setting friction parameters correctly seems to be hard, only limited fidelity

I´m wondering if simulating tracks as conveyor belts would be a good middleground solution. It appears this should be easy enough with ODE (see discussion on Ogre Forums), but the same technique should also be applicable with bullet or other engines.

@osrf-migration
Copy link
Author

Original comment by francoisdtf (Bitbucket: francoisdtf).


Hi,

I would be curious to know if this project has evolved any further since the last post, or if any other tracked vehicle model has been created for Gazebo anyhow, since I'm currently planning on using such a model.

If any information is available out there it would be much appreciated :)

@osrf-migration
Copy link
Author

Original comment by Nate Koenig (Bitbucket: Nathan Koenig).


This hasn't progressed much. We have been working on adding a scripting language to SDF to make it easier to generate complex models like this.

@osrf-migration
Copy link
Author

Original comment by francoisdtf (Bitbucket: francoisdtf).


Okay, thank you for the quick answer!

@osrf-migration
Copy link
Author

Original comment by Stefan Kohlbrecher (Bitbucket: Stefan_Kohlbrecher).


I recently revisited this (not simulating tracks with multi bodies, but having plausible tracked vehicle simulation) and came up with a plugin that applies forces to the robot body based on commanded Twist. Very similar to the planar move plugin, but not commanding velocities in world frame, instead applying forces in body frame, using a simple P controller scheme (with hard coded magic numbers at the moment ;) ). Code here: https://github.com/tu-darmstadt-ros-pkg/hector_gazebo/blob/indigo-devel/hector_gazebo_plugins/src/gazebo_ros_force_based_move.cpp#L174

When setting the tracks to be sliding (no friction) this results in quite useful overall behavior as can be seen from this video: Simulating a tracked vehicle in Gazebo.

@osrf-migration
Copy link
Author

Original comment by Aris Synodinos (Bitbucket: Progtologist).


It appears to be working quite well for that particular model, though it would be great if we could achieve something like this

@osrf-migration
Copy link
Author

Original comment by Rocco rr (Bitbucket: marcusbarnet).


Do you have any updates on this topic? We are a mobile robotics company and we design tracked robots. For this reason, we really need to create a gazebo model for all our robots. Can you suggest me how to this please?

@osrf-migration
Copy link
Author

Original comment by Nate Koenig (Bitbucket: Nathan Koenig).


  • set version to "any"

@osrf-migration
Copy link
Author

Original comment by Nate Koenig (Bitbucket: Nathan Koenig).


  • changed version from "any" to "all"

@osrf-migration
Copy link
Author

Original comment by Louise Poubel (Bitbucket: chapulina, GitHub: chapulina).


  • set component to "plugins"

@osrf-migration
Copy link
Author

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

1 participant