This commit is contained in:
2026-02-26 09:48:16 +07:00
parent e8d5980572
commit 148a5e2c60
158 changed files with 9014 additions and 1 deletions

View File

@@ -0,0 +1,133 @@
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Changelog for package cititruck_description
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1.1.7 (2023-01-20)
------------------
* Don't set cmake_policy CMP0048
* Contributors: Martin Günther
1.1.6 (2022-06-02)
------------------
* URDF: Downsize inertia box, move to lower back
* URDF: Pull out inertia properties
* URDF: Update masses according to data sheet
* URDF: Add mir_250
* Add arg mir_type to launch files and urdfs
* Add mir_250 meshes
* URDF: Make wheels black
* Add mir_100_v1.urdf.xacro for backwards compatibility
* Rename mir_100 -> mir
* Refactor URDF to prepare for MiR250 support
* Gazebo: Don't manually specify wheel params for diffdrive controller
* Simplify mir_100 collision mesh further
* Contributors: Martin Günther
1.1.5 (2022-02-11)
------------------
* Remove xacro comment to work around xacro bug
Since xacro 1.14.11, xacro now also evaluates expressions in comments
and throws an error if the substition argument is undefined. In xacro
1.14.12, this error was changed to a warning.
This commit removes that warning.
Workaround for https://github.com/ros/xacro/issues/309 .
* xacro: drop --inorder option
In-order processing became default in ROS Melodic.
* Add gazebo_plugins to dependency list (`#103 <https://github.com/DFKI-NI/mir_robot/issues/103>`_)
This is needed for the ground truth pose via p3d plugin.
* Contributors: Martin Günther, moooeeeep
1.1.4 (2021-12-10)
------------------
* Replace gazebo_plugins IMU with hector_gazebo_plugins
* Use cylinders instead of STLs for wheel collision geometries
Fixes `#99 <https://github.com/DFKI-NI/mir_robot/issues/99>`_.
* mir_debug_urdf.launch: Fix GUI display
* Contributors: Martin Günther
1.1.3 (2021-06-11)
------------------
* Merge branch 'melodic-2.8' into noetic
* Rename tf frame and topic 'odom_comb' -> 'odom'
This is how they are called on the real MiR since MiR software 2.0.
* Contributors: Martin Günther
1.1.2 (2021-05-12)
------------------
* Fix laser scan frame_id with gazebo_plugins 2.9.2
* Contributors: Martin Günther
1.1.1 (2021-02-11)
------------------
* Add prepend_prefix_to_laser_frame to URDF and launch files
Fixes `#65 <https://github.com/DFKI-NI/mir_robot/issues/65>`_.
* Add tf_prefix to URDF and launch files
* Fix typo in robot_namespace
* Add missing 'xacro:' xml namespace prefixes
Macro calls without 'xacro:' prefix are deprecated in Melodic and will
be forbidden in Noetic.
* Contributors: Martin Günther
1.1.0 (2020-06-30)
------------------
* Initial release into noetic
* Contributors: Martin Günther
1.0.6 (2020-06-30)
------------------
* Update to non-deprecated robot_state_publisher node
* Set cmake_policy CMP0048 to fix warning
* Contributors: Martin Günther
1.0.5 (2020-05-01)
------------------
* Switch from Gazebo GPU laser to normal laser plugin
The GPU laser plugin has caused multiple people problems before, because
it is not compatible with all GPUS: `#1 <https://github.com/DFKI-NI/mir_robot/issues/1>`_
`#32 <https://github.com/DFKI-NI/mir_robot/issues/32>`_
`#46 <https://github.com/DFKI-NI/mir_robot/issues/46>`_
`#52 <https://github.com/DFKI-NI/mir_robot/issues/52>`_
The normal laser plugin directly uses the physics engine, so it doesn't
depend on any specific GPU. Also, it doesn't slow down the simulation
noticeably (maybe 1-2%).
* Contributors: Martin Günther
1.0.4 (2019-05-06)
------------------
* Add legacyModeNS param to gazebo_ros_control plugin
This enables the new behavior of the plugin (pid_gains parameter are now
in the proper namespace).
* re-added gazebo friction parameters for the wheels (`#19 <https://github.com/DFKI-NI/mir_robot/issues/19>`_)
* Contributors: Martin Günther, niniemann
1.0.3 (2019-03-04)
------------------
* Merge pull request `#16 <https://github.com/DFKI-NI/mir_robot/issues/16>`_ from niniemann/add-prefix-argument-to-configs
Add prefix argument to configs
* removed prefix from plugin frameName in sick urdf
The gazebo plugins automatically use tf_prefix, even if none is set
(in that case it defaults to the robot namespace). That's why we can
remove the prefix from the plugins configuration, assuming that the
robot namespace will be equal to the prefix.
* adds $(arg prefix) to a lot of configs
This is an important step to be able to re-parameterize move base,
the diffdrive controller, ekf, amcl and the costmaps for adding a
tf prefix to the robots links
* workaround eval in xacro for indigo support
* adds tf_prefix argument to imu.gazebo.urdf.xacro
* Add TFs for ultrasound sensors
* Contributors: Martin Günther, Nils Niemann
1.0.2 (2018-07-30)
------------------
1.0.1 (2018-07-17)
------------------
* gazebo: Remove leading slashes in TF frames
TF2 doesn't like it (e.g., robot_localization).
* Contributors: Martin Günther
1.0.0 (2018-07-12)
------------------
* Initial release
* Contributors: Martin Günther

View File

@@ -0,0 +1,31 @@
cmake_minimum_required(VERSION 3.5.1)
project(cititruck_description)
find_package(catkin REQUIRED COMPONENTS
roslaunch
)
###################################
## catkin specific configuration ##
###################################
catkin_package()
#############
## Install ##
#############
# Mark other files for installation (e.g. launch and bag files, etc.)
install(DIRECTORY
config
launch
meshes
rviz
urdf
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
)
#############
## Testing ##
#############
roslaunch_add_file_check(launch)

View File

@@ -0,0 +1,4 @@
# Publish all joint states -----------------------------------
joint_state_controller:
type: joint_state_controller/JointStateController
publish_rate: 50

View File

