Ubuntu 14.04 + ROS Indigo+Turtlebot2(Kuboki)+Kinect+Huyoko建立gmapping地图,实现自主避障导航

本文介绍如何使用Turtlebot结合Kinect和Hokuyo激光雷达完成gmapping地图构建及导航。首先安装必要的驱动和软件包,接着配置雷达参数,创建启动文件,最后测试并保存构建的地图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

原文地址 :http://blog.youkuaiyun.com/zshouyi/article/details/54962374

这篇文章主要介绍如何使用Turtlebot(Kuboki) + Kinect + Hokuyo建立gmapping地图,并且实现边建图边导航,最后使用ros map命令保存生成的地图。

设备清单:

1、Turtlebot(Kuboki)

2、Microsoft Kinect 1代

3、Hokuyo UTM-30LX

环境配置:

这里假设你已经在Turtlebot的工作本上安装了Ubuntu 14.04 + ROS Indigo,我也是用的这个环境,如果还没有安装,参考ROS Indigo的wiki:Ubuntu install of ROS Indigo

安装Turtlebot的驱动:

 

[cpp] view plain copy

  1. sudo apt-get update  
  2. 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  

如果你的底盘是kuboki,那么再多加两条:

 

 

[java] view plain copy

  1. sudo apt-get install ros-indigo-kobuki ros-indigo-kobuki-core  
  2. rosrun kobuki_ftdi create_udev_rules  

接下来需要安装kinect驱动,推荐使用freenect:

 

 

[cpp] view plain copy

  1. sudo apt-get install libfreenect-dev  
  2. sudo apt-get install ros-indigo-freenect-launch  

 

设置你的3D sensor为kinect,设置完需要关闭当前窗口,打开新的terminal使之生效。

 

[java] view plain copy

  1. echo "export TURTLEBOT_3D_SENSOR=kinect" >> .bashrc  

 

下载雷达驱动包和导航包,并编译:

 

[java] view plain copy

  1. mkdir -p  ~/turtlebot_ws/src  
  2. cd   ~/turtlebot_ws/src  
  3. git clone https://github.com/ncnynl/hokuyo_node.git  
  4. git clone https://github.com/turtlebot/turtlebot_apps   
  5. cd  ~/turtlebot_ws  
  6. catkin_make  

在~/.bashrc最后一行添加(可以使用命令 sudo vi ~/.bashrc, vi的使用方法得自己百度了):

 

source /home/ubu/turtlebot_ws/devel/setup.bash

使刚才的修改生效:

 

[java] view plain copy

  1. source ~/.bashrc  

下面需要配置你的激光雷达Hokuyo,运行命令:

 

 

[java] view plain copy

  1. lsusb  

找到一条类似于这个的反馈结果:

 

Bus 001 Device 006: ID 15d1:0000
新建/etc/udev/rules.d/hokuyo.rules文件,内容如下:

KERNEL=="ttyACM[0-9]*", ACTION=="add", ATTRS{idVendor}=="15d1", MODE="0666", GROUP="dialout", SYMLINK+="hokuyo"
增加当前用户对串口的默认访问权限:

 

[java] view plain copy

  1. sudo usermod -a -G dialout 用户名  

使UDEV配置生效:(使串口的默认访问权限生效,需要重启机器)

 

 

[java] view plain copy

  1. sudo service udev reload  
  2. sudo service udev restart  

创建launch文件:
复制hokuyo_node的hokuyo_test.launch到hokuyo_laser.launch,并增加TF定义

 

 

 

 

[java] view plain copy

  1. roscd turtlebot_navigation  
  2. mkdir -p laser/driver  
  3. sudo cp ~/turtlebot_ws/src/hokuyo_node/hokuyo_test.launch laser/driver/hokuyo_laser.launch  

打开hokuyo_laser.launch,并修改

[java] view plain copy

  1. rosed turtlebot_navigation hokuyo_laser.launch  

内容如下:

 

 

[java] view plain copy

  1. <launch>  
  2.   <node name="hokuyo" pkg="hokuyo_node" type="hokuyo_node" respawn="false" output="screen">  
  3.   
  4.   <!-- Starts up faster, but timestamps will be inaccurate. -->   
  5.   <param name="calibrate_time" type="bool" value="false"/>   
  6.   
  7.   <!-- Set the port to connect to here -->  
  8.   <param name="port" type="string" value="/dev/hokuyo"/>   
  9.   <param name="frame_id"  type="string" value="laser"/>  
  10.   <param name="intensity" type="bool" value="false"/>  
  11.   </node>  
  12.   
  13.   <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"/>  
  14. </launch>  

增加hokuyo_gmapping_demo.launch文件,用于启动gmapping.

 

 

[java] view plain copy

  1. roscd  turtlebot_navigation  
  2. touch  launch/hokuyo_gmapping_demo.launch  
  3. rosed  launch/hokuyo_gmapping_demo.launch  

内容如下:

 

