Home | Tutorials | Wiki | Issues
Ask Your Question
1

Contact and gazebo_ros_controller issue

asked 2016-09-29 10:39:08 -0500

GuillaumeB gravatar image

updated 2016-09-29 10:55:47 -0500

Dear Gazebo community

We are a company working on an industrial application of mobile robot. We decided to work with ROS and we are trying to use Gazebo to develop, test and validate algorithms.

We decided to publish a basic version of our robot in order to share it with the community. https://github.com/Stanley-Robotics/P...

The robot urdf is here: https://github.com/Stanley-Robotics/P...

With our robot model we face several issues in gazebo:

  • The velocity controller seems to pain to maintain the 0 command when we extend the robot (python script/extend.py) (https://youtu.be/KRg-boKyuiw)
  • The robot slide even with huge mu1, mu2 if we set the iteration in gazebo to 50 (the default one) (https://youtu.be/L3Zn2PzAb_o)
  • The 4 rear casters of our robot are not touching the ground all the time (https://youtu.be/zbRtseEv3Ss)
  • The simulation speed is slow (we would like to have 50 time real time, but we are locked to 2-3 times)

What do you think ? Do you have any advice that could help us about our issues ?

In order to run our simulation please use Gazebo7

git clone https://github.com/Stanley-Robotics/P... roslaunch basic_robot_pkg gazebo_empty_world.launch roslaunch basic_robot_pkg basic_simulation.launch python forward.py/extend.py/rotate.py

Thanks

edit retag flag offensive close merge delete

2 Answers

Sort by ยป oldest newest most voted
0

answered 2016-10-03 10:50:55 -0500

you seem to have fixed the first issue. I cannot reproduce it.

I'm not seeing any significant drift. You will not achieve exactly zero drift with gazebo, but the amount I'm seeing is so small (at iterations=200) that it shouldn't matter. The real world isn't perfect either.

The contacts aren't really an issue. they just do that. Also, when I set it to drive forward they did maintain contact constantly.

50x simulation speed is a lot to ask. Try running it without gzclient (just gzserver) and see if that helps. Also, as you've seen, you can mess with solver iterations to try to increase it.

Comment below this if I didn't answer your question.

edit flag offensive delete link more

Comments

Thank you for your answer. Very weird that you can't reproduce the first issue. I pulled the last version of the code and tried again this morning and the issue was still there. Actually, I would like to have the zero drift behavior but at iteration=50. I thought that it's maybe not possible because of the heavy weight of the robot.

GuillaumeB gravatar imageGuillaumeB ( 2016-10-04 06:17:02 -0500 )edit

Yea, the scripts all works just fine for me, the robot doesn't split itself in half or anything weird. I would steer you away from relying having exactly zero drift.

Peter Mitrano gravatar imagePeter Mitrano ( 2016-10-04 12:00:07 -0500 )edit

Actually, the robot should extend (split himself). The problem is that when we extend (extend.py) the robot should extend (the second part) but the front wheels should keep the zero velocity (and on the simulation the wheels are rotating, <- that's the issue).

GuillaumeB gravatar imageGuillaumeB ( 2016-10-04 13:29:05 -0500 )edit

Ok, so unless you explicitly control the position of the joints, the back wheels will spin. Or, you need to set high enough damping so they just don't move on their own. Right now your model has *no* damping whatsoever, which is not right. Damping should model the resistance in the motor & gearboxes.

Peter Mitrano gravatar imagePeter Mitrano ( 2016-10-04 16:27:23 -0500 )edit

So I tried several value of damping, from 0 to 2147483647. From 0 to ~2000 the wheels continue there rotation, and from 3000 to 2147483647, the robot explode. About the control even if I control the speed to 0, wheels are rotation (during the extend). If I set a velocity_controllers/JointPositionController the wheels can maintain the zero position. Should I avoid JointVelocityController ? However JointVelocityController seems more convinient to control a propulsion wheel.

GuillaumeB gravatar imageGuillaumeB ( 2016-10-06 04:58:25 -0500 )edit

I'm not sure about JointVelocity controller, but I know damping is usually much smaller than that. <100 for most models I've seen. The easiest thing to use is the joint panel hidden on the far right of gazebo. Using the velocity PIDs there will prove to you that the wheels will stop rotating if you properly control their position/velocity

Peter Mitrano gravatar imagePeter Mitrano ( 2016-10-06 09:30:28 -0500 )edit

I use velocity_controllers/JointVelocityController so I am not setting a PID (it is supposed to be perfect, I think). And when I set the velocity thanks to the right panel with a PID it doesn't seems to work.

GuillaumeB gravatar imageGuillaumeB ( 2016-10-07 10:28:59 -0500 )edit

I don't think gazebo does "perfect" controllers. If it doesn't work with the PID panel, it's not likely to work. Try loading your model without any plugins, then try the PID panel. Your plugins are probably fighting with the PID panel

Peter Mitrano gravatar imagePeter Mitrano ( 2016-10-09 18:38:56 -0500 )edit

I haven't tested your suggestion yet. I have noticed that if I comment the <transmission> for pillow_back and pillow_front everything work well, except that I loose 2 transmissions. Any idea about that?

GuillaumeB gravatar imageGuillaumeB ( 2016-10-17 04:45:37 -0500 )edit

nope, sorry. Idk what transmission does. pretty sure that's a urdf thing

Peter Mitrano gravatar imagePeter Mitrano ( 2016-10-18 18:34:38 -0500 )edit
0

answered 2016-10-24 11:42:06 -0500

GuillaumeB gravatar image

I fixed my issue, but I don't really know why. I replace in the transmision flag of the pillow_front and pillow_back (in urdf) that was PositionJointInterface by a VelocityJointInterface. By replacing this interface, the extension of the robot stopped making the robot moving forward. In the control.yaml I used a velocity_controllers/JointPositionController as controller so It doesn't change anything from a user point of view.

Why adding a transmission on a joint A interact on the stability of a joint B. And why using a velocity transmission instead of a position transmission solved this interaction. This will probably be the topic of an other question.

edit flag offensive delete link more
Login/Signup to Answer

Question Tools

2 followers

Stats

Asked: 2016-09-29 10:39:08 -0500

Seen: 433 times

Last updated: Oct 24 '16