@@ -0,0 +1,55 @@
# -----------------------------------
mobile_base_controller:
type : "steer_drive_controller/SteerDriveController"
rear_wheel: '$(arg prefix)steer2sd_wheel_joint'
front_steer: '$(arg prefix)base2steer_joint'
publish_rate: 41.2 # this is what the real MiR platform publishes (default: 50)
# These covariances are exactly what the real MiR platform publishes
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]
enable_odom_tf: false
# Wheel separation and diameter. These are both optional.
# diff_drive_controller will attempt to read either one or both from the
# URDF if not specified as a parameter.
# We don't set the value here because it's different for each MiR type (100, 250, ...), and
# the plugin figures out the correct values.
wheel_separation : 1.3268
wheel_radius : 0.125
# Wheel separation and radius multipliers
wheel_separation_multiplier: 1.0 # default: 1.0
wheel_radius_multiplier : 1.0 # default: 1.0
# Steer position angle multipliers for fine tuning.
steer_pos_multiplier : 1.0
# Velocity commands timeout [s], default 0.5
cmd_vel_timeout: 0.25
# frame_ids (same as real MiR platform)
base_frame_id: $(arg prefix)base_footprint # default: base_link
odom_frame_id: $(arg prefix)odom # default: odom
# Velocity and acceleration limits
# Whenever a min_* is unspecified, default to -max_*
linear:
x:
has_velocity_limits : true
max_velocity : 1.5 # m/s
min_velocity : -1.5 # m/s
has_acceleration_limits: true
max_acceleration : 3.0 # m/s^2
min_acceleration : -3.0 # m/s^2
has_jerk_limits : false
max_jerk : 5.0 # m/s^3
angular:
z:
has_velocity_limits : true
max_velocity : 2.0 # rad/s
min_velocity : -2.0
has_acceleration_limits: true
max_acceleration : 1.5 # rad/s^2
min_acceleration : -1.5
has_jerk_limits : false
max_jerk : 2.5 # rad/s^3

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" ?>
<launch>
<arg name="robot_type" default="demo" doc="" />
<arg name="tf_prefix" default="" doc="tf_prefix to be used by gazebo plugins and in the robot's urdf etc." />
<arg name="gui" default="false" />
<!-- load cititruck URDF -->
<include file="$(find cititruck_description)/launch/upload_cititruck_urdf.launch">
<arg name="tf_prefix" value="$(arg tf_prefix)" />
<arg name="robot_type" value="$(arg robot_type)" />
</include>
<node if="$(arg gui)" name="joint_state_publisher" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" />
<node unless="$(arg gui)" name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find cititruck_description)/rviz/cititruck_description.rviz" required="true" />
</launch>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" ?>
<launch>
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find cititruck_description)/rviz/cititruck_description.rviz" required="true" />
</launch>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" ?>
<launch>
<arg name="robot_type" default="demo" doc="" />
<arg name="tf_prefix" default="" doc="TF prefix to use for all of the cititruck's TF frames"/>
<param name="robot_description" command="$(find xacro)/xacro $(find cititruck_description)/urdf/cititruck.urdf.xacro robot_type:=$(arg robot_type) tf_prefix:=$(arg tf_prefix)" />
</launch>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,136 @@
<?xml version="1.0" encoding="utf-8"?>
<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
<asset>
<contributor>
<author>Stefan Kohlbrecher</author>
<authoring_tool>Blender 2.70.5 commit date:2014-06-04, commit time:10:44, hash:fc1c763</authoring_tool>
</contributor>
<created>2014-06-11T13:30:44</created>
<modified>2014-06-11T13:30:44</modified>
<unit name="meter" meter="1"/>
<up_axis>Z_UP</up_axis>
</asset>
<library_images/>
<library_effects>
<effect id="Material_001-effect">
<profile_COMMON>
<technique sid="common">
<phong>
<emission>
<color sid="emission">0 0 0 1</color>
</emission>
<ambient>
<color sid="ambient">0 0 0 1</color>
</ambient>
<diffuse>
<color sid="diffuse">0.007095437 0.007095437 0.007095437 1</color>
</diffuse>
<specular>
<color sid="specular">0.25 0.25 0.25 1</color>
</specular>
<shininess>
<float sid="shininess">50</float>
</shininess>
<index_of_refraction>
<float sid="index_of_refraction">1</float>
</index_of_refraction>
</phong>
</technique>
</profile_COMMON>
</effect>
<effect id="Material_002-effect">
<profile_COMMON>
<technique sid="common">
<phong>
<emission>
<color sid="emission">0 0 0 1</color>
</emission>
<ambient>
<color sid="ambient">0 0 0 1</color>
</ambient>
<diffuse>
<color sid="diffuse">0.512 0.512 0.512 1</color>
</diffuse>
<specular>
<color sid="specular">0.4195 0.4195 0.4195 1</color>
</specular>
<shininess>
<float sid="shininess">5</float>
</shininess>
<index_of_refraction>
<float sid="index_of_refraction">1</float>
</index_of_refraction>
</phong>
</technique>
</profile_COMMON>
</effect>
</library_effects>
<library_materials>
<material id="Material_001-material" name="Material_001">
<instance_effect url="#Material_001-effect"/>
</material>
<material id="Material_002-material" name="Material_002">
<instance_effect url="#Material_002-effect"/>
</material>
</library_materials>
<library_geometries>
<geometry id="Cube_001-mesh" name="Cube.001">
<mesh>
<source id="Cube_001-mesh-positions">
<float_array id="Cube_001-mesh-positions-array" count="168">-0.9601472 1.38267 0.3078527 -0.9601472 1.38267 -0.3013365 -0.9601472 -3.015511 -0.3013365 -0.9601472 -3.015511 0.3078527 -0.02340704 1.382557 0.3078527 -0.02330875 1.382666 -0.3013365 -0.02331 -3.015507 -0.3013365 -0.02340704 -3.015511 0.3078527 -0.02340704 -1.737524 0 -0.02340704 0.1250084 -0.165674 -0.02340704 0.05638432 0 -0.02340704 -0.09674459 0 -0.02340704 -0.1653691 -0.1656743 -0.02340704 0.1250084 0.1656737 -0.02340704 -0.1653691 0.1656738 -0.02340704 -0.4967176 -0.165674 -0.02340704 -0.5653417 0 -0.02340704 -1.268926 0 -0.02340704 -0.4967176 0.1656737 -0.02340704 -1.337551 -0.1656743 -0.02340704 -1.337551 0.1656738 -0.02340704 -1.668899 0.1656737 -0.02340704 -1.668899 -0.165674 -0.02340704 -1.503225 -0.2342988 -0.02340704 -0.3310434 0.2342985 -0.02340704 -0.3310434 -0.2342988 -0.02340704 -1.503225 0.2342985 -0.02340704 0.2906828 -0.2342988 -0.02340704 0.2906827 0.2342985 -0.02340704 0.456357 0.1656738 -0.02340704 0.5249815 0 -0.02340704 0.456357 -0.1656743 -0.1343017 0.5249815 -1.34731e-7 -0.1343017 0.456357 0.1656738 -0.1343017 0.2906827 0.2342983 -0.1343017 0.456357 -0.1656745 -0.1343011 0.1250084 0.1656737 -0.1343011 0.2906827 -0.234299 -0.1343017 0.05638402 -1.21696e-7 -0.1343011 0.1250084 -0.165674 -0.1343017 -0.09674459 -1.34731e-7 -0.1343017 -0.1653691 0.1656738 -0.1343017 -0.3310434 0.2342983 -0.1343017 -0.1653691 -0.1656745 -0.1343011 -0.4967176 0.1656737 -0.1343011 -0.3310434 -0.234299 -0.1343017 -0.565342 -1.21696e-7 -0.1343011 -0.4967176 -0.165674 -0.1343017 -1.268926 -1.34731e-7 -0.1343017 -1.337551 0.1656738 -0.1343017 -1.503225 0.2342983 -0.1343017 -1.337551 -0.1656745 -0.1343011 -1.668899 0.1656737 -0.1343011 -1.503225 -0.234299 -0.1343017 -1.737524 -1.21696e-7 -0.1343011 -1.668899 -0.165674</float_array>
<technique_common>
<accessor source="#Cube_001-mesh-positions-array" count="56" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Cube_001-mesh-normals">
<float_array id="Cube_001-mesh-normals-array" count="321">-1 0 0 1.21024e-4 1 0 1 -7.84187e-5 1.8932e-4 1 -1.00075e-4 4.14522e-5 1 -1.34163e-4 -5.55722e-5 1 -2.47756e-5 1.61396e-4 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0.9999989 -2.84171e-7 0.001454412 1 5.79847e-5 1.39987e-4 1 3.83854e-5 1.59349e-4 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 -1 -6.26192e-6 0 0 -1 0 0 1 2.48287e-7 -0.9238793 -0.3826841 -4.21495e-7 -0.9238796 0.3826832 -1.63916e-6 -0.3826835 0.9238796 0 0.3826856 0.9238786 -2.76314e-6 0.9238795 0.3826837 -1.90774e-6 0.9238794 -0.3826838 1.61387e-6 -0.3826832 -0.9238796 0 0.3826839 -0.9238793 0 -0.9238793 -0.3826841 -7.02491e-7 -0.9238796 0.3826833 -1.73282e-6 -0.3826835 0.9238796 0 0.3826858 0.9238786 -2.90364e-6 0.9238795 0.3826838 -2.06292e-6 0.9238793 -0.3826838 1.61387e-6 -0.3826834 -0.9238796 0 0.3826839 -0.9238793 -9.93149e-7 -0.9238784 -0.3826862 -1.68598e-6 -0.9238788 0.3826854 -1.73282e-6 -0.3826839 0.9238794 4.21498e-7 0.3826863 0.9238784 -3.74662e-7 0.9238781 0.3826869 4.19961e-7 0.9238781 -0.382687 1.61387e-6 -0.3826839 -0.9238794 4.1138e-7 0.3826843 -0.9238792 -1 0 0 4.70811e-6 1 1.78857e-4 1 0 0 0.9999989 0 0.001466631 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 6.91998e-5 2.86637e-5 1 0 0 1 0 0 1 0 0 1 0 0 4.07189e-6 -1 0 0 0 -1 0 0 1 4.64941e-7 -0.9238792 -0.3826842 -4.21495e-7 -0.9238796 0.3826832 -1.54548e-6 -0.3826834 0.9238796 -1.87332e-6 0.3826846 0.9238791 0 0.9238802 0.3826822 0 0.9238798 -0.3826827 0 -0.3826841 -0.9238793 1.61387e-6 0.3826848 -0.923879 5.89085e-7 -0.9238792 -0.3826845 -3.27829e-7 -0.9238796 0.3826835 -1.63915e-6 -0.3826834 0.9238796 -1.73282e-6 0.3826848 0.923879 2.34166e-7 0.9238802 0.382682 2.48289e-7 0.9238799 -0.3826826 0 -0.3826843 -0.9238792 1.61387e-6 0.3826847 -0.923879 4.64944e-7 -0.923878 -0.382687 -4.21494e-7 -0.9238785 0.3826861 -2.01381e-6 -0.3826841 0.9238792 -1.73282e-6 0.3826851 0.9238789 9.83494e-7 0.9238784 0.3826861 9.93154e-7 0.9238782 -0.3826867 -4.11378e-7 -0.382685 -0.9238789 1.61387e-6 0.382685 -0.9238789 1 0 0 1 0 0 1 3.1476e-6 1.30378e-6 1 5.40047e-7 1.30378e-6 1 3.68764e-6 0 1 -8.90277e-6 0 1 0 0 1 0 0 1 3.1476e-6 1.30378e-6 1 5.40047e-7 1.30378e-6 1 3.68764e-6 0 1 -8.90277e-6 0 1 0 0 1 0 0 1 3.14761e-6 1.30378e-6 1 3.14761e-6 1.30378e-6 1 0 0 1 -8.90269e-6 0</float_array>
<technique_common>
<accessor source="#Cube_001-mesh-normals-array" count="107" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Cube_001-mesh-vertices">
<input semantic="POSITION" source="#Cube_001-mesh-positions"/>
</vertices>
<polylist material="Material_001-material" count="89">
<input semantic="VERTEX" source="#Cube_001-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#Cube_001-mesh-normals" offset="1"/>
<vcount>3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 </vcount>
<p>2 0 0 0 1 0 1 1 0 1 4 1 31 2 27 2 5 2 5 3 30 3 31 3 5 4 29 4 30 4 4 5 29 5 5 5 23 6 27 6 25 6 7 7 28 7 4 7 7 8 21 8 26 8 9 9 25 9 27 9 28 10 14 10 13 10 19 11 25 11 15 11 24 12 20 12 18 12 23 13 6 13 5 13 23 14 22 14 6 14 6 15 8 15 7 15 18 16 17 16 16 16 17 17 15 17 16 17 13 18 11 18 10 18 11 19 9 19 10 19 7 20 8 20 21 20 3 21 6 21 7 21 6 22 1 22 5 22 7 23 0 23 3 23 32 24 29 24 33 24 31 25 32 25 35 25 27 26 35 26 37 26 9 27 37 27 39 27 10 28 39 28 38 28 36 29 10 29 38 29 33 30 28 30 34 30 34 31 13 31 36 31 40 32 14 32 41 32 12 33 40 33 43 33 25 34 43 34 45 34 15 35 45 35 47 35 16 36 47 36 46 36 44 37 16 37 46 37 41 38 24 38 42 38 42 39 18 39 44 39 48 40 20 40 49 40 19 41 48 41 51 41 23 42 51 42 53 42 22 43 53 43 55 43 8 44 55 44 54 44 52 45 8 45 54 45 49 46 26 46 50 46 50 47 21 47 52 47 0 48 2 48 3 48 1 49 4 49 5 49 29 50 4 50 28 50 27 51 23 51 5 51 28 52 7 52 26 52 25 53 9 53 12 53 14 54 28 54 24 54 25 55 19 55 23 55 20 56 24 56 26 56 8 57 6 57 22 57 17 58 18 58 20 58 15 59 17 59 19 59 11 60 13 60 14 60 9 61 11 61 12 61 6 62 3 62 2 62 1 63 6 63 2 63 0 64 7 64 4 64 29 65 32 65 30 65 32 66 31 66 30 66 35 67 27 67 31 67 37 68 9 68 27 68 39 69 10 69 9 69 10 70 36 70 13 70 28 71 33 71 29 71 13 72 34 72 28 72 14 73 40 73 11 73 40 74 12 74 11 74 43 75 25 75 12 75 45 76 15 76 25 76 47 77 16 77 15 77 16 78 44 78 18 78 24 79 41 79 14 79 18 80 42 80 24 80 20 81 48 81 17 81 48 82 19 82 17 82 51 83 23 83 19 83 53 84 22 84 23 84 55 85 8 85 22 85 8 86 52 86 21 86 26 87 49 87 20 87 21 88 50 88 26 88</p>
</polylist>
<polylist material="Material_002-material" count="18">
<input semantic="VERTEX" source="#Cube_001-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#Cube_001-mesh-normals" offset="1"/>
<vcount>3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 </vcount>
<p>32 89 33 89 35 89 33 90 34 90 35 90 34 91 37 91 35 91 34 92 39 92 37 92 34 93 36 93 39 93 36 94 38 94 39 94 40 95 41 95 43 95 41 96 42 96 43 96 42 97 45 97 43 97 42 98 47 98 45 98 42 99 44 99 47 99 44 100 46 100 47 100 48 101 49 101 51 101 49 102 50 102 51 102 50 103 53 103 51 103 50 104 52 104 53 104 52 105 55 105 53 105 52 106 54 106 55 106</p>
</polylist>
</mesh>
</geometry>
</library_geometries>
<library_controllers/>
<library_visual_scenes>
<visual_scene id="Scene" name="Scene">
<node id="Cube" name="Cube" type="NODE">
<matrix sid="transform">0.04101324 0 0 0 0 0.04101324 0 0.03664687 0 0 0.04101324 0 0 0 0 1</matrix>
<instance_geometry url="#Cube_001-mesh">
<bind_material>
<technique_common>
<instance_material symbol="Material_001-material" target="#Material_001-material"/>
<instance_material symbol="Material_002-material" target="#Material_002-material"/>
</technique_common>
</bind_material>
</instance_geometry>
</node>
</visual_scene>
</library_visual_scenes>
<scene>
<instance_visual_scene url="#Scene"/>
</scene>
</COLLADA>