[java] view plain copy

  1. <launch>  
  2.   
  3.   <!-- 3D sensor -->  
  4.   <arg name="3d_sensor" default="$(env TURTLEBOT_3D_SENSOR)"/>  <!-- r200, kinect, asus_xtion_pro -->  
  5.   <include file="$(find turtlebot_bringup)/launch/3dsensor.launch">  
  6.     <arg name="rgb_processing" value="false" />  
  7.     <arg name="depth_registration" value="false" />  
  8.     <arg name="depth_processing" value="false" />  
  9.       
  10.     <!-- We must specify an absolute topic name because if not it will be prefixed by "$(arg camera)".  
  11.          Probably is a bug in the nodelet manager: https://github.com/ros/nodelet_core/issues/7 -->   
  12.     <arg name="scan_topic" value="/scan" />  
  13.   </include>  
  14.   
  15.   <!-- Define laser type-->  
  16.   <arg name="laser_type" default="hokuyo" />  
  17.   
  18.   <!-- laser driver -->  
  19.   <include file="$(find turtlebot_navigation)/laser/driver/$(arg laser_type)_laser.launch" />  
  20.   
  21.   <!-- Gmapping -->  
  22.   <arg name="custom_gmapping_launch_file" default="$(find turtlebot_navigation)/launch/includes/gmapping/$(arg laser_type)_gmapping.launch.xml"/>  
  23.   <include file="$(arg custom_gmapping_launch_file)"/>  
  24.   
  25.   <!-- Move base -->  
  26.   <include file="$(find turtlebot_navigation)/launch/includes/move_base.launch.xml"/>  
  27.   
  28.   
  29. </launch>  

增加hokuyo_gmapping.launch.xml文件,执行gmapping建图

 

 

[java] view plain copy

  1. roscd  turtlebot_navigation  
  2. touch  launch/includes/gmapping/hokuyo_gmapping.launch.xml   
  3. rosed  launch/includes/gmapping/hokuyo_gmapping.launch.xml   

输入内容:

 

 

[java] view plain copy

  1. <launch>  
  2.   <arg name="scan_topic"  default="scan" />  
  3.   <arg name="base_frame"  default="base_footprint"/>  
  4.   <arg name="odom_frame"  default="odom"/>  
  5.   
  6.   <node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen">  
  7.     <param name="base_frame" value="$(arg base_frame)"/>  
  8.     <param name="odom_frame" value="$(arg odom_frame)"/>  
  9.     <param name="map_update_interval" value="5.0"/>  
  10.     <param name="maxUrange" value="6.0"/>  
  11.     <param name="maxRange" value="8.0"/>  :rosrun usb_cam usb_cam_node (
  12.     <param name="sigma" value="0.05"/>  
  13.     <param name="kernelSize" value="1"/>  
  14.     <param name="lstep" value="0.05"/>  
  15.     <param name="astep" value="0.05"/>  
  16.     <param name="iterations" value="5"/>  
  17.     <param name="lsigma" value="0.075"/>  
  18.     <param name="ogain" value="3.0"/>  
  19.     <param name="lskip" value="0"/>  
  20.     <param name="minimumScore" value="200"/>  
  21.     <param name="srr" value="0.01"/>  
  22.     <param name="srt" value="0.02"/>  
  23.     <param name="str" value="0.01"/>  
  24.     <param name="stt" value="0.02"/>  
  25.     <param name="linearUpdate" value="0.5"/>  
  26.     <param name="angularUpdate" value="0.436"/>  
  27.     <param name="temporalUpdate" value="-1.0"/>  
  28.     <param name="resampleThreshold" value="0.5"/>  
  29.     <param name="particles" value="80"/>  
  30.   <!--  
  31.     <param name="xmin" value="-50.0"/>  
  32.     <param name="ymin" value="-50.0"/>  
  33.     <param name="xmax" value="50.0"/>  
  34.     <param name="ymax" value="50.0"/>  
  35.   make the starting size small for the benefit of the Android client's memory...  
  36.   -->  
  37.     <param name="xmin" value="-1.0"/>  
  38.     <param name="ymin" value="-1.0"/>  
  39.     <param name="xmax" value="1.0"/>  
  40.     <param name="ymax" value="1.0"/>  
  41.   
  42.     <param name="delta" value="0.05"/>  
  43.     <param name="llsamplerange" value="0.01"/>  
  44.     <param name="llsamplestep" value="0.01"/>  
  45.     <param name="lasamplerange" value="0.005"/>  
  46.     <param name="lasamplestep" value="0.005"/>  
  47.     <remap from="scan" to="$(arg scan_topic)"/>  
  48.   </node>  
  49. </launch>  

测试激光雷达gmapping构建地图与导航
唤醒Turtlebot底盘

 

 

[java] view plain copy

  1. roslaunch turtlebot_bringup minimal.launch  

启动gmapping

 

[java] view plain copy

  1. roslaunch turtlebot_navigation hokuyo_gmapping_demo.launch  

打开rviz查看地图

 

 

[java] view plain copy

  1. roslaunch turtlebot_rviz_launchers view_navigation.launch  

点击rviz的2D Navigation按钮,在建好的地图上左键单击并拖动,Turtlebot会自己进行导航,这时如果你突然出现在Turtlebot前面,它会重新规划路线饶过你
或者可以键盘控制Turtlebot建图

 

 

[java] view plain copy

  1. roslaunch turtlebot_teleop keyboard_teleop.launch   

保存地图

 

[java] view plain copy

  1. mkdir -p ~/map  
  2. rosrun map_server map_saver -f ~/map/hokuyo_gmapping  
  3. ls ~/map   #查看内容,包含hokuyo_gmapping.pgm  hokuyo_gmapping.yaml  

建立的实验室平面图

 

 

References

http://wiki.ros.org/kobuki/Tutorials/Installation

http://wiki.ros.org/indigo/Installation/Ubuntu

http://www.ncnynl.com/archives/201611/1097.html

http://www.ncnynl.com/archives/201609/794.html

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值