turtlebot的程序默认搭载xtion或kinect深度摄像头。现在我们把它修改为激光雷达。市面上可选的激光雷达有:Hokuyo、Sick和Rplidar。我们以Rplidar为例进行讲解。
下载
mkdir -p ~/turtlebot/src
cd ~/turtlebot/src
git clone https://github.com/turtlebot/turtlebot.git
git clone https://github.com/robopeak/rplidar_ros.git
编译
cd ~/turtlebot
catkin_make
安装turtlebot-navigation
sudo apt-get install ros-indigo-turtlebot-navigation
刷新配置
source ~/turtlebot/devel/setup.bash
参考:http://wiki.ros.org/turtlebot/Tutorials/hydro/Adding%20a%20Hokuyo%20laser%20to%20your%20Turtlebot
接下来需要把Rplidar添加turtlebot坐标系下。 首先需要知道Rplidar和turtlebot的坐标系。
Rplidar的坐标系:三角形的电机为X轴的正向,顺时针90度为Y轴的正向,因为是二维激光,没有Z轴。
turtlebot坐标系:左手原则, 前方(带碰撞挡板)X轴的正向,顺时针90度为Y轴的正向,朝上为Z轴的正向。
我们安装Rplidar的方法: 把Rplidar固定在turtlebot上方的最中心的位置,Rplidar三角形电机的朝向和turtlebot 前方碰撞挡板的中心位置一致,测量Rplidar和turtlebot底座的高度为40cm。
在turtlebot_description/urdf/turtlebot_library.urdf.xacro的</robot>
标签之前加入如下内容
<joint name="laser" type="fixed">
<origin xyz="0.00 0.00 0.40" rpy="0 0 0" />
<parent link="base_link" />
<child link="base_laser_link" />
</joint>
<link name="base_laser_link">
<visual>
<geometry>
<box size="0.00 0.05 0.06" />
</geometry>
<material name="Green" />
</visual>
<inertial>
<mass value="0.000001" />
<origin xyz="0 0 0" />
<inertia ixx="0.0001" ixy="0.0" ixz="0.0" iyy="0.0001" iyz="0.0" izz="0.0001" />
</inertial>
</link>
注意:Rplidar的安装位置并不唯一, 如果修改安装位置,laser的joint中origin的参数值
在turtlebot_bringup/launch/3dsensor.launch中把
<arg name="scan_topic" default="scan"/>
修改为
<arg name="scan_topic" default="kinect_scan"/>
在minimal.launch中</launch>
之前,加入如下内容
<node name="rplidarNode" pkg="rplidar_ros" type="rplidarNode" output="screen">
<param name="serial_port" type="string" value="/dev/ttyUSB1"/>
<param name="serial_baudrate" type="int" value="115200"/>
<param name="frame_id" type="string" value="base_laser_link"/>
<param name="inverted" type="bool" value="false"/>
<param name="angle_compensate" type="bool" value="true"/>
</node>
在turtlebot_navigation/launch/gmapping_demo.launch 删掉如下内容
<include file="$(find turtlebot_bringup)/launch/3dsensor.launch">
<arg name="rgb_processing" value="false" />
<arg name="depth_registration" value="false" />
<arg name="depth_processing" value="false" />
<arg name="scan_topic" value="/scan" />
</include>
roslaunch turtlebot_bringup minimal.launch
roslaunch turtlebot_navigation gmapping_demo.launch
roslaunch turtlebot_rviz_launchers view_navigation.launch
用下面命令控制turtlebot移动
roslaunch turtlebot_teleop keyboard_teleop.launch
保存地图到/tmp目录下
rosrun map_server map_saver -f /tmp/test_map