How to make ROS differential drive robot move forward with teleop?
Hi. I'm new to ROS and Gazebo simulation. I tried to create a differential drive robot for various experiments such sa SLAM etc.
I have set my joint to rotate on the y-axis as setting them on x or z makes them move weird. But when I try to make my robot move forward using teleop, the wheels move vertically instead of horizontally.
Tried on Ubuntu 18.04 LTS, ROS Melodic, Gazebo 9 and 20.04 LTS, ROS Noetic, Gazebo 11
EDIT: Added yaml code
EDIT2: Added launch code
Here is the relevant part of my urdf:
<link name="base_link">
</link>
<joint name="base_joint" type="fixed">
<parent link="base_link"/>
<child link="chassis"/>
</joint>
<link name="chassis">
<inertial>
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
<mass value="25"/>
<inertia ixx="3.002" ixy="0.0" ixz="0.0" iyy="4.011" iyz="0.0" izz="2.8465"/>
</inertial>
<visual name="chassis_visual">
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
<geometry>
<box size="0.962 0.664 1" />
</geometry>
</visual>
<collision name="chassis_collision">
<origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
<geometry>
<box size="0.962 0.664 1" />
</geometry>
</collision>
</link>
<link name="front_left_wheel">
<inertial>
<origin xyz="0.3 0.232 -0.525" rpy="1.5707 0.0 0.0"/>
<mass value="5"/>
<inertia ixx="0.02" ixy="0.0" ixz="0.0" iyy="0.02" iyz="0.0" izz="0.02"/>
</inertial>
<visual name="front_left_wheel_visual">
<origin xyz="0.3 0.232 -0.525" rpy="1.5707 0.0 0.0"/>
<geometry>
<cylinder radius="0.1" length="0.1"/>
</geometry>
</visual>
<collision name="front_left_wheel_collision">
<origin xyz="0.3 0.232 -0.525" rpy="1.5707 0.0 0.0"/>
<geometry>
<cylinder radius="0.1" length="0.1"/>
</geometry>
</collision>
</link>
<link name="front_right_wheel">
<inertial>
<origin xyz="0.3 -0.232 -0.525" rpy="1.5707 0.0 0.0"/>
<mass value="5"/>
<inertia ixx="0.02" ixy="0.0" ixz="0.0" iyy="0.02" iyz="0.0" izz="0.02"/>
</inertial>
<visual name="front_right_wheel_visual">
<origin xyz="0.3 -0.232 -0.525" rpy="1.5707 0.0 0.0"/>
<geometry>
<cylinder radius="0.1" length="0.1"/>
</geometry>
</visual>
<collision name="front_right_wheel_collision">
<origin xyz="0.3 -0.232 -0.525" rpy="1.5707 0.0 0.0"/>
<geometry>
<cylinder radius="0.1" length="0.1"/>
</geometry>
</collision>
</link>
<link name="rear_left_wheel">
<inertial>
<origin xyz="-0.3 0.232 -0.525" rpy="1.5707 0.0 0.0"/>
<mass value="5"/>
<inertia ixx="0.02" ixy="0.0" ixz="0.0 ...
is this a duplicate of your other question #q367681? If yes, please close this one and add additional information to the other question by editing it. Thank you.
Can you post your publisher code? Are you using twist messages or Float64? In other words, are you using the ros_control plugin or the differential plugin?
Hi. I used this for teleop: http://wiki.ros.org/teleop_twist_keyb... I tried both ros_control and differential drive gazebo plugin When I set the joint axis to y, the wheels move upward instead of forward. When set to x, the wheels revolve around the robot vertically. When set to y, the wheels then move like a propeller.
The joint axis of the wheels should be set to y. I see in your urdf file, you have the rear wheels as
fixed
joints. Have you checked if converting them tocontinuous
will change the results? Also remove the parts regarding ros_control and try it step-by-step; firstly make the front differential to work.Hi. Thank you for your comments, really appreciate it. I tried changing the joints of the rear wheels to continuous and it didn't change the results. Also, I get warnings if I remove the ros control plugin so I just leave it in.
What warning do you get? If you just want to use the differential plugin, ros_control could be removed.
I get this warning: I just edited the post, added my launch file just in case it may help.