Spawning Erratic robot in Gazebo 1.9 with ROS groovy
Hi, I am trying to spawn erratic robot in Gazebo 1.9 using following launch file.
<launch>
<!-- Convert an xacro and put on parameter server -->
<param name="robot_description" command="$(find xacro)/xacro.py $(find erratic_description)/urdf/erratic.urdf.xacro" />
<!-- Spawn a robot into Gazebo -->
<node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-param robot_description -urdf -model erratic" />
</launch>
It works perfect for PR2 robot but in the case of erratic it does not spawn the robot. Any suggestions? Thanks. Here is the output of the launch file. Running PR2 in same way also generates alot of errors in terminal but manage to spawn it.In this tutorial they explicitly says that
Note: at this writing there are still a lot of errors and warnings from the console output that need to be fixed from the PR2's URDF due to Gazebo API changes.
Warning [parser.cc:353] No <sdf> element in file[data-string]
Error [parser.cc:694] XML Element[controller:diffdrive_plugin], child of element[model] not defined in SDF. Ignoring.[model]
Error [parser.cc:685] Error reading element <model>
Error [parser.cc:345] Unable to read element <sdf>
Error [parser.cc:296] parse as old deprecated model file failed.
Error [World.cc:1469] Unable to read sdf string
<!--This document was autogenerated by xacro from /opt/ros/groovy/stacks/erratic_robot/erratic_description/urdf/erratic.urdf.xacro | -->
<!--EDITING THIS FILE BY HAND IS NOT RECOMMENDED========== -->
<robot xmlns:controller="http://playerstage.sourceforge.net/gazebo/xmlschema/#controller"
xmlns:interface="http://playerstage.sourceforge.net/gazebo/xmlschema/#interface"
xmlns:sensor="http://playerstage.sourceforge.net/gazebo/xmlschema/#sensor" name="erratic">
<!-- Included URDF Files -->
<material name="Black"><color rgba="0.0 0.0 0.0 1.0" /></material>
<material name="Blue"><color rgba="0.0 0.0 0.8 1.0" /></material>
<material name="Green"><color rgba="0.0 0.8 0.0 1.0" /></material>
<material name="Grey"><color rgba="0.7 0.7 0.7 1.0" /></material>
<material name="Grey2"><color rgba="0.9 0.9 0.9 1.0" /></material>
<material name="Red"><color rgba="0.8 0.0 0.0 1.0" /></material>
<material name="White"><color rgba="1.0 1.0 1.0 1.0" /></material>
<link name="base_footprint">
<inertial><mass value="0.0001" /><origin xyz="0 0 0" />
<inertia ixx="0.0001" ixy="0.0" ixz="0.0" iyy="0.0001" iyz="0.0" izz="0.0001" /></inertial>
<visual><origin rpy="0 0 0" xyz="0 0 0" /><geometry><box size="0.001 0.001 0.001" /></geometry>
<material name="Green" /></visual><collision><origin rpy="0 0 0" xyz="0 0 0.128" /><geometry>
<box size="0.001 0.001 0.001" /></geometry></collision></link>
<joint name="base_footprint_joint" type="fixed"><origin rpy="0 0 0" xyz="0.063 0 0.128" />
<parent link="base_footprint" /><child link="base_link" /></joint>
<link name="base_link"><inertial><mass value="20" /><origin xyz="0 0 0" />
<inertia ixx="1.0" ixy="0.0" ixz="0.0" iyy="1.0" iyz="0.0" izz="1.0" /></inertial>
<visual><origin rpy="0 0 0" xyz="0 0 0" /><geometry><mesh filename="/opt/ros/groovy/stacks/erratic_robot/erratic_description/meshes/collada/erratic_base_link.dae" /></geometry>
<material name="Blue" /></visual>
<collision><origin rpy="0 0 0" xyz="0 0 0" /><geometry>
<mesh filename="/opt/ros/groovy/stacks/erratic_robot/erratic_description/meshes/collada/erratic_base_link.dae" /></geometry></collision></link>
<joint name="base_caster_support_joint" type="continuous">
<origin rpy="0 0 0" xyz="-0.188 0 -0.043" /><parent link="base_link" />
<child link="base_caster_support_link" /><axis xyz="0 0 1" /><anchor xyz="0.01 0 0" /><limit effort="100" k_velocity="0" velocity="100" />
<joint_properties damping="0.0" friction="0.0" /></joint>
<transmission name="base_caster_support_trans" type="pr2_mechanism_model/SimpleTransmission">
<actuator name="base_caster_support_motor" /><joint name="base_caster_support_joint" /><mechanicalReduction>1.0</mechanicalReduction></transmission>
<link name="base_caster_support_link"><inertial><mass value="0.1" />
<origin xyz="0 0 0" /><inertia ixx="0.01" ixy="0.0" ixz="0.0" iyy="0.01" iyz="0.0" izz="0.01" /></inertial>
<visual><origin rpy="0 0 0" xyz="0 0 0" /><geometry>
<mesh filename="/opt/ros/groovy/stacks/erratic_robot/erratic_description/meshes/collada/erratic_caster_support_link.dae" />
</geometry></visual><collision><origin rpy="0 0 0" xyz="0 0 0" /><geometry>
<mesh filename="/opt/ros/groovy/stacks/erratic_robot/erratic_description/meshes/collada/erratic_caster_support_link.dae" /></geometry></collision></link>
<joint name="caster_wheel_joint" type="continuous">
<origin rpy="0 0 0" xyz="-0.025 0 -0.0469" /><parent link="base_caster_support_link" /><child link="caster_wheel_link" />
<axis xyz="0 1 0" /><anchor xyz="0 0 0" /><limit effort="100" k_velocity="0" velocity="100" />
<joint_properties damping="0.0" friction="0.0" /></joint><transmission name="caster_wheel_trans" type="pr2_mechanism_model/SimpleTransmission">
<actuator name="caster_wheel_motor" /><joint name="caster_wheel_joint" /><mechanicalReduction>1.0</mechanicalReduction></transmission><link name="caster_wheel_link"><inertial>
<mass value="0.1" /><origin rpy="0 0 0" xyz="0 0 0" /><inertia ixx="0.012411765597" ixy="-0.000711733678" ixz="0.00050272983" iyy="0.015218160428" iyz="-0.000004273467" izz="0.011763977943" /></inertial>
<visual><origin rpy="0 0 0" xyz="0 0 0" /><geometry>
<mesh filename="/opt/ros/groovy/stacks/erratic_robot/erratic_description/meshes/collada/erratic_caster_wheel_link.dae" /></geometry>
<material name="Black" /></visual><collision><origin rpy="0 0 0" xyz="0 0 0" /><geometry>
<mesh filename="/opt/ros/groovy/stacks/erratic_robot/erratic_description/meshes/collada/erratic_caster_wheel_link.dae" /></geometry></collision></link>
<gazebo reference="caster_wheel_link"><mu1 value="100.0" /><mu2 value="100.0" /><kp value="1000000.0" /><kd value="1.0" /></gazebo>
<joint name="computer_mount_joint" type="fixed"><origin rpy="0 0 0" xyz="-0.0925 0 0.0795" />
<parent link="base_link" /><child link="computer_link" /></joint><link name="computer_link">
<inertial><mass value="2" /><origin rpy="0 0 0" xyz="0 0 0.028" /><inertia ixx="0.1" ixy="0" ixz="0" iyy="0.1" iyz="0" izz="0.1" /></inertial>
<visual><origin rpy="0 0 0" xyz="0 0 0.028" /><geometry><box size="0.17 0.175 0.056" /></geometry></visual>
<collision><origin rpy="0 0 0" xyz="0 0 0.028" /><geometry><box size="0.17 0.175 0.056" /></geometry></collision></link>
<gazebo reference="computer_link"><material>Erratic/BlueBrushedAluminum</material></gazebo><joint name="base_link_left_wheel_joint" type="continuous">
<origin rpy="0 0 0" xyz="0.075 0.16525 -0.053" /><axis xyz="0 1 0" />
<anchor xyz="0 0 0" /><limit effort="100" velocity="100" /><joint_properties damping="0.0" friction="0.0" />
<parent link="base_link" /><child link="base_link_left_wheel_link" /></joint><link name="base_link_left_wheel_link"><inertial>
<mass value="0.1" /><origin xyz=" 0 0 0 " /><inertia ixx="0.012411765597" ixy="0.0" ixz="0.0" iyy="0.015218160428" iyz="0.0" izz="0.011763977943" />
</inertial><visual><origin rpy="0 0 0" xyz="0 0 0" /><geometry>
<mesh filename="/opt/ros/groovy/stacks/erratic_robot/erratic_description/meshes/collada/erratic_front_wheel_link.dae" />
</geometry><material name="Black" /></visual><collision><origin rpy="0 0 0" xyz="0 0 0" /><geometry>
<mesh filename="/opt/ros/groovy/stacks/erratic_robot/erratic_description/meshes/collada/erratic_front_wheel_link.dae" /></geometry></collision></link>
<gazebo reference="base_link_left_wheel_link"><mu1 value="100.0" /><mu2 value="100.0" /><kp value="1000000.0" /><kd value="1.0" />
<material>Erratic/Grey</material></gazebo><gazebo reference="base_link_left_motor_link"><material>Erratic/White</material></gazebo>
<transmission name="base_link_left_wheel_trans" type="pr2_mechanism_model/SimpleTransmission"><actuator name="base_link_left_wheel_motor" />
<joint name="base_link_left_wheel_joint" /><mechanicalReduction>1.0</mechanicalReduction></transmission>
<joint name="base_link_right_wheel_joint" type="continuous"><origin rpy="0 0 0" xyz="0.075 -0.16525 -0.053" />
<axis xyz="0 1 0" /><anchor xyz="0 0 0" /><limit effort="100" velocity="100" /><joint_properties damping="0.0" friction="0.0" />
<parent link="base_link" /><child link="base_link_right_wheel_link" /></joint>
<link name="base_link_right_wheel_link"><inertial>
<mass value="0.1" /><origin xyz=" 0 0 0 " />
<inertia ixx="0.012411765597" ixy="0.0" ixz="0.0" iyy="0.015218160428" iyz="0.0" izz="0.011763977943" /></inertial><visual>
<origin rpy="0 0 0" xyz="0 0 0" /><geometry><mesh filename="/opt/ros/groovy/stacks/erratic_robot/erratic_description/meshes/collada/erratic_front_wheel_link.dae" />
</geometry><material name="Black" /></visual><collision><origin rpy="0 0 0" xyz="0 0 0" /><geometry>
<mesh filename="/opt/ros/groovy/stacks/erratic_robot/erratic_description/meshes/collada/erratic_front_wheel_link.dae" />
</geometry></collision></link><gazebo reference="base_link_right_wheel_link"><mu1 value="100.0" /><mu2 value="100.0" />
<kp value="1000000.0" /><kd value="1.0" /><material>Erratic/Grey</material></gazebo><gazebo reference="base_link_right_motor_link">
<material>Erratic/White</material></gazebo><transmission name="base_link_right_wheel_trans" type="pr2_mechanism_model/SimpleTransmission">
<actuator name="base_link_right_wheel_motor" /><joint name="base_link_right_wheel_joint" /><mechanicalReduction>1.0</mechanicalReduction></transmission><gazebo><controller:diffdrive_plugin name="differential_drive_controller" plugin="libdiffdrive_plugin.so">
<alwaysOn>true</alwaysOn><update>100</update><updateRate>100.0</updateRate><leftJoint>base_link_right_wheel_joint</leftJoint>
<rightJoint>base_link_left_wheel_joint</rightJoint><wheelSeparation>0.3305</wheelSeparation><wheelDiameter>0.15</wheelDiameter><torque>5</torque>
<interface:position name="position_iface_0" /><topicName>cmd_vel</topicName></controller:diffdrive_plugin>
<controller:gazebo_ros_p3d name="p3d_base_controller" plugin="libgazebo_ros_p3d.so"><alwaysOn>true</alwaysOn><updateRate>100.0</updateRate>
<bodyName>base_link</bodyName><topicName>base_pose_ground_truth</topicName><gaussianNoise>0.01</gaussianNoise>
<frameName>map</frameName><xyzOffsets>0 0 0</xyzOffsets><rpyOffsets>0 0 0</rpyOffsets><interface:position name="p3d_base_position" />
</controller:gazebo_ros_p3d><canonicalBody>base_footprint</canonicalBody><!-- this publishes empty joint_states due to no transmission, but
triggering robot_state_publisher to publish tf between fixed joints in erratic,
(e.g. base_laser_link for the base_scan frame) -->
<controller:gazebo_ros_controller_manager name="gazebo_ros_controller_manager" plugin="libgazebo_ros_controller_manager.so">
<alwaysOn>true</alwaysOn><updateRate>100.0</updateRate><interface:audio name="gazebo_ros_controller_manager_dummy_iface" />
</controller:gazebo_ros_controller_manager></gazebo><gazebo reference="base_link">
<material>Erratic/Grey2</material></gazebo><gazebo reference="base_top_link"><material>Erratic/Grey2</material>
</gazebo><gazebo reference="caster_wheel_link"><material>Erratic/Black</material></gazebo>
<gazebo reference="base_caster_box_link"><material>Erratic/Black</material></gazebo>
<gazebo reference="base_caster_support_link"><material>Erratic/White</material>
</gazebo><origin xyz="0 0 0" rpy="0 -0 0" /></robot>]
Asked by ZeeQ on 2013-07-30 13:23:05 UTC
Answers
These are errors that must be resolved:
Error [parser.cc:694] XML Element[controller:diffdrive_plugin], child of element[model] not defined in SDF. Ignoring.[model]
Error [parser.cc:685] Error reading element <model>
Error [parser.cc:345] Unable to read element <sdf>
Error [parser.cc:296] parse as old deprecated model file failed.
Error [World.cc:1469] Unable to read sdf string
You are using a deprecated and unsupported XML format for your model. You'll have to change your model to SDF:
Asked by nkoenig on 2013-07-31 18:34:39 UTC
Comments
I had the same issue, and that comes from an outdated version of the robot description. I'm currently adapting the old files to the new conventions.
First of all, you have to review the format :
<controller:gazebo_ros_controller_manager name="gazebo_ros_controller_manager" plugin="libgazebo_ros_controller_manager.so">
should be adapated to:
<plugin name="ros_control" filename="libgazebo_ros_control.so">
Then, you need to check the plugins, as some may be no longer supported (the one from above is OK).
Asked by Arn-O on 2013-08-01 02:23:25 UTC
Comments
Are you able to spawn the robot after these changes? If yes can you share the converted files?
Asked by ZeeQ on 2013-08-06 09:26:04 UTC
I am. My converted files are on GitHub: https://github.com/Arn-O/youbot\_ros\_tools
Asked by Arn-O on 2013-08-07 01:19:29 UTC
@ArnO Thanks. After spawning the robot how am i suppose to teleoperate it?
Asked by ZeeQ on 2013-08-15 11:16:54 UTC
rosrun erratic_teleop erratic_keyboard_teleop
Asked by EFernandes on 2014-01-20 10:47:39 UTC
For my repo, you should run rosrun youbot_teleop youbot_teleop.py
Asked by Arn-O on 2014-01-20 15:09:40 UTC
Comments
Can you update your post with the terminal output from running that launch file?
Asked by nkoenig on 2013-07-30 18:54:47 UTC