给turtlebot增加一个传感器

参考

ros中利用gazebo进行gmapping仿真:kobuki+kinect -> kobuki+rplidar

ROS中给turtlebot加两个传感器:kinect+hokuyo,进行gazebo仿真

让turtlebot带雷达和asua_xtion_pro

roslaunch turtlebot_bringup minimal.launch是用于启动机器人robot.launch.xml和底盘mobile_base.launch.xml

minimal.launch中的

1
2
3
4
<arg name="base" value="$(arg base)" />
<arg name="stacks" value="$(arg stacks)" />
<arg name="3d_sensor" value="$(arg 3d_sensor)" /> #rplidar,asua_xtion_pro,kinect2等
<arg name="serialport" value="$(arg serialport)" /> #底盘的设备端口,如/dev/ttyUSB0

可以通过在~/.bashrc中设置TURTLEBOT_BASE,TURTLEBOT_STACKS,TURTLEBOT_3D_SENSOR,TURTLEBOT_SERIAL_PORT来赋值

1
2
3
4
export TURTLEBOT_BASE=kobuki
export TURTLEBOT_STACKS=hexagons
export TURTLEBOT_3D_SENSOR=asus_xtion_pro
export TURTLEBOT_SERIAL_PORT=/dev/ttyUSB0

robot.launch中调用description.launch.xml来建立机器人的各关节和传感器的坐标系描述,调用robot_state_publisher来读取robot_description文件并发布tf tree。

description.launch.xml调用$(find turtlebotdescription)/robots/$(arg base)$(arg stacks)_$(arg 3d_sensor).urdf.xacro’文件来定义机器人的关节和传感器,可以在turtlebot_description)/robots下定义新的.urdf.xacro文件来代表拥有不同关节和传感器的机器人

例如:
在kobuki_hexagons_asus_xtion_pro.urdf.xacro文件中,

1
2
3
4
5
6
<xacro:include filename="$(find turtlebot_description)/urdf/turtlebot_library.urdf.xacro" />

<kobuki/>
<stack_hexagons parent="base_link"/>
<sensor_asus_xtion_pro parent="base_link"/>
<sensor_rplidar parent="base_link"/>

代表拥有kobuki底盘,hexagons 平台,asua_xtion_pro深度摄像头,rplidar雷达的turtlebot机器人。

urdf/turtlebot_library.urdf.xacro文件的内容为:

1
2
3
4
...
<xacro:include filename="$(find turtlebot_description)/urdf/sensors/asus_xtion_pro_offset.urdf.xacro"/>
<xacro:include filename="$(find turtlebot_description)/urdf/sensors/rplidar.urdf.xacro"/>
...

调用了turtlebot_description/urdf/stack/hexagons.urdf.xacro和turtlebot_description/urdf/sensor/asus_xtion_pro.urdf.xacro和turtlebot_description/urdf/sensor/rplidar.urdf.xacro文件。
这几个文件都是平台和传感器的描述和坐标变换。

如果以后需要增加一个新的传感器,只需要在turtlebot_description/urdf/sensor文件夹下增加一个[sensor_name].urdf.xacro文件,里面写好该传感器的描述和坐标系转换,然后在urdf/turtlebot_library.urdf.xacro文件中include新增加的传感器描述文件,然后在选择的像kobuki_hexagons_asus_xtionpro.urdf.xacro这样的文件中,加入一行
`<sensor
[sensor_name] parent=”base_link”/>`

这样robot_state_publisher就会自动读取机器人的各关节和传感器,并发送tf tree。

注意:asus_xtion_pro.urdf.xacro文件中会用到turtlebot_properies.urdf.xacro中的cam_px等变量,代表相机相对base_link的位置。