Ubuntu 14.04 + ROS Indigo+Turtlebot2(Kuboki)+Kinect+Huyoko建立gmapping地图,实现自主避障导航
2017-07-02 11:34
519 查看
原文地址 :http://blog.csdn.net/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
sudo apt-get update
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
sudo apt-get install ros-indigo-kobuki ros-indigo-kobuki-core
rosrun kobuki_ftdi create_udev_rules
接下来需要安装kinect驱动,推荐使用freenect:
[cpp][/b] view
plain copy
sudo apt-get install libfreenect-dev
sudo apt-get install ros-indigo-freenect-launch
设置你的3D sensor为kinect,设置完需要关闭当前窗口,打开新的terminal使之生效。
[java] view
plain copy
echo "export TURTLEBOT_3D_SENSOR=kinect" >> .bashrc
下载雷达驱动包和导航包,并编译:
[java] view
plain copy
mkdir -p ~/turtlebot_ws/src
cd ~/turtlebot_ws/src
git clone https://github.com/ncnynl/hokuyo_node.git
git clone https://github.com/turtlebot/turtlebot_apps
cd ~/turtlebot_ws
catkin_make
在~/.bashrc最后一行添加(可以使用命令 sudo vi ~/.bashrc, vi的使用方法得自己百度了):
source /home/ubu/turtlebot_ws/devel/setup.bash
使刚才的修改生效:
[java] view
plain copy
source ~/.bashrc
下面需要配置你的激光雷达Hokuyo,运行命令:
[java] view
plain copy
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
sudo usermod -a -G dialout 用户名
使UDEV配置生效:(使串口的默认访问权限生效,需要重启机器)
[java] view
plain copy
sudo service udev reload
sudo service udev restart
创建launch文件:
复制hokuyo_node的hokuyo_test.launch到hokuyo_laser.launch,并增加TF定义
[java] view
plain copy
roscd turtlebot_navigation
mkdir -p laser/driver
sudo cp ~/turtlebot_ws/src/hokuyo_node/hokuyo_test.launch laser/driver/hokuyo_laser.launch
打开hokuyo_laser.launch,并修改
[java] view
plain copy
rosed turtlebot_navigation hokuyo_laser.launch
内容如下:
[java] view
plain copy
<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>
增加hokuyo_gmapping_demo.launch文件,用于启动gmapping.
[java] view
plain copy
roscd turtlebot_navigation
touch launch/hokuyo_gmapping_demo.launch
rosed launch/hokuyo_gmapping_demo.launch
内容如下:
[java] view
plain copy
<launch>
<!-- 3D sensor -->
<arg name="3d_sensor" default="$(env TURTLEBOT_3D_SENSOR)"/> <!-- r200, kinect, asus_xtion_pro -->
<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" />
<!-- We must specify an absolute topic name because if not it will be prefixed by "$(arg camera)".
Probably is a bug in the nodelet manager: https://github.com/ros/nodelet_core/issues/7 -->
<arg name="scan_topic" value="/scan" />
</include>
<!-- 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>
增加hokuyo_gmapping.launch.xml文件,执行gmapping建图
[java] view
plain copy
roscd turtlebot_navigation
touch launch/includes/gmapping/hokuyo_gmapping.launch.xml
rosed launch/includes/gmapping/hokuyo_gmapping.launch.xml
输入内容:
[java] view
plain copy
<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底盘
[java] view
plain copy
roslaunch turtlebot_bringup minimal.launch
启动gmapping
[java] view
plain copy
roslaunch turtlebot_navigation hokuyo_gmapping_demo.launch
打开rviz查看地图
[java] view
plain copy
roslaunch turtlebot_rviz_launchers view_navigation.launch
点击rviz的2D Navigation按钮,在建好的地图上左键单击并拖动,Turtlebot会自己进行导航,这时如果你突然出现在Turtlebot前面,它会重新规划路线饶过你
或者可以键盘控制Turtlebot建图
[java] view
plain copy
roslaunch turtlebot_teleop keyboard_teleop.launch
保存地图
[java] view
plain copy
mkdir -p ~/map
rosrun map_server map_saver -f ~/map/hokuyo_gmapping
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
这篇文章主要介绍如何使用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
sudo apt-get update
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
sudo apt-get install ros-indigo-kobuki ros-indigo-kobuki-core
rosrun kobuki_ftdi create_udev_rules
接下来需要安装kinect驱动,推荐使用freenect:
[cpp][/b] view
plain copy
sudo apt-get install libfreenect-dev
sudo apt-get install ros-indigo-freenect-launch
设置你的3D sensor为kinect,设置完需要关闭当前窗口,打开新的terminal使之生效。
[java] view
plain copy
echo "export TURTLEBOT_3D_SENSOR=kinect" >> .bashrc
下载雷达驱动包和导航包,并编译:
[java] view
plain copy
mkdir -p ~/turtlebot_ws/src
cd ~/turtlebot_ws/src
git clone https://github.com/ncnynl/hokuyo_node.git
git clone https://github.com/turtlebot/turtlebot_apps
cd ~/turtlebot_ws
catkin_make
在~/.bashrc最后一行添加(可以使用命令 sudo vi ~/.bashrc, vi的使用方法得自己百度了):
source /home/ubu/turtlebot_ws/devel/setup.bash
使刚才的修改生效:
[java] view
plain copy
source ~/.bashrc
下面需要配置你的激光雷达Hokuyo,运行命令:
[java] view
plain copy
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
sudo usermod -a -G dialout 用户名
使UDEV配置生效:(使串口的默认访问权限生效,需要重启机器)
[java] view
plain copy
sudo service udev reload
sudo service udev restart
创建launch文件:
复制hokuyo_node的hokuyo_test.launch到hokuyo_laser.launch,并增加TF定义
[java] view
plain copy
roscd turtlebot_navigation
mkdir -p laser/driver
sudo cp ~/turtlebot_ws/src/hokuyo_node/hokuyo_test.launch laser/driver/hokuyo_laser.launch
打开hokuyo_laser.launch,并修改
[java] view
plain copy
rosed turtlebot_navigation hokuyo_laser.launch
内容如下:
[java] view
plain copy
<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>
增加hokuyo_gmapping_demo.launch文件,用于启动gmapping.
[java] view
plain copy
roscd turtlebot_navigation
touch launch/hokuyo_gmapping_demo.launch
rosed launch/hokuyo_gmapping_demo.launch
内容如下:
[java] view
plain copy
<launch>
<!-- 3D sensor -->
<arg name="3d_sensor" default="$(env TURTLEBOT_3D_SENSOR)"/> <!-- r200, kinect, asus_xtion_pro -->
<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" />
<!-- We must specify an absolute topic name because if not it will be prefixed by "$(arg camera)".
Probably is a bug in the nodelet manager: https://github.com/ros/nodelet_core/issues/7 -->
<arg name="scan_topic" value="/scan" />
</include>
<!-- 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>
增加hokuyo_gmapping.launch.xml文件,执行gmapping建图
[java] view
plain copy
roscd turtlebot_navigation
touch launch/includes/gmapping/hokuyo_gmapping.launch.xml
rosed launch/includes/gmapping/hokuyo_gmapping.launch.xml
输入内容:
[java] view
plain copy
<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底盘
[java] view
plain copy
roslaunch turtlebot_bringup minimal.launch
启动gmapping
[java] view
plain copy
roslaunch turtlebot_navigation hokuyo_gmapping_demo.launch
打开rviz查看地图
[java] view
plain copy
roslaunch turtlebot_rviz_launchers view_navigation.launch
点击rviz的2D Navigation按钮,在建好的地图上左键单击并拖动,Turtlebot会自己进行导航,这时如果你突然出现在Turtlebot前面,它会重新规划路线饶过你
或者可以键盘控制Turtlebot建图
[java] view
plain copy
roslaunch turtlebot_teleop keyboard_teleop.launch
保存地图
[java] view
plain copy
mkdir -p ~/map
rosrun map_server map_saver -f ~/map/hokuyo_gmapping
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
相关文章推荐
- Turtlebot(Kuboki)+Kinect+Huyoko建立gmapping地图,实现自主避障导航
- Ruby on Rails,通过建立页面导航链接实现页面跳转
- iOS6地图“查看路线”、导航功能的实现
- Ubuntu14.04建立WiFi热点
- ROS 学习系列 -- RViz 实时观测机器人建立导航2D封闭空间地图过程 (SLAM)
- Ubuntu 14.04 + xRDP + Xfce 实现Windows远程桌面连接
- 用AE实现google earth的导航与跟踪条控制地图比例
- 在Ubuntu 14.04平台上利用Intel的GPU实现硬件加速--基于VAAPI
- ubuntu 14.04 建立wifi热点
- ubuntu14.04搭建freeradius服务器实现无线ap认证
- Windows 7/8/8.1 硬盘安装法实现 ubuntu 14.04 双系统
- 在iPhone中直接调用系统自带的地图程序实现导航
- ubuntu 14.04链接无线路由,建立无线和有线链接
- 关于微信LBS 升级版后SOSO 地图用JAVA 实现导航功能
- Ubuntu14.04建立WiFi热点
- ubuntu 10.04建立源码树,实现最简单的驱动模块
- 在Asp.net MVC模式下实现网站地图导航
- 通过kinect实现3d扫描建立打印模型(processing、skanect、ReconstructMe)
- ubuntu14.04 建立ftp服务器
- ThinkPad T410S 上 Ubuntu 14.04 实现指纹识别登录