View File

@@ -0,0 +1,152 @@
<?xml version="1.0" encoding="utf-8"?>
<COLLADA xmlns="http://www.collada.org/2005/11/COLLADASchema" version="1.4.1">
<asset>
<contributor>
<author>Stefan Kohlbrecher</author>
<authoring_tool>Blender 2.62.1 r44749</authoring_tool>
</contributor>
<created>2012-03-09T23:01:39</created>
<modified>2012-03-09T23:01:39</modified>
<unit name="meter" meter="1"/>
<up_axis>Z_UP</up_axis>
</asset>
<library_effects>
<effect id="Material-effect">
<profile_COMMON>
<technique sid="common">
<phong>
<emission>
<color sid="emission">0 0 0 1</color>
</emission>
<ambient>
<color sid="ambient">0.01 0.01 0.01 1</color>
</ambient>
<diffuse>
<color sid="diffuse">0.008869297 0.008869297 0.008869297 1</color>
</diffuse>
<specular>
<color sid="specular">0.5 0.5 0.5 1</color>
</specular>
<shininess>
<float sid="shininess">50</float>
</shininess>
<index_of_refraction>
<float sid="index_of_refraction">1</float>
</index_of_refraction>
</phong>
</technique>
<extra>
<technique profile="GOOGLEEARTH">
<double_sided>1</double_sided>
</technique>
</extra>
</profile_COMMON>
<extra><technique profile="MAX3D"><double_sided>1</double_sided></technique></extra>
</effect>
<effect id="Material_001-effect">
<profile_COMMON>
<technique sid="common">
<phong>
<emission>
<color sid="emission">0.2 0.2 0.2 1</color>
</emission>
<ambient>
<color sid="ambient">0.3 0.3 0.3 1</color>
</ambient>
<diffuse>
<color sid="diffuse">0.64 0.64 0.64 1</color>
</diffuse>
<specular>
<color sid="specular">0.839 0.839 0.839 1</color>
</specular>
<shininess>
<float sid="shininess">5</float>
</shininess>
<index_of_refraction>
<float sid="index_of_refraction">1</float>
</index_of_refraction>
</phong>
</technique>
<extra>
<technique profile="GOOGLEEARTH">
<double_sided>1</double_sided>
</technique>
</extra>
</profile_COMMON>
<extra><technique profile="MAX3D"><double_sided>1</double_sided></technique></extra>
</effect>
</library_effects>
<library_materials>
<material id="Material-material" name="Material">
<instance_effect url="#Material-effect"/>
</material>
<material id="Material_001-material" name="Material.001">
<instance_effect url="#Material_001-effect"/>
</material>
</library_materials>
<library_geometries>
<geometry id="Cube_001-mesh" name="Cube.001">
<mesh>
<source id="Cube_001-mesh-positions">
<float_array id="Cube_001-mesh-positions-array" count="168">-1.497 2.613 0.4524136 -1.497 2.613 -0.4341885 -1.497 -2.613 -0.4341885 -1.497 -2.613 0.4524136 -0.02330875 3.366 0.4524136 -0.02330875 3.366 -0.4341885 -0.02931594 -3.366 -0.4341885 -0.02931594 -3.366 0.4524136 -0.02788293 -1.760094 0 -0.02618807 0.1392521 -0.165674 -0.02624928 0.07062792 0 -0.02637684 -0.07232695 0 -0.02643811 -0.1409515 -0.1656743 -0.02618807 0.1392521 0.1656737 -0.02643811 -0.1409515 0.1656738 -0.02673375 -0.4722999 -0.165674 -0.02679502 -0.5409241 0 -0.02746474 -1.291496 0 -0.02673375 -0.4722999 0.1656737 -0.02752602 -1.360121 -0.1656743 -0.02752602 -1.360121 0.1656738 -0.02782166 -1.691469 0.1656737 -0.02782166 -1.691469 -0.165674 -0.02767384 -1.525795 -0.2342988 -0.02658593 -0.3066257 0.2342985 -0.02658593 -0.3066257 -0.2342988 -0.02767384 -1.525795 0.2342985 -0.02604025 0.3049264 -0.2342988 -0.02604025 0.3049263 0.2342985 -0.02589237 0.4706006 0.1656738 -0.02583116 0.5392251 0 -0.02589237 0.4706006 -0.1656743 -0.1343017 0.5392251 -1.34731e-7 -0.1343017 0.4706006 0.1656738 -0.1343017 0.3049263 0.2342983 -0.1343017 0.4706006 -0.1656745 -0.1343011 0.1392521 0.1656737 -0.1343011 0.3049264 -0.234299 -0.1343017 0.07062768 -1.21696e-7 -0.1343011 0.1392521 -0.165674 -0.1343017 -0.07232695 -1.34731e-7 -0.1343017 -0.1409515 0.1656738 -0.1343017 -0.3066257 0.2342983 -0.1343017 -0.1409515 -0.1656745 -0.1343011 -0.4722999 0.1656737 -0.1343011 -0.3066257 -0.234299 -0.1343017 -0.5409244 -1.21696e-7 -0.1343011 -0.4722999 -0.165674 -0.1343017 -1.291496 -1.34731e-7 -0.1343017 -1.360121 0.1656738 -0.1343017 -1.525795 0.2342983 -0.1343017 -1.360121 -0.1656745 -0.1343011 -1.691469 0.1656737 -0.1343011 -1.525795 -0.234299 -0.1343017 -1.760094 -1.21696e-7 -0.1343011 -1.691469 -0.165674</float_array>
<technique_common>
<accessor source="#Cube_001-mesh-positions-array" count="56" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<source id="Cube_001-mesh-normals">
<float_array id="Cube_001-mesh-normals-array" count="321">-1 0 0 -0.4550058 0.8904885 0 0.9999996 -8.92333e-4 0 0.9999997 -8.92333e-4 0 0.9999997 -8.92336e-4 0 0.9999997 -8.92334e-4 0 0 0 1 0.9999996 -8.92334e-4 0 0.9999997 -8.92333e-4 0 0.9999996 -8.92336e-4 0 0.9999997 -8.92336e-4 0 0.9999996 -8.92334e-4 0 0.9999995 -8.92334e-4 0 0.9999997 -8.92334e-4 0 0.9999997 -8.92333e-4 0 0.9999996 -8.92334e-4 0 0.9999997 -8.92333e-4 0 0.9999996 -8.92333e-4 0 0.9999996 -8.92331e-4 0 0.9999996 -8.92331e-4 0 0.9999996 -8.92335e-4 0 -0.4564806 -0.8897334 0 0 0 -1 0 0 1 0 -0.9238792 -0.3826842 -9.10222e-7 -0.9238796 0.3826833 -2.15875e-6 -0.3826836 0.9238795 0 0.382686 0.9238785 -2.35517e-6 0.9238793 0.3826841 -2.23774e-6 0.9238793 -0.3826839 1 0 0 1 0 0 1 2.91729e-6 1.20838e-6 1 5.00532e-7 1.20838e-6 1 3.41782e-6 0 1 -8.25134e-6 0 2.16178e-6 -0.3826833 -0.9238796 0 0.3826836 -0.9238794 0 -0.9238792 -0.3826842 -8.66678e-7 -0.9238797 0.3826831 -2.2179e-6 -0.3826835 0.9238795 0 0.382686 0.9238785 -2.60867e-6 0.9238793 0.3826841 -2.50535e-6 0.9238793 -0.3826839 1 0 0 1 0 0 1 2.91729e-6 1.20838e-6 1 5.00532e-7 1.20838e-6 1 3.41782e-6 0 1 -8.25134e-6 0 2.17273e-6 -0.3826834 -0.9238795 0 0.3826836 -0.9238795 0 -0.9238793 -0.3826839 -8.75508e-7 -0.9238798 0.382683 -2.19182e-6 -0.3826834 0.9238796 0 0.382686 0.9238785 -2.14732e-6 0.9238793 0.3826841 -2.0138e-6 0.9238793 -0.3826839 1 0 0 1 0 0 1 2.91729e-6 1.20838e-6 1 2.91729e-6 1.20838e-6 1 0 0 1 -8.25134e-6 0 2.1949e-6 -0.3826834 -0.9238796 0 0.3826836 -0.9238796 -1 0 0 -0.4550058 0.8904885 0 0.9999996 -8.92333e-4 0 0.9999996 -8.92335e-4 0 0.9999996 -8.92335e-4 0 0.9999997 -8.92336e-4 0 0.9999996 -8.92336e-4 0 0.9999996 -8.92335e-4 0 0.9999997 -8.92335e-4 0 0.9999996 -8.92335e-4 0 0.9999996 -8.92334e-4 0 0.9999996 -8.92334e-4 0 0.9999996 -8.92336e-4 0 0.9999996 -8.92336e-4 0 -0.4564806 -0.8897334 0 0 0 -1 0 0 1 0 -0.9238792 -0.3826842 0 -0.9238794 0.3826837 -2.15579e-6 -0.3826836 0.9238795 -2.15874e-6 0.3826848 0.923879 0 0.9238799 0.3826828 0 0.9238799 -0.3826826 0 -0.3826846 -0.9238791 2.16177e-6 0.3826848 -0.9238789 0 -0.9238792 -0.3826842 0 -0.9238795 0.3826836 -2.21485e-6 -0.3826835 0.9238796 -2.16968e-6 0.3826848 0.923879 0 0.9238799 0.3826826 0 0.9238799 -0.3826826 0 -0.3826847 -0.9238791 2.17273e-6 0.3826848 -0.9238789 0 -0.9238794 -0.3826839 0 -0.9238796 0.3826835 -2.18877e-6 -0.3826833 0.9238795 -2.19182e-6 0.3826848 0.923879 0 0.9238798 0.3826829 0 0.9238798 -0.3826829 0 -0.3826846 -0.9238791 2.19489e-6 0.3826848 -0.9238791</float_array>
<technique_common>
<accessor source="#Cube_001-mesh-normals-array" count="107" stride="3">
<param name="X" type="float"/>
<param name="Y" type="float"/>
<param name="Z" type="float"/>
</accessor>
</technique_common>
</source>
<vertices id="Cube_001-mesh-vertices">
<input semantic="POSITION" source="#Cube_001-mesh-positions"/>
</vertices>
<polylist material="Material1" count="89">
<input semantic="VERTEX" source="#Cube_001-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#Cube_001-mesh-normals" offset="1"/>
<vcount>3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 </vcount>
<p>2 0 0 0 1 0 1 1 0 1 4 1 31 2 27 2 5 2 5 3 30 3 31 3 5 4 29 4 30 4 4 5 29 5 5 5 23 6 27 6 25 6 7 7 28 7 4 7 7 8 21 8 26 8 9 9 25 9 27 9 28 10 14 10 13 10 19 11 25 11 15 11 24 12 20 12 18 12 23 13 6 13 5 13 23 14 22 14 6 14 6 15 8 15 7 15 18 16 17 16 16 16 17 17 15 17 16 17 13 18 11 18 10 18 11 19 9 19 10 19 7 20 8 20 21 20 3 21 6 21 7 21 6 22 1 22 5 22 7 23 0 23 3 23 32 24 29 24 33 24 31 25 32 25 35 25 27 26 35 26 37 26 9 27 37 27 39 27 10 28 39 28 38 28 36 29 10 29 38 29 33 36 28 36 34 36 34 37 13 37 36 37 40 38 14 38 41 38 12 39 40 39 43 39 25 40 43 40 45 40 15 41 45 41 47 41 16 42 47 42 46 42 44 43 16 43 46 43 41 50 24 50 42 50 42 51 18 51 44 51 48 52 20 52 49 52 19 53 48 53 51 53 23 54 51 54 53 54 22 55 53 55 55 55 8 56 55 56 54 56 52 57 8 57 54 57 49 64 26 64 50 64 50 65 21 65 52 65 0 66 2 66 3 66 1 67 4 67 5 67 29 68 4 68 28 68 27 69 23 69 5 69 28 70 7 70 26 70 25 71 9 71 12 71 14 72 28 72 24 72 25 73 19 73 23 73 20 74 24 74 26 74 8 75 6 75 22 75 17 76 18 76 20 76 15 77 17 77 19 77 11 78 13 78 14 78 9 79 11 79 12 79 6 80 3 80 2 80 1 81 6 81 2 81 0 82 7 82 4 82 29 83 32 83 30 83 32 84 31 84 30 84 35 85 27 85 31 85 37 86 9 86 27 86 39 87 10 87 9 87 10 88 36 88 13 88 28 89 33 89 29 89 13 90 34 90 28 90 14 91 40 91 11 91 40 92 12 92 11 92 43 93 25 93 12 93 45 94 15 94 25 94 47 95 16 95 15 95 16 96 44 96 18 96 24 97 41 97 14 97 18 98 42 98 24 98 20 99 48 99 17 99 48 100 19 100 17 100 51 101 23 101 19 101 53 102 22 102 23 102 55 103 8 103 22 103 8 104 52 104 21 104 26 105 49 105 20 105 21 106 50 106 26 106</p>
</polylist>
<polylist material="Material_0012" count="18">
<input semantic="VERTEX" source="#Cube_001-mesh-vertices" offset="0"/>
<input semantic="NORMAL" source="#Cube_001-mesh-normals" offset="1"/>
<vcount>3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 </vcount>
<p>32 30 33 30 35 30 33 31 34 31 35 31 34 32 37 32 35 32 34 33 39 33 37 33 34 34 36 34 39 34 36 35 38 35 39 35 40 44 41 44 43 44 41 45 42 45 43 45 42 46 45 46 43 46 42 47 47 47 45 47 42 48 44 48 47 48 44 49 46 49 47 49 48 58 49 58 51 58 49 59 50 59 51 59 50 60 53 60 51 60 50 61 52 61 53 61 52 62 55 62 53 62 52 63 54 63 55 63</p>
</polylist>
</mesh>
<extra><technique profile="MAYA"><double_sided>1</double_sided></technique></extra>
</geometry>
</library_geometries>
<library_visual_scenes>
<visual_scene id="Scene" name="Scene">
<node id="Cube" type="NODE">
<translate sid="location">0 0 0</translate>
<rotate sid="rotationZ">0 0 1 0</rotate>
<rotate sid="rotationY">0 1 0 0</rotate>
<rotate sid="rotationX">1 0 0 0</rotate>
<scale sid="scale">0.04101324 0.04101324 0.04101324</scale>
<instance_geometry url="#Cube_001-mesh">
<bind_material>
<technique_common>
<instance_material symbol="Material1" target="#Material-material"/>
<instance_material symbol="Material_0012" target="#Material_001-material"/>
</technique_common>
</bind_material>
</instance_geometry>
</node>
</visual_scene>
</library_visual_scenes>
<scene>
<instance_visual_scene url="#Scene"/>
</scene>
</COLLADA>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,32 @@
<?xml version="1.0"?>
<package format="2">
<name>cititruck_description</name>
<version>1.1.7</version>
<description>URDF description of the cititruck robot</description>
<maintainer email="martin.guenther@dfki.de">Martin Günther</maintainer>
<author email="martin.guenther@dfki.de">Martin Günther</author>
<license>BSD</license>
<url type="website">https://github.com/DFKI-NI/cititruck_robot</url>
<url type="repository">https://github.com/DFKI-NI/cititruck_robot</url>
<url type="bugtracker">https://github.com/DFKI-NI/cititruck_robot/issues</url>
<buildtool_depend>catkin</buildtool_depend>
<build_depend>roslaunch</build_depend>
<exec_depend>diff_drive_controller</exec_depend>
<exec_depend>gazebo_plugins</exec_depend>
<exec_depend>gazebo_ros_control</exec_depend>
<exec_depend>hector_gazebo_plugins</exec_depend>
<exec_depend>joint_state_controller</exec_depend>
<exec_depend>joint_state_publisher</exec_depend>
<exec_depend>joint_state_publisher_gui</exec_depend>
<exec_depend>position_controllers</exec_depend>
<exec_depend>robot_state_publisher</exec_depend>
<exec_depend>rviz</exec_depend>
<exec_depend>urdf</exec_depend>
<exec_depend>xacro</exec_depend>
</package>

