You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

497 lines
15 KiB

<?xml version="1.0" ?>
<sdf version="1.6">
<model name='rover_ackermann'>
<!--Links-->
<link name='base_link'>
<pose relative_to='__model__'>0 0 0.1 0 0 0</pose>
<inertial>
<mass>20.0</mass>
<inertia>
<ixx>0.4333</ixx>
<ixy>0.0</ixy>
<ixz>0.0</ixz>
<iyy>1.6833</iyy>
<iyz>0.0</iyz>
<izz>2.0833</izz>
</inertia>
</inertial>
<visual name='visual'>
<pose>0 0 -0.05 0 0 0</pose>
<geometry>
<mesh>
<uri>model://rover_ackermann/meshes/rover_ackermann_base.dae</uri>
</mesh>
</geometry>
</visual>
<collision name='collision'>
<geometry>
<box>
<size>1 0.5 0.1</size>
</box>
</geometry>
</collision>
<!--Sensors-->
<sensor name="air_pressure_sensor" type="air_pressure">
<always_on>1</always_on>
<update_rate>50</update_rate>
<air_pressure>
<!-- Noise modeled after BMP390 -->
<pressure>
<noise type="gaussian">
<mean>0</mean>
<stddev>3</stddev>
</noise>
</pressure>
</air_pressure>
</sensor>
<sensor name="magnetometer_sensor" type="magnetometer">
<always_on>1</always_on>
<update_rate>100</update_rate>
<magnetometer>
<!-- TODO: update to fix units and coordinate system when we move past Harmonic -->
<!-- See https://github.com/gazebosim/gz-sim/pull/2460 -->
<!-- 3mgauss RMS: NOTE: noise is in tesla but sensor reports data in gauss -->
<!-- Noise modeled after IIS2MDC -->
<x>
<noise type="gaussian">
<stddev>0.0001</stddev>
</noise>
</x>
<y>
<noise type="gaussian">
<stddev>0.0001</stddev>
</noise>
</y>
<z>
<noise type="gaussian">
<stddev>0.0001</stddev>
</noise>
</z>
</magnetometer>
</sensor>
<sensor name="imu_sensor" type="imu">
<always_on>1</always_on>
<update_rate>250</update_rate>
<imu>
<angular_velocity>
<!-- Noise modeled after IIM42653 -->
<!-- 0.05 deg/s converted to rad/s -->
<x>
<noise type="gaussian">
<mean>0.0</mean>
<stddev>0.0008726646</stddev>
</noise>
</x>
<y>
<noise type="gaussian">
<mean>0.0</mean>
<stddev>0.0008726646</stddev>
</noise>
</y>
<z>
<noise type="gaussian">
<mean>0.0</mean>
<stddev>0.0008726646</stddev>
</noise>
</z>
</angular_velocity>
<linear_acceleration>
<!-- Noise modeled after IIM42653 -->
<!-- X & Y axis: 0.65 mg-rms converted to m/ss -->
<x>
<noise type="gaussian">
<mean>0.0</mean>
<stddev>0.00637</stddev>
</noise>
</x>
<y>
<noise type="gaussian">
<mean>0.0</mean>
<stddev>0.00637</stddev>
</noise>
</y>
<!-- Z axis: 0.70 mg-rms converted to m/ss-->
<z>
<noise type="gaussian">
<mean>0.0</mean>
<stddev>0.00686</stddev>
</noise>
</z>
</linear_acceleration>
</imu>
</sensor>
<sensor name="navsat_sensor" type="navsat">
<always_on>1</always_on>
<update_rate>30</update_rate>
</sensor>
</link>
<link name='wheel_rear_left_link'>
<pose relative_to="base_link">-0.25 0.3 0 -1.5707 0 0</pose>
<inertial>
<mass>0.5</mass>
<inertia>
<ixx>0.000807292</ixx>
<ixy>0</ixy>
<ixz>0</ixz>
<iyy>0.000807292</iyy>
<iyz>0</iyz>
<izz>0.00140625</izz>
</inertia>
</inertial>
<visual name='visual'>
<pose>0 0 0 0 0 0</pose>
<geometry>
<mesh>
<uri>model://rover_ackermann/meshes/rover_ackermann_wheel.dae</uri>
</mesh>
</geometry>
</visual>
<collision name='collision'>
<geometry>
<cylinder>
<radius>0.1</radius>
<length>0.1</length>
</cylinder>
</geometry>
<surface>
<friction>
<ode>
<mu>2.0</mu>
<mu2>2.0</mu2>
<fdir1>1 0 0</fdir1>
<slip1>0</slip1>
<slip2>0</slip2>
</ode>
</friction>
</surface>
</collision>
</link>
<link name='wheel_rear_right_link'>
<pose relative_to="base_link">-0.25 -0.3 0 -1.5707 0 0</pose>
<inertial>
<mass>0.5</mass>
<inertia>
<ixx>0.000807292</ixx>
<ixy>0</ixy>
<ixz>0</ixz>
<iyy>0.000807292</iyy>
<iyz>0</iyz>
<izz>0.00140625</izz>
</inertia>
</inertial>
<visual name='visual'>
<pose>0 0 0 0 0 0</pose>
<geometry>
<mesh>
<uri>model://rover_ackermann/meshes/rover_ackermann_wheel.dae</uri>
</mesh>
</geometry>
</visual>
<collision name='collision'>
<geometry>
<cylinder>
<radius>0.1</radius>
<length>0.1</length>
</cylinder>
</geometry>
<surface>
<friction>
<ode>
<mu>2.0</mu>
<mu2>2.0</mu2>
<fdir1>1 0 0</fdir1>
<slip1>0</slip1>
<slip2>0</slip2>
</ode>
</friction>
</surface>
</collision>
</link>
<link name='wheel_front_link'>
<pose relative_to="base_link">0.25 0 0 -1.5707 0 0</pose>
<inertial>
<mass>0.5</mass>
<inertia>
<ixx>0.000807292</ixx>
<ixy>0</ixy>
<ixz>0</ixz>
<iyy>0.000807292</iyy>
<iyz>0</iyz>
<izz>0.00140625</izz>
</inertia>
</inertial>
<collision name='collision'>
<geometry>
<cylinder>
<radius>0.1</radius>
<length>0.1</length>
</cylinder>
</geometry>
<surface>
<friction>
<ode>
<mu>2.0</mu>
<mu2>2.0</mu2>
<fdir1>1 0 0</fdir1>
<slip1>0</slip1>
<slip2>0</slip2>
</ode>
</friction>
</surface>
</collision>
<velocity_decay/>
</link>
<link name="wheel_front_steering_link">
<pose relative_to="wheel_front_link">0 0 0 0 0 0</pose>
<inertial>
<mass>0.005</mass>
<inertia>
<ixx>0.0000018</ixx>
<iyy>0.0000018</iyy>
<izz>0.0000018</izz>
</inertia>
</inertial>
</link>
<!-- Joints -->
<joint name='wheel_rear_left_joint' type='revolute'>
<pose relative_to='wheel_rear_left_link'/>
<parent>base_link</parent>
<child>wheel_rear_left_link</child>
<axis>
<xyz expressed_in='__model__'>0 1 0</xyz>
</axis>
</joint>
<joint name='wheel_rear_right_joint' type='revolute'>
<pose relative_to='wheel_rear_right_link'/>
<parent>base_link</parent>
<child>wheel_rear_right_link</child>
<axis>
<xyz expressed_in='__model__'>0 1 0</xyz>
</axis>
</joint>
<joint name="wheel_front_steering_joint" type="revolute">
<parent>base_link</parent>
<child>wheel_front_steering_link</child>
<pose relative_to="wheel_front_steering_link">0 0 0 0 0 0</pose>
<axis>
<xyz>0 0 1</xyz>
<limit>
<lower>-0.5236</lower>
<upper>0.5236</upper>
</limit>
<use_parent_model_frame>1</use_parent_model_frame>
</axis>
</joint>
<joint name='wheel_front_joint' type='revolute'>
<pose relative_to='wheel_front_link'/>
<parent>wheel_front_steering_link</parent>
<child>wheel_front_link</child>
<axis>
<xyz expressed_in='__model__'>0 1 0</xyz>
</axis>
</joint>
<!-- Visual Only -->
<link name='wheel_front_left_link'>
<pose relative_to="base_link">0.25 0.3 0 -1.5707 0 0</pose>
<inertial>
<mass>0.5</mass>
<inertia>
<ixx>0.000807292</ixx>
<ixy>0</ixy>
<ixz>0</ixz>
<iyy>0.000807292</iyy>
<iyz>0</iyz>
<izz>0.00140625</izz>
</inertia>
</inertial>
<visual name='visual'>
<pose>0 0 0 0 0 0</pose>
<geometry>
<mesh>
<uri>model://rover_ackermann/meshes/rover_ackermann_wheel.dae</uri>
</mesh>
</geometry>
</visual>
<velocity_decay/>
<gravity>0</gravity>
</link>
<link name='wheel_front_right_link'>
<pose relative_to="base_link">0.25 -0.3 0 -1.5707 0 0</pose>
<inertial>
<mass>0.5</mass>
<inertia>
<ixx>0.000807292</ixx>
<ixy>0</ixy>
<ixz>0</ixz>
<iyy>0.000807292</iyy>
<iyz>0</iyz>
<izz>0.00140625</izz>
</inertia>
</inertial>
<visual name='visual'>
<pose>0 0 0 0 0 0</pose>
<geometry>
<mesh>
<uri>model://rover_ackermann/meshes/rover_ackermann_wheel.dae</uri>
</mesh>
</geometry>
</visual>
<velocity_decay/>
<gravity>0</gravity>
</link>
<link name="wheel_front_left_steering_link">
<pose relative_to="wheel_front_left_link">0 0 0 0 0 0</pose>
<inertial>
<mass>0.005</mass>
<inertia>
<ixx>0.0000018</ixx>
<iyy>0.0000018</iyy>
<izz>0.0000018</izz>
</inertia>
</inertial>
<velocity_decay/>
<gravity>0</gravity>
</link>
<link name="wheel_front_right_steering_link">
<pose relative_to="wheel_front_right_link">0 0 0 0 0 0</pose>
<inertial>
<mass>0.005</mass>
<inertia>
<ixx>0.0000018</ixx>
<iyy>0.0000018</iyy>
<izz>0.0000018</izz>
</inertia>
</inertial>
<velocity_decay/>
<gravity>0</gravity>
</link>
<joint name="wheel_front_left_steering_joint" type="revolute">
<parent>base_link</parent>
<child>wheel_front_left_steering_link</child>
<pose relative_to="wheel_front_left_steering_link">0 0 0 0 0 0</pose>
<axis>
<xyz>0 0 1</xyz>
<limit>
<lower>-0.5236</lower>
<upper>0.5236</upper>
</limit>
<use_parent_model_frame>1</use_parent_model_frame>
</axis>
</joint>
<joint name="wheel_front_right_steering_joint" type="revolute">
<parent>base_link</parent>
<child>wheel_front_right_steering_link</child>
<pose relative_to="wheel_front_right_steering_link">0 0 0 0 0 0</pose>
<axis>
<xyz>0 0 1</xyz>
<limit>
<lower>-0.5236</lower>
<upper>0.5236</upper>
</limit>
<use_parent_model_frame>1</use_parent_model_frame>
</axis>
</joint>
<joint name='wheel_front_left_joint' type='revolute'>
<pose relative_to='wheel_front_left_link'/>
<parent>wheel_front_left_steering_link</parent>
<child>wheel_front_left_link</child>
<axis>
<xyz expressed_in='__model__'>0 1 0</xyz>
</axis>
</joint>
<joint name='wheel_front_right_joint' type='revolute'>
<pose relative_to='wheel_front_right_link'/>
<parent>wheel_front_right_steering_link</parent>
<child>wheel_front_right_link</child>
<axis>
<xyz expressed_in='__model__'>0 1 0</xyz>
</axis>
</joint>
<!--Plugins-->
<plugin filename="gz-sim-joint-controller-system" name="gz::sim::systems::JointController">
<joint_name>wheel_rear_left_joint</joint_name>
<sub_topic>command/motor_speed</sub_topic>
<control_type>velocity</control_type>
<use_actuator_msg>true</use_actuator_msg>
<actuator_number>0</actuator_number>
</plugin>
<plugin filename="gz-sim-joint-controller-system" name="gz::sim::systems::JointController">
<joint_name>wheel_rear_right_joint</joint_name>
<sub_topic>command/motor_speed</sub_topic>
<control_type>velocity</control_type>
<use_actuator_msg>true</use_actuator_msg>
<actuator_number>0</actuator_number>
</plugin>
<plugin filename="gz-sim-joint-controller-system" name="gz::sim::systems::JointController">
<joint_name>wheel_front_right_joint</joint_name>
<sub_topic>command/motor_speed</sub_topic>
<control_type>velocity</control_type>
<use_actuator_msg>true</use_actuator_msg>
<actuator_number>0</actuator_number>
</plugin>
<plugin filename="gz-sim-joint-controller-system" name="gz::sim::systems::JointController">
<joint_name>wheel_front_left_joint</joint_name>
<sub_topic>command/motor_speed</sub_topic>
<control_type>velocity</control_type>
<use_actuator_msg>true</use_actuator_msg>
<actuator_number>0</actuator_number>
</plugin>
<plugin filename="gz-sim-joint-position-controller-system" name="gz::sim::systems::JointPositionController">
<joint_name>wheel_front_steering_joint</joint_name>
<sub_topic>servo_0</sub_topic>
<p_gain>100</p_gain>
<i_gain>10</i_gain>
<d_gain>0</d_gain>
</plugin>
<plugin filename="gz-sim-joint-position-controller-system" name="gz::sim::systems::JointPositionController">
<joint_name>wheel_front_left_steering_joint</joint_name>
<sub_topic>servo_0</sub_topic>
<p_gain>1</p_gain>
<i_gain>1</i_gain>
<d_gain>0.5</d_gain>
</plugin>
<plugin filename="gz-sim-joint-position-controller-system" name="gz::sim::systems::JointPositionController">
<joint_name>wheel_front_right_steering_joint</joint_name>
<sub_topic>servo_0</sub_topic>
<p_gain>1</p_gain>
<i_gain>1</i_gain>
<d_gain>0.5</d_gain>
</plugin>
<plugin filename="gz-sim-joint-state-publisher-system" name="gz::sim::systems::JointStatePublisher">
<joint_name>wheel_rear_left_joint</joint_name>
<joint_name>wheel_rear_right_joint</joint_name>
<joint_name>wheel_front_joint</joint_name>
<joint_name>wheel_front_steering_joint</joint_name>
<joint_name>wheel_front_left_joint</joint_name>
<joint_name>wheel_front_right_joint</joint_name>
<joint_name>wheel_front_right_steering_joint</joint_name>
<joint_name>wheel_front_left_steering_joint</joint_name>
</plugin>
</model>
</sdf>