一、基本功能包安装
1、使用环境:Ubuntu14.04 LTS + ROS indigo + hokuyo URG-04LX-UG01(激光型号)
2、安装 Turtlebot包(若要学习源码,修改源码则使用源码安装)的方法如下:
sudo apt-get install ros-indigo-turtlebot ros-indigo-turtlebot-apps ros-indigo-turtlebot-interactions ros-indigo-turtlebot-simulator ros-indigo-kobuki-ftdi ros-indigo-rocon-remocon ros-indigo-rocon-qt-library ros-indigo-ar-track-alvar-msgs
对于kobuki的底盘还要执行如下命令:
$ sudo apt-get install ros-indigo-kobuki ros-indigo-kobuki-core
$ rosrun kobuki_ftdi create_udev_rules
3、创建工作空间及安装驱动功能包:
# 创建turtlebot工作空间
$ mkdir -p ~/turtlebot_ws/src
$ cd ~/turtlebot_ws/src
# 创建激光雷达的驱动功能包,由于是直接git clone ,所以不需要自己创建
$ git clone https://github.com/ncnynl/hokuyo_node.git
# 创建turtlebot建图功能包,下载即可
$ git clone https://github.com/turtlebot/turtlebot_apps.git
# 编译
$ cd .. # 回到工作空间的目录下,才能进行编译
$ catkin_make
4、添加环境变量:
#(1)、 将 source ~/turtlebot_ws/devel/setup.bash 添加到 ~/.bashrc 文件的末尾
$ echo "source ~/turtlebot_ws/devel/setup.bash">>~/.bashrc
或者
# 打开~/.bashrc文件,将source ~/turtlebot_ws/devel/setup.bash 添加到末尾
$ vim ~/.bashrc
#(2)、 在当前的bash中刷新配置
$ source ~/.bashrc
或
$ rospack profile
二、测试电脑键盘对kobuki运动控制
在安装完上面的驱动之后,可以先不连接激光传感器。只是将turtlebot 的底盘kobuki, 用数据线和电脑进行连接,来测试用电脑键盘能否控制kobuki 运动。具体操作如下:
1、用数据线将kobuki 和电脑连接起来,输入如下命令查看kobuki 是否被电脑识别:
$ ls /dev/kobuki
若显示没有那个文件或目录,则意味着kobuki 与电脑没有连接成功,需要排查故障。
2、打开kobuki 的开关,等绿灯亮了之后再依次执行如下命令。
3、在电脑上打开一个终端来启动ROS
$ roscore
4、打开新终端,启动turtlebot 。
$ roslaunch turtlebot_bringup minimal.launch
响起一阵递增的铃声。如果没有该铃声响起,则意味着使用该命令启动失败。在用ctrl + c关闭turtlebot时,将会响起一阵递减的铃声。
5、打开新终端,启动键盘控制运动。
$ roslaunch turtlebot_teleop keyboard_teleop.launch
注意:查看kobuki 的状态、电脑的电池状态可以执行该命令: rqt -s kobuki_dashboard
三、配置激光
1、将hokuyo激光传感器通过usb插口连接电脑 (注意观察激光传感器上的信号灯是否闪烁)。
2、配置端口:
#查看端口
$ ls -l /dev/ttyACM0
crw-rw---- 1 root dialout 166, 0 3月 1 13:46 /dev/ttyACM0
#设置端口权限为666
$ sudo chmod 666 /dev/ttyACM0
3、创建激光雷达的串口别名:
# 确认idVendor和idProduct,ID后面的部分idVendor:idProduct
$ lsusb
Bus 001 Device 004: ID 15d1:0000
# 新建 /etc/udev/rules.d/hokuyo.rules文件,别名为hokuyo,实际名称为:/dev/hokuyo
$ sudo vim /etc/udev/rules.d/hokuyo.rules
在打开的文件中添加如下内容:
KERNEL=="ttyACM[0-9]*", ACTION=="add", ATTRS{idVendor}=="15d1", MODE="0666", GROUP="dialout", SYMLINK+="hokuyo"
# 增加当前用户对串口的默认访问权限:
$ sudo usermod -a -G dialout 用户名
# 使UDEV配置生效:(使串口的默认访问权限生效,需要重启机器)
$ sudo service udev reload
$ sudo service udev restart
4、创建雷达驱动的启动文件
(1)、复制 hokuyo_node 中的 hokuyo_test.launch 到 hokuyo_laser.launch
$ roscd turtlebot_navigation
$ mkdir -p laser/driver
$ sudo cp ~/turtlebot_ws/src/hokuyo_node/hokuyo_test.launch laser/driver/hokuyo_laser.launch
(2)、打开 hokuyo_laser.launch 文件
$ rosed turtlebot_navigation hokuyo_laser.launch
(3)、检查该文件中是否有 frame_id ,若有则检查是否指定为 laser ;若没有则添加进去,结果如下
<param name="frame_id" type="string" value="laser"/>
(4)、检查端口port 。将value 设置好别名,或直接为端口/dev/ttyACM0
<param name="port" type="string" value="/dev/hokuyo"/>
(5)、增加TF:
<node pkg="tf" type="static_transform_publisher" name="base_to_laser" args="0.0 0.0 0.18 0 0.0 0.0 base_link laser 100"/>
注意:args值为自己激光的实际安装位置。例如设机器人的底盘中心坐标x,y为 (0, 0),激光传感器安装在底盘中心位置上,高度为18 cm,则z=0.18m。TF的单位是m,测量单位是cm。
(6)、hokuyo_laser.launch 文件修改后最终的内容如下:
<launch>
<node name="hokuyo" pkg="hokuyo_node" type="hokuyo_node" respawn="false" output="screen">
<!-- Starts up faster, but timestamps will be inaccurate. -->
<param name="calibrate_time" type="bool" value="false"/>
<!-- Set the port to connect to here -->
<param name="port" type="string" value="/dev/hokuyo"/>
<param name="frame_id" type="string" value="laser"/>
<param name="intensity" type="bool" value="false"/>
</node>
<node pkg="tf" type="static_transform_publisher" name="base_to_laser" args="0.0 0.0 0.18 0 0.0 0.0 base_link laser 100"/>
</launch>
5、编辑 turtlebot_navigation 包中的内容
(1)、在 turtlebot_navigation 包中新建 hokuyo_gmapping_demo.launch
$ roscd turtlebot_navigation
$ vim launch/hokuyo_gmapping_demo.launch
(2)、写入如下内容
<launch>
<!-- Define laser type-->
<arg name="laser_type" default="hokuyo" />
<!-- laser driver -->
<include file="$(find turtlebot_navigation)/laser/driver/$(arg laser_type)_laser.launch" />
<!-- Gmapping -->
<arg name="custom_gmapping_launch_file" default="$(find turtlebot_navigation)/launch/includes/gmapping/$(arg laser_type)_gmapping.launch.xml"/>
<include file="$(arg custom_gmapping_launch_file)"/>
<!-- Move base -->
<include file="$(find turtlebot_navigation)/launch/includes/move_base.launch.xml"/>
</launch>
(3)、创建 hokuyo_gmapping.launch.xml 文件,执行gmapping建图
# 在 turtlebot_navigation 包下
$ vim launch/includes/gmapping/hokuyo_gmapping.launch.xml
(4)、写入如下内容
<launch>
<arg name="scan_topic" default="scan" />
<arg name="base_frame" default="base_footprint"/>
<arg name="odom_frame" default="odom"/>
<node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">
<param name="base_frame" value="$(arg base_frame)"/>
<param name="odom_frame" value="$(arg odom_frame)"/>
<param name="map_update_interval" value="5.0"/>
<param name="maxUrange" value="6.0"/>
<param name="maxRange" value="8.0"/>
<param name="sigma" value="0.05"/>
<param name="kernelSize" value="1"/>
<param name="lstep" value="0.05"/>
<param name="astep" value="0.05"/>
<param name="iterations" value="5"/>
<param name="lsigma" value="0.075"/>
<param name="ogain" value="3.0"/>
<param name="lskip" value="0"/>
<param name="minimumScore" value="200"/>
<param name="srr" value="0.01"/>
<param name="srt" value="0.02"/>
<param name="str" value="0.01"/>
<param name="stt" value="0.02"/>
<param name="linearUpdate" value="0.5"/>
<param name="angularUpdate" value="0.436"/>
<param name="temporalUpdate" value="-1.0"/>
<param name="resampleThreshold" value="0.5"/>
<param name="particles" value="80"/>
<!--
<param name="xmin" value="-50.0"/>
<param name="ymin" value="-50.0"/>
<param name="xmax" value="50.0"/>
<param name="ymax" value="50.0"/>
make the starting size small for the benefit of the Android client's memory...
-->
<param name="xmin" value="-1.0"/>
<param name="ymin" value="-1.0"/>
<param name="xmax" value="1.0"/>
<param name="ymax" value="1.0"/>
<param name="delta" value="0.05"/>
<param name="llsamplerange" value="0.01"/>
<param name="llsamplestep" value="0.01"/>
<param name="lasamplerange" value="0.005"/>
<param name="lasamplestep" value="0.005"/>
<remap from="scan" to="$(arg scan_topic)"/>
</node>
</launch>
四、启动激光雷达用 gmapping 建图
先将激光与电脑、Turtlebot 与电脑用usb导线连接起来,打开 Turtlebot 的开关,看见指示灯亮。再依次执行如下命令:
1、在电脑上打开新终端,启动ros
$ roscore
2、打开新终端,启动 Turtlebot
$ roslaunch turtlebot_bringup minimal.launch
3、打开新终端,启动键盘操作Turtlebot
$ roslaunch turtlebot_teleop keyboard_teleop.launch
4、打开新终端,启动gmapping构建地图
$ roslaunch turtlebot_navigation hokuyo_gmapping_demo.launch
5、打开新终端,启动rviz,实时查看建图结果
$ roslaunch turtlebot_rviz_launchers view_navigation.launch
五、保存所建地图
打开新终端,执行如下命令
$ mkdir -p ~/Map_result
$ rosrun map_server map_saver -f ~/Map_result/hokuyo_gmapping
$ ls ~/Map_result #查看内容,包含hokuyo_gmapping.pgm hokuyo_gmapping.yaml