View File

@@ -0,0 +1,242 @@
Panels:
- Class: rviz/Displays
Help Height: 81
Name: Displays
Property Tree Widget:
Expanded:
- /Global Options1
- /Status1
Splitter Ratio: 0.5
Tree Height: 546
- Class: rviz/Selection
Name: Selection
- Class: rviz/Tool Properties
Expanded:
- /2D Pose Estimate1
- /2D Nav Goal1
- /Publish Point1
Name: Tool Properties
Splitter Ratio: 0.5886790156364441
- Class: rviz/Views
Expanded:
- /Current View1
Name: Views
Splitter Ratio: 0.5
- Class: rviz/Time
Name: Time
SyncMode: 0
SyncSource: ""
Preferences:
PromptSaveOnExit: true
Toolbars:
toolButtonStyle: 2
Visualization Manager:
Class: ""
Displays:
- Alpha: 0.5
Cell Size: 1
Class: rviz/Grid
Color: 160; 160; 164
Enabled: true
Line Style:
Line Width: 0.029999999329447746
Value: Lines
Name: Grid
Normal Cell Count: 0
Offset:
X: 0
Y: 0
Z: 0
Plane: XY
Plane Cell Count: 10
Reference Frame: <Fixed Frame>
Value: true
- Alpha: 1
Class: rviz/RobotModel
Collision Enabled: false
Enabled: true
Links:
All Links Enabled: true
Expand Joint Details: false
Expand Link Details: false
Expand Tree: false
Link Tree Style: Links in Alphabetic Order
base_footprint:
Alpha: 1
Show Axes: false
Show Trail: false
base_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
drive_wheel_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
fixed_wheel_left_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
fixed_wheel_right_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
imu_frame:
Alpha: 1
Show Axes: false
Show Trail: false
imu_link:
Alpha: 1
Show Axes: false
Show Trail: false
left_laser_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
right_laser_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
steer_link:
Alpha: 1
Show Axes: false
Show Trail: false
Value: true
steer_link_2:
Alpha: 1
Show Axes: false
Show Trail: false
Name: RobotModel
Robot Description: robot_description
TF Prefix: ""
Update Interval: 0
Value: true
Visual Enabled: true
- Class: rviz/TF
Enabled: true
Filter (blacklist): ""
Filter (whitelist): ""
Frame Timeout: 15
Frames:
All Enabled: true
base_footprint:
Value: true
base_link:
Value: true
drive_wheel_link:
Value: true
fixed_wheel_left_link:
Value: true
fixed_wheel_right_link:
Value: true
imu_frame:
Value: true
imu_link:
Value: true
left_laser_link:
Value: true
right_laser_link:
Value: true
steer_link:
Value: true
steer_link_2:
Value: true
Marker Alpha: 1
Marker Scale: 1
Name: TF
Show Arrows: true
Show Axes: true
Show Names: true
Tree:
base_footprint:
base_link:
fixed_wheel_left_link:
{}
fixed_wheel_right_link:
{}
imu_link:
imu_frame:
{}
left_laser_link:
{}
right_laser_link:
{}
steer_link:
drive_wheel_link:
{}
steer_link_2:
{}
Update Interval: 0
Value: true
Enabled: true
Global Options:
Background Color: 48; 48; 48
Default Light: true
Fixed Frame: base_footprint
Frame Rate: 30
Name: root
Tools:
- Class: rviz/Interact
Hide Inactive Objects: true
- Class: rviz/MoveCamera
- Class: rviz/Select
- Class: rviz/FocusCamera
- Class: rviz/Measure
- Class: rviz/SetInitialPose
Theta std deviation: 0.2617993950843811
Topic: /initialpose
X std deviation: 0.5
Y std deviation: 0.5
- Class: rviz/SetGoal
Topic: /move_base_simple/goal
- Class: rviz/PublishPoint
Single click: true
Topic: /clicked_point
Value: true
Views:
Current:
Class: rviz/Orbit
Distance: 5.068544387817383
Enable Stereo Rendering:
Stereo Eye Separation: 0.05999999865889549
Stereo Focal Distance: 1
Swap Stereo Eyes: false
Value: false
Field of View: 0.7853981852531433
Focal Point:
X: 0.023150593042373657
Y: -0.03417559340596199
Z: -2.6775524020195007e-09
Focal Shape Fixed Size: false
Focal Shape Size: 0.05000000074505806
Invert Z Axis: false
Name: Current View
Near Clip Distance: 0.009999999776482582
Pitch: 1.0303977727890015
Target Frame: <Fixed Frame>
Yaw: 0.26539814472198486
Saved: ~
Window Geometry:
Displays:
collapsed: false
Height: 846
Hide Left Dock: false
Hide Right Dock: false
QMainWindow State: 000000ff00000000fd00000004000000000000016a000002b0fc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003d000002b0000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f000002b0fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000003d000002b0000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004b00000003efc0100000002fb0000000800540069006d00650100000000000004b0000003bc00fffffffb0000000800540069006d0065010000000000000450000000000000000000000340000002b000000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
Selection:
collapsed: false
Time:
collapsed: false
Tool Properties:
collapsed: false
Views:
collapsed: false
Width: 1200
X: 2125
Y: 0

View File

@@ -0,0 +1,26 @@
<?xml version="1.0"?>
<robot name="cititruck" xmlns:xacro="http://ros.org/wiki/xacro" >
<!-- cititruck base -->
<xacro:include filename="$(find cititruck_description)/urdf/include/cititruck_v1.urdf.xacro" />
<xacro:include filename="$(find cititruck_description)/urdf/include/common.gazebo.xacro" />
<xacro:arg name="tf_prefix" default="" />
<xacro:property name="tf_prefix_" value="$(arg tf_prefix)" />
<xacro:if value="${tf_prefix_ == ''}">
<xacro:property name="prefix" value="" />
</xacro:if>
<xacro:unless value="${tf_prefix_ == ''}">
<xacro:property name="prefix" value="${tf_prefix_}/" />
</xacro:unless>
<xacro:cititruck prefix="${prefix}" />
<xacro:controller_plugin_gazebo robot_namespace=""/>
<!-- instead of the controller_plugin_gazebo, you can use the steerdrive controller like this: -->
<!-- <xacro:steer_controller_plugin_gazebo
prefix="${prefix}"
steer_joint = "base2steer_joint"
steerdrive_wheel_joint = "steer2sd_wheel_joint"
wheel_radius = "0.105"/> -->
</robot>

View File

@@ -0,0 +1,3 @@
rosrun xacro xacro cititruck.xacro > /tmp/old.xml
rosrun xacro xacro --inorder cititruck.xacro > /tmp/new.xml
diff /tmp/old.xml /tmp/new.xml

View File

@@ -0,0 +1,74 @@
<?xml version="1.0"?>
<robot xmlns:xacro="http://ros.org/wiki/xacro">
<!-- Arguments used in cititruck.gazebo -->
<xacro:arg name="controller_prefix" default=""/>
<xacro:arg name="sensor_prefix" default=""/>
<xacro:arg name="sick_name" default="safety"/>
<xacro:arg name="ls2000_name" default="nav"/>
<xacro:arg name="kinect2_name" default=""/>
<xacro:arg name="kinect1_name" default="kinect"/>
<xacro:arg name="use_gpu" default="true"/>
<!-- ros_control plugin -->
<gazebo>
<plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so">
<robotNamespace>/cititruck</robotNamespace>
</plugin>
</gazebo>
<gazebo>
<plugin name="steer_drive_controller" filename="libgazebo_ros_steer_drive.so">
<legacyMode>false</legacyMode>
<alwaysOn>true</alwaysOn>
<updateRate>100</updateRate>
<steerJoint>base2steer_joint</steerJoint>
<driveJoint>steer2sd_wheel_joint</driveJoint>
<fixedWheelLeftJoint>base2fixed_left_wheel_joint</fixedWheelLeftJoint>
<fixedWheelRightJoint>base2fixed_right_wheel_joint</fixedWheelRightJoint>
<wheelDiameter>0.16</wheelDiameter>
<steeringFixWheelDistanceX>1.190</steeringFixWheelDistanceX>
<steeringFixWheelDistanceY>0.0</steeringFixWheelDistanceY>
<steerTorque>1000</steerTorque>
<driveTorque>1000</driveTorque>
<commandTopic>$(arg controller_prefix)cmd_vel</commandTopic>
<odometryTopic>odom</odometryTopic>
<odometryFrame>/world</odometryFrame>
<robotBaseFrame>base_footprint</robotBaseFrame>
<odomEncSteeringAngleOffset>0.01</odomEncSteeringAngleOffset>
<!--odometrySource>encoder</odometrySource-->
<publishWheelJointState>true</publishWheelJointState>
</plugin>
</gazebo>
<gazebo reference="base_link" >
<material>Gazebo/Red</material>
</gazebo>
<gazebo reference="left_fork" >
<material>Gazebo/Grey</material>
</gazebo>
<gazebo reference="right_fork" >
<material>Gazebo/Grey</material>
</gazebo>
<gazebo reference="fixed_left_wheel_link" >
<material>Gazebo/Black</material>
</gazebo>
<gazebo reference="fixed_right_wheel_link" >
<material>Gazebo/Black</material>
</gazebo>
<gazebo reference="steerdrive_wheel_link" >
<material>Gazebo/Black</material>
</gazebo>
</robot>

View File

