Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?xml version="1.0"?>
- <robot name="truck" xmlns:xacro="http://ros.org/wiki/xacro">
- <!-- Define truck constants -->
- <xacro:property name="chassis_length" value="8.2"/>
- <xacro:property name="chassis_width" value="2.505"/>
- <xacro:property name="chassis_height" value="0.2"/>
- <xacro:property name="wheel_radius" value="0.45"/>
- <xacro:property name="wheel_width" value="0.3"/>
- <xacro:property name="wheel_zoff" value="0.05"/>
- <xacro:property name="front_shaft_distance" value="2.0"/>
- <xacro:property name="rear_shaft_distance" value="1.45"/>
- <xacro:property name="wheelbase" value="2.5"/>
- <!-- Define cabin and bucket properties -->
- <xacro:property name="cabin_length" value="2.0"/>
- <xacro:property name="cabin_width" value="2.505"/>
- <xacro:property name="cabin_height" value="2.0"/>
- <xacro:property name="cabin_x_offset" value="-3.15"/>
- <xacro:property name="bucket_length" value="5.5"/>
- <xacro:property name="bucket_width" value="2.505"/>
- <xacro:property name="bucket_height" value="1.0"/>
- <xacro:property name="bucket_x_offset" value="1.25"/>
- <!-- Define axles properties for the frontal wheels-->
- <xacro:property name="axle_length" value="0.4"/>
- <xacro:property name="axle_radius" value="0.1"/>
- <!-- Define the frontal shaft bar size-->
- <xacro:property name="steering_bar_radius" value="0.1"/>
- <xacro:property name="steering_bar_length" value="2.0"/>
- <!-- Define inertial property macros -->
- <xacro:macro name="box_inertia" params="m w h d">
- <inertial>
- <origin xyz="0 0 0" rpy="${pi/2} 0 ${pi/2}"/>
- <mass value="${m}"/>
- <inertia ixx="${(m/12) * (h*h + d*d)}" ixy="0.0" ixz="0.0" iyy="${(m/12) * (w*w + d*d)}" iyz="0.0" izz="${(m/12) * (w*w + h*h)}"/>
- </inertial>
- </xacro:macro>
- <xacro:macro name="cylinder_inertia" params="m r h">
- <inertial>
- <origin xyz="0 0 0" rpy="0 0 0"/>
- <mass value="${m}"/>
- <inertia ixx="${(m/12) * (3*r*r + h*h)}" ixy="0.0" ixz="0.0" iyy="${(m/12) * (3*r*r + h*h)}" iyz="0.0" izz="${(m/2) * r*r}"/>
- </inertial>
- </xacro:macro>
- <!-- Bar Definition -->
- <xacro:macro name="horizontal_shaft" params="xpos ypos">
- <link name="horizontal_shaft_link">
- <visual>
- <geometry>
- <cylinder radius="${steering_bar_radius}" length="${steering_bar_length}"/>
- </geometry>
- <material name="Black">
- <color rgba="0 0 0 1.0"/>
- </material>
- <origin xyz="0 0 0" rpy="0 ${pi/2} 0"/>
- </visual>
- <collision>
- <geometry>
- <cylinder radius="${steering_bar_radius}" length="${steering_bar_length}"/>
- </geometry>
- <origin xyz="0 0 0" rpy="0 ${pi/2} 0"/>
- </collision>
- <xacro:cylinder_inertia m="1" r="${steering_bar_radius}" h="${steering_bar_length}"/>
- </link>
- </xacro:macro>
- <!-- Horizontal shaft instance -->
- <xacro:horizontal_shaft xpos="${-wheelbase / 2 - front_shaft_distance}" ypos="0"/>
- <!-- Horizontal shaft to base link connection -->
- <joint name="horizontal_shaft_to_base" type="revolute">
- <parent link="base_link"/>
- <child link="horizontal_shaft_link"/>
- <origin xyz="${-wheelbase / 2 - front_shaft_distance} 0 0" rpy="0 0 ${pi/2}"/>
- <axis xyz="0 0 1"/>
- <limit lower="-0.131" upper="0.131" effort="10000000" velocity="1000000"/>
- </joint>
- <!-- Define axles property macros -->
- <xacro:macro name="axle" params="prefix xpos ypos">
- <link name="${prefix}_axle_link">
- <visual>
- <geometry>
- <cylinder radius="${axle_radius}" length="${axle_length}"/>
- </geometry>
- <material name="Black">
- <color rgba="0 0 0 1.0"/>
- </material>
- </visual>
- <collision>
- <geometry>
- <cylinder radius="${axle_radius}" length="${axle_length}"/>
- </geometry>
- </collision>
- <xacro:cylinder_inertia m="1" r="${axle_radius}" h="${axle_length}"/>
- </link>
- </xacro:macro>
- <!-- Define Steer Joint Macros-->
- <xacro:macro name="steer_joint" params="prefix xpos ypos">
- <joint name="${prefix}_steer_joint" type="revolute">
- <parent link="horizontal_shaft_link" />
- <child link="${prefix}_axle_link" />
- <origin xyz="${xpos} ${ypos} ${-0.0001}" rpy="0 0 0" />
- <axis xyz="0 0 1" />
- <limit lower="-0.524" upper="0.524" effort="10000000" velocity="1000000" />
- </joint>
- </xacro:macro>
- <!-- Chassis -->
- <link name="base_link">
- <visual>
- <geometry>
- <box size="${chassis_length} ${chassis_width} ${chassis_height}"/>
- </geometry>
- <material name="Blue">
- <color rgba="0 0 1.0 1.0"/>
- </material>
- </visual>
- <collision>
- <geometry>
- <box size="${chassis_length} ${chassis_width} ${chassis_height}"/>
- </geometry>
- </collision>
- <xacro:box_inertia m="500" w="${chassis_width}" d="${chassis_length}" h="${chassis_height}"/>
- </link>
- <!-- Robot Footprint -->
- <link name="base_footprint"/>
- <joint name="base_joint" type="fixed">
- <parent link="base_link"/>
- <child link="base_footprint"/>
- <origin xyz="0.0 0.0 ${-(wheel_radius+wheel_zoff)}" rpy="0 0 0"/>
- </joint>
- <!-- Cabin -->
- <link name="cabin_link">
- <visual>
- <geometry>
- <box size="${cabin_length} ${cabin_width} ${cabin_height}"/>
- </geometry>
- <material name="Green">
- <color rgba="0 1.0 0 1.0"/>
- </material>
- </visual>
- <collision>
- <geometry>
- <box size="${cabin_length} ${cabin_width} ${cabin_height}"/>
- </geometry>
- </collision>
- <xacro:box_inertia m="300" w="${cabin_width}" d="${cabin_length}" h="${cabin_height}"/>
- </link>
- <joint name="cabin_joint" type="fixed">
- <parent link="base_link"/>
- <child link="cabin_link"/>
- <origin xyz="${cabin_x_offset} 0 ${chassis_height / 2 + cabin_height / 2}" rpy="0 0 0"/>
- </joint>
- <!-- Bucket -->
- <link name="bucket_link">
- <visual>
- <geometry>
- <!-- <mesh filename="package://your_package_name/meshes/bucket.stl"/> -->
- <box size="${bucket_length} ${bucket_width} ${bucket_height}"/>
- </geometry>
- <material name="Orange">
- <color rgba="1.0 0.5 0 1.0"/>
- </material>
- </visual>
- <collision>
- <geometry>
- <!-- <mesh filename="package://your_package_name/meshes/bucket_collision.stl"/> -->
- <box size="${bucket_length} ${bucket_width} ${bucket_height}"/>
- </geometry>
- </collision>
- <xacro:box_inertia m="400" w="${bucket_width}" d="${bucket_length}" h="${bucket_height}"/>
- </link>
- <joint name="bucket_joint" type="fixed">
- <parent link="base_link"/>
- <child link="bucket_link"/>
- <origin xyz="${bucket_x_offset} 0 ${chassis_height / 2 + bucket_height / 2}" rpy="0 0 0"/>
- </joint>
- <!-- Wheels -->
- <xacro:macro name="wheel" params="prefix xpos ypos axle_joint:='base_link' yaw:=0">
- <link name="${prefix}_wheel_link">
- <visual>
- <origin xyz="0 0 0" rpy="${pi/2} 0 ${yaw}"/>
- <geometry>
- <cylinder radius="${wheel_radius}" length="${wheel_width}"/>
- </geometry>
- <material name="Black">
- <color rgba="0 0 0 1.0"/>
- </material>
- </visual>
- <collision>
- <origin xyz="0 0 0" rpy="${pi/2} 0 ${yaw}"/>
- <geometry>
- <cylinder radius="${wheel_radius}" length="${wheel_width}"/>
- </geometry>
- </collision>
- <xacro:cylinder_inertia m="50" r="${wheel_radius}" h="${wheel_width}"/>
- </link>
- <joint name="${prefix}_wheel_joint" type="continuous">
- <parent link="${axle_joint if axle_joint is not None else 'base_link'}"/>
- <child link="${prefix}_wheel_link"/>
- <origin xyz="${xpos} ${ypos} ${-wheel_radius}" rpy="0 0 0"/>
- <axis xyz="1 0 0"/>
- </joint>
- </xacro:macro>
- <xacro:steer_joint prefix="front_right" xpos="${-chassis_width /2}" ypos="${0.0001}" />
- <xacro:steer_joint prefix="front_left" xpos="${chassis_width /2}" ypos="${-0.0001}" />
- <xacro:axle prefix="front_right" xpos="${-0.0001}" ypos="${0.0001}" />
- <xacro:axle prefix="front_left" xpos="${-0.0001}" ypos="${-0.0001}" />
- <xacro:wheel prefix="front_right" xpos="${-0.0001}" ypos="${0.0001}" axle_joint="front_left_axle_link" yaw="${pi/2}" />
- <xacro:wheel prefix="front_left" xpos="${-0.0001}" ypos="${0.0001}" axle_joint="front_right_axle_link" yaw="${pi/2}" />
- <xacro:wheel prefix="middle_right" xpos="${-wheelbase / 2}" ypos="${chassis_width / 2}"/>
- <xacro:wheel prefix="middle_left" xpos="${-wheelbase / 2}" ypos="${-chassis_width / 2}"/>
- <xacro:wheel prefix="rear_right" xpos="${wheelbase / 2}" ypos="${chassis_width / 2}"/>
- <xacro:wheel prefix="rear_left" xpos="${wheelbase / 2}" ypos="${-chassis_width / 2}"/>
- <xacro:wheel prefix="rear_second_right" xpos="${wheelbase / 2 + rear_shaft_distance}" ypos="${chassis_width / 2}"/>
- <xacro:wheel prefix="rear_second_left" xpos="${wheelbase / 2 + rear_shaft_distance}" ypos="${-chassis_width / 2}"/>
- <link name="imu_link">
- <visual>
- <geometry>
- <box size="0.1 0.1 0.1"/>
- </geometry>
- </visual>
- <collision>
- <geometry>
- <box size="0.1 0.1 0.1"/>
- </geometry>
- </collision>
- <xacro:box_inertia m="0.1" w="0.1" d="0.1" h="0.1"/>
- </link>
- <joint name="imu_joint" type="fixed">
- <parent link="base_link"/>
- <child link="imu_link"/>
- <origin xyz="0 0 0.01"/>
- </joint>
- <gazebo reference="imu_link">
- <sensor name="imu_sensor" type="imu">
- <plugin filename="libgazebo_ros_imu_sensor.so" name="imu_plugin">
- <ros>
- <namespace>/demo</namespace>
- <remapping>~/out:=imu</remapping>
- </ros>
- <initial_orientation_as_reference>false</initial_orientation_as_reference>
- </plugin>
- <always_on>true</always_on>
- <update_rate>100</update_rate>
- <visualize>true</visualize>
- <imu>
- <angular_velocity>
- <x>
- <noise type="gaussian">
- <mean>0.0</mean>
- <stddev>2e-4</stddev>
- <bias_mean>0.0000075</bias_mean>
- <bias_stddev>0.0000008</bias_stddev>
- </noise>
- </x>
- <y>
- <noise type="gaussian">
- <mean>0.0</mean>
- <stddev>2e-4</stddev>
- <bias_mean>0.0000075</bias_mean>
- <bias_stddev>0.0000008</bias_stddev>
- </noise>
- </y>
- <z>
- <noise type="gaussian">
- <mean>0.0</mean>
- <stddev>2e-4</stddev>
- <bias_mean>0.0000075</bias_mean>
- <bias_stddev>0.0000008</bias_stddev>
- </noise>
- </z>
- </angular_velocity>
- <linear_acceleration>
- <x>
- <noise type="gaussian">
- <mean>0.0</mean>
- <stddev>1.7e-2</stddev>
- <bias_mean>0.1</bias_mean>
- <bias_stddev>0.001</bias_stddev>
- </noise>
- </x>
- <y>
- <noise type="gaussian">
- <mean>0.0</mean>
- <stddev>1.7e-2</stddev>
- <bias_mean>0.1</bias_mean>
- <bias_stddev>0.001</bias_stddev>
- </noise>
- </y>
- <z>
- <noise type="gaussian">
- <mean>0.0</mean>
- <stddev>1.7e-2</stddev>
- <bias_mean>0.1</bias_mean>
- <bias_stddev>0.001</bias_stddev>
- </noise>
- </z>
- </linear_acceleration>
- </imu>
- </sensor>
- </gazebo>
- <plugin name="gazebo_ros_ackermann_drive" filename="libgazebo_ros_ackermann_drive.so">
- <ros>
- <namespace>/demo</namespace>
- <parameter name="cmd_vel_topic" value="cmd_demo"/>
- <parameter name="odom_topic" value="odom_demo"/>
- <parameter name="distance_topic" value="distance_demo"/>
- </ros>
- <update_rate>100.0</update_rate>
- <!-- wheels -->
- <front_left_joint>front_left_wheel_joint</front_left_joint>
- <front_right_joint>front_right_wheel_joint</front_right_joint>
- <middle_left_joint>middle_left_wheel_joint</middle_left_joint>
- <middle_right_joint>middle_right_wheel_joint</middle_right_joint>
- <rear_left_joint>rear_left_wheel_joint</rear_left_joint>
- <rear_right_joint>rear_right_wheel_joint</rear_right_joint>
- <rear_second_left_joint>rear_second_left_wheel_joint</rear_second_left_joint>
- <rear_second_right_joint>rear_second_right_wheel_joint</rear_second_right_joint>
- <!-- steering joints -->
- <front_left_steering_joint>front_left_steer_joint</front_left_steering_joint>
- <front_right_steering_joint>front_right_steer_joint</front_right_steering_joint>
- <!-- Other parameters remain the same -->
- <max_steer>0.6458</max_steer>
- <max_steering_angle>7.85</max_steering_angle>
- <max_speed>20</max_speed>
- <!-- PID tuning -->
- <left_steering_pid_gain>1500 0 1</left_steering_pid_gain>
- <left_steering_i_range>0 0</left_steering_i_range>
- <right_steering_pid_gain>1500 0 1</right_steering_pid_gain>
- <right_steering_i_range>0 0</right_steering_i_range>
- <linear_velocity_pid_gain>1000 0 1</linear_velocity_pid_gain>
- <linear_velocity_i_range>0 0</linear_velocity_i_range>
- <!-- output -->
- <publish_odom>true</publish_odom>
- <publish_odom_tf>true</publish_odom_tf>
- <publish_wheel_tf>true</publish_wheel_tf>
- <publish_distance>true</publish_distance>
- <odometry_frame>odom_demo</odometry_frame>
- <robot_base_frame>chassis</robot_base_frame>
- </plugin>
- </robot>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement