Turtlebot_01——激光雷达运行gmapping建图

一、基本功能包安装

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

  如果运行该命令,启动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 ;若没有则添加进去,结果如下

<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 文件,用于启动gmapping

$  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

参考资料:

[1]  激光雷达(Hokuyo)gmapping构建地图

[2]  使用Turtlebot的kobuki底盘进行键盘操控

[3] 使用turtlebot + hokuyo 运行gmapping建图

猜你喜欢

转载自blog.csdn.net/Jeffxu_lib/article/details/88045454