@@ -0,0 +1,67 @@
<?xml version="1.0"?>
<robot xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:macro name="steer_controller_plugin_gazebo" params="prefix steer_joint steerdrive_wheel_joint wheel_radius">
<gazebo>
<plugin name="steer_drive_controller" filename="libgazebo_ros_steer_drive.so">
<alwaysOn>true</alwaysOn>
<updateRate>100</updateRate>
<steerJoint>${prefix}base2steer_joint</steerJoint>
<driveJoint>${prefix}steer2sd_wheel_joint</driveJoint>
<fixedWheelLeftJoint>${prefix}fixed_left_wheel_joint</fixedWheelLeftJoint>
<fixedWheelRightJoint>${prefix}fixed_right_wheel_joint</fixedWheelRightJoint>
<wheelDiameter>1.05</wheelDiameter>
<steeringFixWheelDistanceX>1.1</steeringFixWheelDistanceX>
<steeringFixWheelDistanceY>0.0</steeringFixWheelDistanceY>
<steerTorque>1000</steerTorque>
<driveTorque>1000</driveTorque>
<commandTopic>mobile_base_controller/cmd_vel</commandTopic>
<odometryTopic>mobile_base_controller/odom</odometryTopic>
<odometryFrame>world</odometryFrame>
<robotBaseFrame>base_footprint</robotBaseFrame>
<odomEncSteeringAngleOffset>0.01</odomEncSteeringAngleOffset>
<!--odometrySource>encoder</odometrySource-->
<publishWheelTF>false</publishWheelTF>
<publishWheelJointState>true</publishWheelJointState>
</plugin>
</gazebo>
</xacro:macro>
<xacro:macro name="set_wheel_friction" params="link friction">
<gazebo reference="${link}">
<mu1 value="${friction}"/>
<mu2 value="${friction}"/>
<kp value="10000000.0"/>
<kd value="1.0"/>
<minDepth>0.01</minDepth>
</gazebo>
</xacro:macro>
<xacro:macro name="set_all_wheel_frictions" params="prefix">
<xacro:set_wheel_friction link="${prefix}steer_link" friction="200"/>
<xacro:set_wheel_friction link="${prefix}drive_wheel_link" friction="200"/>
<xacro:set_wheel_friction link="${prefix}fixed_wheel_left_link" friction="1"/>
<xacro:set_wheel_friction link="${prefix}fixed_wheel_right_link" friction="1"/>
</xacro:macro>
<xacro:macro name="p3d_base_controller" params="prefix">
<gazebo>
<plugin name="p3d_base_controller" filename="libgazebo_ros_p3d.so">
<alwaysOn>true</alwaysOn>
<updateRate>50.0</updateRate>
<bodyName>${prefix}base_footprint</bodyName>
<topicName>base_pose_ground_truth</topicName>
<gaussianNoise>0.01</gaussianNoise>
<frameName>map</frameName>
<xyzOffsets>0 0 0</xyzOffsets>
<rpyOffsets>0 0 0</rpyOffsets>
</plugin>
</gazebo>
</xacro:macro>
</robot>

View File

@@ -0,0 +1,30 @@
<?xml version="1.0"?>
<robot xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:macro name="cititruck_wheel_transmission" params="prefix locationprefix">
<transmission name="${prefix}${locationprefix}_wheel_trans">
<type>transmission_interface/SimpleTransmission</type>
<joint name="${prefix}${locationprefix}_wheel_joint">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
</joint>
<actuator name="${prefix}${locationprefix}_wheel_motor">
<hardwareInterface>hardware_interface/VelocityJointInterface</hardwareInterface>
<mechanicalReduction>1</mechanicalReduction>
</actuator>
</transmission>
</xacro:macro>
<xacro:macro name="cititruck_steer_transmission" params="prefix locationprefix">
<transmission name="${prefix}${locationprefix}_wheel_trans">
<type>transmission_interface/SimpleTransmission</type>
<joint name="${prefix}${locationprefix}_joint">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
</joint>
<actuator name="${prefix}${locationprefix}_motor">
<hardwareInterface>hardware_interface/PositionJointInterface</hardwareInterface>
<mechanicalReduction>1</mechanicalReduction>
</actuator>
</transmission>
</xacro:macro>
</robot>

View File

@@ -0,0 +1,251 @@
<?xml version="1.0"?>
<robot xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:arg name="robot_type" default="demo" />
<xacro:property name="robot_type" value="$(arg robot_type)" /> <!-- necessary because args cannot be accessed inside ${} expressions -->
<xacro:include filename="$(find cititruck_description)/urdf/include/common_properties.urdf.xacro" />
<xacro:include filename="$(find cititruck_description)/urdf/include/cititruck.gazebo.xacro" />
<xacro:include filename="$(find cititruck_description)/urdf/include/cititruck.transmission.xacro" />
<xacro:include filename="$(find cititruck_description)/urdf/include/imu.gazebo.urdf.xacro" />
<xacro:include filename="$(find cititruck_description)/urdf/include/sick_s300.urdf.xacro" />
<xacro:property name="deg_to_rad" value="0.017453293" />
<!-- The inertia for the MiR platform is intentionally chosen to be smaller than
the bounding box and also shifted a bit to the back, because most of the mass
is in the lower center back (because of the batteries). -->
<xacro:macro name="actuated_wheel" params="prefix locationprefix locationright">
<joint name="fixed_${locationprefix}_wheel_joint" type="continuous">
<parent link="${prefix}base_link"/>
<child link="${prefix}fixed_wheel_${locationprefix}_link"/>
<origin xyz="${locationright}" rpy="0 0 0" />
<axis xyz="0 1 0" />
</joint>
<link name="${prefix}fixed_wheel_${locationprefix}_link">
<inertial>
<mass value="1"/>
<inertia ixx="0.01" ixy="0" ixz="0" iyy="0.01" iyz="0" izz="0.01" />
<origin/>
</inertial>
<visual>
<origin xyz="0 0 0" rpy="1.57 0 0" />
<geometry>
<cylinder radius="0.05" length="0.08" />
</geometry>
<xacro:insert_block name="material_black" />
</visual>
<collision>
<origin xyz="0 0 0" rpy="${pi/2} 0 0" />
<geometry>
<cylinder radius="0.04" length="0.08" />
</geometry>
</collision>
</link>
<gazebo reference="${prefix}fixed_wheel_${locationprefix}_link">
<material>Gazebo/FlatBlack</material>
</gazebo>
</xacro:macro>
<xacro:macro name="fork" params="locationprefix locationright">
<xacro:box_inertial mass="5" x="1" y="0" z="0">
<origin xyz="0 0 0" rpy="0 0 0" />
</xacro:box_inertial>
<visual>
<origin xyz="${locationright}" rpy="0 0 0" />
<geometry>
<box size="1.35 0.15 0.04" />
</geometry>
<xacro:insert_block name="material_grey" />
</visual>
</xacro:macro>
<!-- robot -->
<xacro:macro name="cititruck" params="prefix">
<link name="${prefix}base_footprint" />
<joint name="${prefix}base_joint" type="fixed">
<parent link="${prefix}base_footprint" />
<child link="${prefix}base_link" />
<origin xyz="0 0 0" rpy="0 0 0" />
</joint>
<!-- Base Link -->
<link name="${prefix}base_link">
<xacro:box_inertial mass="30" x="1" y="0" z="0">
<origin xyz="0 0 0" rpy="0 0 0" />
</xacro:box_inertial>
<visual>
<origin xyz="${1.3268 - 0.21 + 0.4/2} 0 ${0.8/2 + 0.3337 }" rpy="0 0 0" />
<geometry>
<box size="0.40 0.65 0.80" />
</geometry>
<xacro:insert_block name="material_white" />
</visual>
<visual>
<origin xyz="${1.3268 - 0.21 + 0.4/2} 0 ${0.3 - 0.01}" rpy="0 0 0" />
<geometry>
<box size="0.40 0.65 0.02" />
</geometry>
<xacro:insert_block name="material_grey" />
</visual>
<visual>
<origin xyz="${1.3268 - 0.21 + 0.02/2} 0 ${0.3 - (0.3 - 0.01)/2}" rpy="0 0 0" />
<geometry>
<box size="0.02 0.65 ${0.3 - 0.01}" />
</geometry>
<xacro:insert_block name="material_grey" />
</visual>
<collision>
<origin xyz="${1.3268 - 0.21 + 0.4/2} 0 ${0.8/2 + 0.3337 }" rpy="0 0 0" />
<geometry>
<box size="0.40 0.70 0.80" />
</geometry>
</collision>
<xacro:fork locationprefix="left" locationright="${1.12 - 1.35/2} 0.205 ${0.05/2 + 0.3 - 0.29}"/>
<xacro:fork locationprefix="right" locationright="${1.12 - 1.35/2} -0.205 ${0.05/2 + 0.3 - 0.29}"/>
</link>
<gazebo reference="${prefix}base_link">
<material>Gazebo/White</material>
</gazebo>
<!-- <xacro:fork prefix="${prefix}" locationprefix="left" parent="base_link" locationright="${0.9 - 1.15/2} 0.205 ${0.05/2 + 0.3 - 0.29}"/> -->
<!-- <xacro:fork prefix="${prefix}" locationprefix="right" parent="base_link" locationright="${0.9 - 1.15/2} -0.205 ${0.05/2 + 0.3 - 0.29}"/> -->
<joint name="${prefix}base2steer_joint" type="revolute">
<parent link="${prefix}base_link"/>
<child link="${prefix}steer_link"/>
<limit effort="10000.0" lower="-1.8" upper="1.8" velocity="2500"/>
<origin xyz="1.3268 0 0.125" rpy="0 0 0" />
<axis xyz="0 0 1" />
</joint>
<xacro:cititruck_steer_transmission prefix="${prefix}" locationprefix="base2steer"/>
<link name="${prefix}steer_link">
<inertial>
<mass value="45"/>
<inertia ixx="0.001" ixy="0" ixz="0" iyy="0.001" iyz="0" izz="0.001" />
<origin/>
</inertial>
<visual>
<origin xyz="0 0 0" rpy="1.57 0 0" />
<geometry>
<cylinder radius="0.09" length="0.1" />
</geometry>
<xacro:insert_block name="material_dark_grey" />
</visual>
<collision>
<origin xyz="0 0 0" rpy="1.57 0 0" />
<geometry>
<cylinder radius="0.09" length="0.1" />
</geometry>
</collision>
</link>
<gazebo reference="${prefix}steer_link" >
<material>Gazebo/FlatBlack</material>
</gazebo>
<link name="${prefix}steer_link_2" />
<joint name="${prefix}steer2steer_2_joint" type="fixed">
<parent link="${prefix}steer_link" />
<child link="${prefix}steer_link_2" />
<origin xyz="0 0 1.02" rpy="0 0 0" />
</joint>
<joint name="${prefix}steer2sd_wheel_joint" type="continuous">
<parent link="${prefix}steer_link"/>
<child link="${prefix}drive_wheel_link"/>
<limit effort="10000.0" velocity="100"/>
<origin xyz="0 0 0" rpy="0 0 0" />
<axis xyz="0 1 0" />
</joint>
<xacro:cititruck_wheel_transmission prefix="${prefix}" locationprefix="steer2sd"/>
<link name="${prefix}drive_wheel_link">
<inertial>
<mass value="10"/>
<inertia ixx="0.01" ixy="0" ixz="0" iyy="0.01" iyz="0" izz="0.01" />
<origin/>
</inertial>
<visual>
<origin xyz="0 0 0" rpy="1.57 0 0" />
<geometry>
<cylinder radius="0.125" length="0.08" />
</geometry>
<xacro:insert_block name="material_yellow" />
</visual>
<collision>
<origin xyz="0 0 0" rpy="1.57 0 0" />
<geometry>
<cylinder radius="0.125" length="0.08" />
</geometry>
</collision>
</link>
<gazebo reference="${prefix}drive_wheel_link" >
<material>Gazebo/FlatBlack</material>
</gazebo>
<xacro:actuated_wheel prefix="${prefix}" locationprefix="left" locationright="0.0 0.205 ${0.05}"/>
<xacro:actuated_wheel prefix="${prefix}" locationprefix="right" locationright="0.0 -0.205 ${0.05}" />
<!-- IMU -->
<joint name="${prefix}base_link_to_imu_joint" type="fixed">
<parent link="${prefix}base_link" />
<child link="${prefix}imu_link" />
<origin xyz="${1.3268 -0.15} 0.0 0.3" rpy="0 0 0" /> <!-- same as real MiR -->
</joint>
<link name="${prefix}imu_link" />
<xacro:imu_gazebo link="${prefix}imu_link" imu_topic="imu_data" update_rate="50.0" />
<!-- Create an alias for imu_link. This is necessary because the real MiR's
TF has imu_link, but the imu_data topic is published in the imu_frame
frame. -->
<joint name="${prefix}imu_link_to_imu_frame_joint" type="fixed">
<parent link="${prefix}imu_link" />
<child link="${prefix}imu_frame" />
<origin xyz="0 0 0" rpy="0 0 0" />
</joint>
<link name="${prefix}imu_frame" />
<!-- Laser scanners -->
<joint name="${prefix}base_link_to_left_laser_joint" type="fixed">
<parent link="${prefix}base_link" />
<child link="${prefix}left_laser_link" />
<origin xyz="1.5447 0.2953 0.1743" rpy="0.0 0.0 ${0.25 * pi}" />
</joint>
<xacro:sick_s300 prefix="${prefix}" link="left_laser_link" topic="l_scan" />
<joint name="${prefix}base_link_to_right_laser_joint" type="fixed">
<parent link="${prefix}base_link" />
<child link="${prefix}right_laser_link" />
<origin xyz="1.5447 -0.2953 0.1743" rpy="0.0 0.0 ${-0.25 * pi}" />
</joint>
<xacro:sick_s300 prefix="${prefix}" link="right_laser_link" topic="r_scan" />
<!-- set the gazebo friction parameters for the wheels -->
<xacro:set_all_wheel_frictions prefix="${prefix}"/>
<xacro:p3d_base_controller prefix="${prefix}" />
</xacro:macro>
</robot>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0"?>
<robot xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:macro name="controller_plugin_gazebo" params="robot_namespace">
<gazebo>
<plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so">
<xacro:unless value="${robot_namespace == ''}">
<robotNamespace>${robot_namespace}</robotNamespace>
</xacro:unless>
<controlPeriod>0.001</controlPeriod>
<legacyModeNS>false</legacyModeNS>
</plugin>
</gazebo>
</xacro:macro>
</robot>

