Differential drive can't turn
Hi, I am trying to do simulate a differential robot (It's based on a real robot, so I can't change the position of things ). The robot got 2 motorized wheels and 3 casters wheels places as such :
The caster wheels don't have friction or joints, the mains wheels can touch the ground, and when I make it go straight the robot move. The problem is that when I when it to rotate (angular speed on Z ) the wheels rotates normally (each in opposite direction) but the robot doesn't move (the wheels accelerate at a moment, making it go forward then reverse to go back to the initial position, I guess it's the controller trying to fix it )
The urdf of the robot : https://pastebin.com/BKXvftYT
The wheels and casters (they are xacro's macro: https://pastebin.com/X56upVk0
And the control.yaml :
evt1_joint_publisher:
type: "joint_state_controller/JointStateController"
publish_rate: 50
evt1_velocity_controller:
type: "diff_drive_controller/DiffDriveController"
left_wheel: 'wheel_left_joint'
right_wheel: 'wheel_right_joint'
publish_rate: 50
pose_covariance_diagonal: [0.001, 0.001, 1000000.0, 1000000.0, 1000000.0, 1000.0]
twist_covariance_diagonal: [0.001, 0.001, 1000000.0, 1000000.0, 1000000.0, 1000.0]
cmd_vel_timeout: 0.25
velocity_rolling_window_size: 2
# Base frame_id
base_frame_id: base_footprint
# Odometry fused with IMU is published by robot_localization, so
# no need to publish a TF based on encoders alone.
enable_odom_tf: true
# Husky hardware provides wheel velocities
estimate_velocity_from_position: false
# Wheel separation and radius multipliers
wheel_separation_multiplier: 1.0 # default: 1.0
wheel_radius_multiplier : 1.0 # default: 1.0
wheel_separation : 0.434
wheel_radius : 0.100
# Velocity and acceleration limits
# Whenever a min_* is unspecified, default to -max_*
linear:
x:
has_velocity_limits : false
max_velocity : 1.0 # m/s
min_velocity : -0.5 # m/s
has_acceleration_limits: false
max_acceleration : 0.8 # m/s^2
min_acceleration : -0.4 # m/s^2
has_jerk_limits : false
max_jerk : 5.0 # m/s^3
angular:
z:
has_velocity_limits : false
max_velocity : 1.7 # rad/s
has_acceleration_limits: false
max_acceleration : 1.5 # rad/s^2
has_jerk_limits : false
max_jerk : 2.5 # rad/s^3
the problem seems to be that the wheels don't stay straight (rotate on X ? ) and switch their contact, I don't know what cause it to occurs, or how to fix it. I tried a lot of things and can't figure out why this won't work. (I had made a robot with a different appearance, and it didn't have this type of behavior).
As anyone encounters that type of problems or know what can be the cause?
Thanks,
Jérémy
edit: the comment from kumpakri saying to remove the fdir seems to have made the robot work. I updated the codes in the question, I will verify if all work normally Monday but it looks like it was the source of the problem.
what if you set the mu2 to 1.0 as well?
I tried to tweak the mus values without result, but I think I found the porblem : The wheels inertia is way lower than the inertia of anythings else, and when i increase it, the robot seems to act normaly. I will make inertia calculs to put more precise values and see if that fixe it :)
Well, I tried puting real value of inertia, and I came back to almost the same things, the robot shaking and can't turn :(
try to delete the fdir tag. gazebo (or ODE) computes that correctly during the simulation. If you put your value, you are overwriting the correct vector.
upper and lower limit for continuous joint does not apply. You can delete that. Not that it would do anything. It just doesn't make sense to keep it in code.
From my calculation accordint to wiki the ixx = 0,00780225, iyy=0,00780225 and izz=0,02525. How did you get to yours inertia matrix?
you can try to increase the limit for the effort in the wheel joint.
I think you found it ! I delete the fdir and it seems to work correctly ( didn't saw your others comments before, the inertia in the current question are wrong din't update yesterday when I changed it (it is the same as what you sayed. ) When I was trying random things I increase the effort, but the problem stay (Well, with the change of inertia, I had more of a "wheel go in and out of the ground" problem than they yawl but still ). I will run more complete test monday to be certain.
If that work correctly I will close the post at that time :) Thanks a lot :D