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
在安装完上面的驱动之后,可以先不连接激光传感器。只是将turtlebot 的底盘kobuki, 用数据线和电脑进行连接,来测试用电脑键盘能否控制kobuki 运动。具体操作如下:
1、用数据线将kobuki 和电脑连接起来,输入如下命令查看kobuki 是否被电脑识别:
$ ls /dev/kobuki
若显示没有那个文件或目录,则意味着kobuki 与电脑没有连接成功,需要排查故障。
2、打开kobuki 的开关,等绿灯亮了之后再依次执行如下命令。
3、在电脑上打开一个终端来启动ROS
$ roscore
4、打开新终端,启动turtlebot 。
$ roslaunch turtlebot_bringup minimal.launch
如果运行该命令,启动turtlebot成功的话,就会响起一阵递增的铃声。如果没有该铃声响起,则意味着使用该命令启动失败。在用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 ;若没有则添加进去,结果如下
(4)、检查端口port 。将value 设置好别名,或直接为端口/dev/ttyACM0
(5)、增加TF:
注意:args值为自己激光的实际安装位置。例如设机器人的底盘中心坐标x,y为 (0, 0),激光传感器安装在底盘中心位置上,高度为18 cm,则z=0.18m。TF的单位是m,测量单位是cm。
(6)、hokuyo_laser.launch 文件修改后最终的内容如下:
5、编辑 turtlebot_navigation 包中的内容
(1)、在 turtlebot_navigation 包中新建 hokuyo_gmapping_demo.launch 文件,用于启动gmapping
$ roscd turtlebot_navigation
$ vim launch/hokuyo_gmapping_demo.launch
(2)、写入如下内容
(3)、创建 hokuyo_gmapping.launch.xml 文件,执行gmapping建图
# 在 turtlebot_navigation 包下
$ vim launch/includes/gmapping/hokuyo_gmapping.launch.xml
(4)、写入如下内容
先将激光与电脑、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
参考资料:
[1] 激光雷达(Hokuyo)gmapping构建地图
[2] 使用Turtlebot的kobuki底盘进行键盘操控
[3] 使用turtlebot + hokuyo 运行gmapping建图