View File

@@ -0,0 +1,84 @@
<?xml version="1.0" ?>
<!--
Various useful properties such as constants and materials
-->
<robot name="xacro_properties" xmlns:xacro="http://ros.org/wiki/xacro">
<!-- #################### RViz materials #################### -->
<xacro:property name="material_white">
<material name="white">
<color rgba="1 1 1 1"/>
</material>
</xacro:property>
<xacro:property name="material_yellow">
<material name="yellow">
<color rgba="${255/255} ${226/255} ${0/255} 1"/>
</material>
</xacro:property>
<xacro:property name="material_almost_white">
<material name="almost_white">
<color rgba="0.9 0.9 0.9 1" />
</material>
</xacro:property>
<xacro:property name="material_grey">
<material name="grey">
<color rgba="0.5 0.5 0.5 1"/>
</material>
</xacro:property>
<xacro:property name="material_light_grey">
<material name="light_grey">
<color rgba="0.6 0.6 0.6 1"/>
</material>
</xacro:property>
<xacro:property name="material_dark_grey">
<material name="dark_grey">
<color rgba="0.3 0.3 0.3 1"/>
</material>
</xacro:property>
<xacro:property name="material_black">
<material name="black">
<color rgba="0.1 0.1 0.1 1"/>
</material>
</xacro:property>
<xacro:property name="material_aluminum">
<material name="aluminum">
<color rgba="0.8 0.8 0.8 1" />
</material>
</xacro:property>
<xacro:property name="material_silver">
<material name="silver">
<color rgba="0.79 0.82 0.93 1" />
</material>
</xacro:property>
<!-- #################### inertials with origin #################### -->
<!-- see https://secure.wikimedia.org/wikipedia/en/wiki/List_of_moment_of_inertia_tensors -->
<xacro:macro name="sphere_inertial" params="radius mass *origin">
<inertial>
<mass value="${mass}" />
<xacro:insert_block name="origin" />
<inertia ixx="${0.4 * mass * radius * radius}" ixy="0.0" ixz="0.0"
iyy="${0.4 * mass * radius * radius}" iyz="0.0"
izz="${0.4 * mass * radius * radius}" />
</inertial>
</xacro:macro>
<xacro:macro name="cylinder_inertial" params="radius length mass *origin">
<inertial>
<mass value="${mass}" />
<xacro:insert_block name="origin" />
<inertia ixx="${0.0833333 * mass * (3 * radius * radius + length * length)}" ixy="0.0" ixz="0.0"
iyy="${0.0833333 * mass * (3 * radius * radius + length * length)}" iyz="0.0"
izz="${0.5 * mass * radius * radius}" />
</inertial>
</xacro:macro>
<xacro:macro name="box_inertial" params="x y z mass *origin">
<inertial>
<mass value="${mass}" />
<xacro:insert_block name="origin" />
<inertia ixx="${0.0833333 * mass * (y*y + z*z)}" ixy="0.0" ixz="0.0"
iyy="${0.0833333 * mass * (x*x + z*z)}" iyz="0.0"
izz="${0.0833333 * mass * (x*x + y*y)}" />
</inertial>
</xacro:macro>
</robot>

View File

@@ -0,0 +1,31 @@
<?xml version="1.0"?>
<robot xmlns:xacro="http://ros.org/wiki/xacro">
<!-- If tf_prefix is given, use "frame tf_prefix/imu_frame", else "imu_frame" -->
<xacro:arg name="tf_prefix" default="" />
<xacro:property name="tf_prefix" value="$(arg tf_prefix)" />
<xacro:if value="${tf_prefix == ''}">
<xacro:property name="imu_frame" value="imu_frame" />
</xacro:if>
<xacro:unless value="${tf_prefix == ''}">
<xacro:property name="imu_frame" value="$(arg tf_prefix)/imu_frame" />
</xacro:unless>
<xacro:macro name="imu_gazebo" params="link imu_topic update_rate">
<gazebo>
<plugin name="imu_plugin" filename="libhector_gazebo_ros_imu.so">
<updateRate>${update_rate}</updateRate>
<bodyName>${link}</bodyName>
<frameId>${imu_frame}</frameId> <!-- from real MiR -->
<topicName>${imu_topic}</topicName>
<accelDrift>0.0 0.0 0.0</accelDrift>
<accelGaussianNoise>${sqrt(5e-05)} ${sqrt(0.0001)} ${sqrt(0.00013)}</accelGaussianNoise> <!-- real MiR linear_acceleration_covariance: [5e-05, 0.0, 0.0, 0.0, 0.0001, 0.0, 0.0, 0.0, 0.00013] -->
<rateDrift>0.0 0.0 0.0</rateDrift>
<rateGaussianNoise>${sqrt(8e-06)} ${sqrt(8e-06)} ${sqrt(3e-07)}</rateGaussianNoise> <!-- real MiR angular_velocity_covariance: [8e-06, 0.0, 0.0, 0.0, 8e-06, 0.0, 0.0, 0.0, 3e-07] -->
<yawDrift>0.0</yawDrift>
<yawGaussianNoise>${sqrt(0.1)}</yawGaussianNoise> <!-- real MiR orientation_covariance: [0.1, 0.0, 0.0, 0.0, 0.1, 0.0, 0.0, 0.0, 0.1] -->
</plugin>
</gazebo>
</xacro:macro>
</robot>

View File

@@ -0,0 +1,40 @@
<?xml version="1.0"?>
<robot>
<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.2 0.2 0.2 1.0"/>
</material>
<material name="grey2">
<color rgba="0.4 0.4 0.4 1.0"/>
</material>
<material name="orange">
<color rgba="${255/255} ${108/255} ${10/255} 1.0"/>
</material>
<material name="brown">
<color rgba="${222/255} ${207/255} ${195/255} 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>
</robot>

View File

@@ -0,0 +1,185 @@
<?xml version="1.0"?>
<!--
# (c) 2018 EU H2020 Project ILIAD, iliad-project.eu
# The following code in this file is licensed under the MIT license:
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
-->
<!-- This xacro contains a macro for spawning a sensor calibration assembly inside a robot's URDF file.
The idea is that on the final robot, the assembly just consists of two fixed joints, which have the origin and rpy values set properly
to reflect the sensor's extrinsic calibration values.
Instead, during the calibration phase, these two fixed joints are replaced by a chain of nine prismatic+revolute joints, such that
each dimension can be tweaked individually using the sliders in the joint state publisher GUI.
Once calibrated, calibration values should be saved via save_calibration.py.
-->
<robot name="sensor_calibration_assembly_macro" xmlns:xacro="http://ros.org/wiki/xacro">
<!-- Command-line arguments -->
<xacro:arg name="use_fixed_joints" default="true"/> <!-- Set to false for calibration -->
<xacro:arg name="calib_file" default=""/> <!-- Same file name should be passed to joint state publisher. Should be set up like this:
zeros:
velodyne_calib_pre_x: 0.1
velodyne_calib_pre_y: -0.2
...
velodyne_calib_roll: 0.10
velodyne_calib_pitch: -0.03
..
velodyne_calib_post_x: 0.05
-->
<!-- Helper macro -->
<xacro:macro name="simple_link" params="name">
<link name="${name}">
<inertia ixx="3.64583333333e-07" ixy="0.0" ixz="0.0" iyy="3.64583333333e-07" iyz="0.0" izz="3.125e-07"/>
</link>
</xacro:macro>
<!-- Invoke this macro to create a sensor calibration assembly (XYZ offset + rotation + XYZ post-offset). -->
<xacro:macro name="sensor_calibration_assembly" params="sensor_id parent_link create_final_link:=true final_link_suffix:='link'">
<!-- Lighter version with a single fixed pre-calibrated joint per sensor (for use in Gazebo and on the actual robot) -->
<xacro:if value="$(arg use_fixed_joints)">
<!-- Load resulting transforms exported by save_calibration.py, and use them for the fixed offset and rpy -->
<xacro:property name="all_sensor_tfs" value="${load_yaml('$(arg calib_file)').get('resulting_transforms', dict())}"/>
<xacro:property name="sensor_tf" value="${all_sensor_tfs.get(sensor_id, [0.0]*6)}"/>
<xacro:property name="xyz" value="${' '.join(str(x) for x in sensor_tf[0:3] )}"/>
<xacro:property name="rpy" value="${' '.join(str(x) for x in sensor_tf[3:6] )}"/>
<!-- Resulting transform -->
<joint name="${sensor_id}_resulting_transform_joint" type="fixed">
<origin xyz="${xyz}" rpy="${rpy}"/>
<parent link="${parent_link}"/>
<child link="${sensor_id}_${final_link_suffix}"/>
</joint>
</xacro:if>
<!-- Version with movable joints (only for calib use with joint state publisher GUI) -->
<xacro:unless value="$(arg use_fixed_joints)">
<!-- Dynamic joint limits -->
<xacro:property name="max_trans" value="1.0"/>
<xacro:property name="max_rot" value="3.14159"/>
<!-- Zero values will be loaded by joint state publisher! Joints should be 1D because only 1D values are supported in the GUI -->
<!-- Initial dummy link (zero transform) that starts the chain -->
<!-- Do not remove, required for automatic saving! -->
<simple_link name="${sensor_id}_calib_start_link"/>
<joint name="${sensor_id}_calib_start" type="fixed">
<parent link="${parent_link}"/>
<child link="${sensor_id}_calib_start_link"/>
</joint>
<!-- Pre-translation -->
<simple_link name="${sensor_id}_calib_pre_x_link"/>
<joint name="${sensor_id}_calib_pre_x" type="prismatic">
<axis xyz="1 0 0"/>
<limit lower="-${max_trans}" upper="+${max_trans}" effort="1" velocity="1"/>
<parent link="${sensor_id}_calib_start_link"/>
<child link="${sensor_id}_calib_pre_x_link"/>
</joint>
<simple_link name="${sensor_id}_calib_pre_y_link"/>
<joint name="${sensor_id}_calib_pre_y" type="prismatic">
<axis xyz="0 1 0"/>
<limit lower="-${max_trans}" upper="+${max_trans}" effort="1" velocity="1"/>
<parent link="${sensor_id}_calib_pre_x_link"/>
<child link="${sensor_id}_calib_pre_y_link"/>
</joint>
<simple_link name="${sensor_id}_calib_pre_z_link"/>
<joint name="${sensor_id}_calib_pre_z" type="prismatic">
<axis xyz="0 0 1"/>
<limit lower="-${max_trans}" upper="+${max_trans}" effort="1" velocity="1"/>
<parent link="${sensor_id}_calib_pre_y_link"/>
<child link="${sensor_id}_calib_pre_z_link"/>
</joint>
<!-- Rotation -->
<simple_link name="${sensor_id}_calib_roll_link"/>
<joint name="${sensor_id}_calib_roll" type="revolute">
<axis xyz="1 0 0"/>
<limit lower="-${max_rot}" upper="+${max_rot}" effort="1" velocity="1"/>
<parent link="${sensor_id}_calib_pre_z_link"/>
<child link="${sensor_id}_calib_roll_link"/>
</joint>
<simple_link name="${sensor_id}_calib_pitch_link"/>
<joint name="${sensor_id}_calib_pitch" type="revolute">
<axis xyz="0 1 0"/>
<limit lower="-${max_rot}" upper="+${max_rot}" effort="1" velocity="1"/>
<parent link="${sensor_id}_calib_roll_link"/>
<child link="${sensor_id}_calib_pitch_link"/>
</joint>
<simple_link name="${sensor_id}_calib_yaw_link"/>
<joint name="${sensor_id}_calib_yaw" type="revolute">
<axis xyz="0 0 1"/>
<limit lower="-${max_rot}" upper="+${max_rot}" effort="1" velocity="1"/>
<parent link="${sensor_id}_calib_pitch_link"/>
<child link="${sensor_id}_calib_yaw_link"/>
</joint>
<!-- Post-translation (after rotation) -->
<simple_link name="${sensor_id}_calib_post_x_link"/>
<joint name="${sensor_id}_calib_post_x" type="prismatic">
<axis xyz="1 0 0"/>
<limit lower="-${max_trans}" upper="+${max_trans}" effort="1" velocity="1"/>
<parent link="${sensor_id}_calib_yaw_link"/>
<child link="${sensor_id}_calib_post_x_link"/>
</joint>
<simple_link name="${sensor_id}_calib_post_y_link"/>
<joint name="${sensor_id}_calib_post_y" type="prismatic">
<axis xyz="0 1 0"/>
<limit lower="-${max_trans}" upper="+${max_trans}" effort="1" velocity="1"/>
<parent link="${sensor_id}_calib_post_x_link"/>
<child link="${sensor_id}_calib_post_y_link"/>
</joint>
<simple_link name="${sensor_id}_calib_post_z_link"/>
<joint name="${sensor_id}_calib_post_z" type="prismatic">
<axis xyz="0 0 1"/>
<limit lower="-${max_trans}" upper="+${max_trans}" effort="1" velocity="1"/>
<parent link="${sensor_id}_calib_post_y_link"/>
<child link="${sensor_id}_calib_post_z_link"/>
</joint>
<!-- Final dummy link (zero transform) that ends the chain -->
<!-- Do not remove, required for automatic saving! -->
<joint name="${sensor_id}_calib_end_link" type="fixed">
<parent link="${sensor_id}_calib_post_z_link"/>
<child link="${sensor_id}_${final_link_suffix}"/>
</joint>
<!-- End of version with movable joints for calib -->
</xacro:unless>
<!-- Final link -->
<xacro:if value="${create_final_link}">
<simple_link name="${sensor_id}_${final_link_suffix}"/>
</xacro:if>
</xacro:macro>
</robot>

View File

@@ -0,0 +1,72 @@
<?xml version="1.0"?>
<robot xmlns:xacro="http://ros.org/wiki/xacro">
<xacro:include filename="$(find cititruck_description)/urdf/include/common_properties.urdf.xacro" />
<xacro:property name="laser_x" value="0.156" />
<xacro:property name="laser_y" value="0.155" />
<xacro:property name="laser_z" value="0.185" />
<xacro:property name="laser_mass" value="1.2" />
<xacro:macro name="sick_s300" params="link topic prefix">
<link name="${prefix}${link}">
<visual>
<origin xyz="0.0 0.0 0.0" rpy="${pi} 0 0" />
<geometry>
<mesh filename="package://cititruck_description/meshes/visual/sick_lms-100.stl" />
</geometry>
<!-- <xacro:insert_block name="material_yellow" /> -->
<xacro:insert_block name="material_black" />
</visual>
<collision>
<origin xyz="0.0 0.0 0.0" rpy="${pi} 0 0" />
<geometry>
<mesh filename="package://cititruck_description/meshes/visual/sick_lms-100.stl" />
</geometry>
</collision>
<xacro:box_inertial x="${laser_x}" y="${laser_y}" z="${laser_z}" mass="${laser_mass}">
<origin xyz="0 0 0" />
</xacro:box_inertial>
</link>
<gazebo reference="${prefix}${link}">
<!-- <material value="Gazebo/Yellow" /> -->
<material value="Gazebo/FlatBlack" />
<sensor type="ray" name="${prefix}${link}">
<pose>0 0 0 0 0 0</pose>
<visualize>false</visualize>
<update_rate>12.5</update_rate>
<ray>
<scan>
<horizontal>
<samples>541</samples>
<resolution>1</resolution> <!-- has to be 1; actual resolution will be computed from number of samples + min_angle/max_angle -->
<!-- <min_angle>-2.35619449615</min_angle>
<max_angle>2.35619449615</max_angle> -->
<min_angle>-2.094395102</min_angle>
<max_angle>2.181661565</max_angle>
</horizontal>
</scan>
<range>
<min>0.05</min>
<max>29.0</max>
<resolution>0.01</resolution>
</range>
<noise>
<type>gaussian</type>
<!-- Noise parameters based on published spec for S300 achieving
"+-29mm" accuracy at range < 3m (~0.01 of the range) at
1 sigma. -->
<mean>0.0</mean>
<stddev>0.01</stddev>
</noise>
</ray>
<plugin name="gazebo_ros_${link}_controller" filename="libgazebo_ros_laser.so">
<frameName>${prefix}${link}</frameName>
<topicName>${topic}</topicName>
</plugin>
</sensor>
</gazebo>
</xacro:macro>
</robot>