本文主要是介绍UST-10LX使用hector_slam构建地图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
简述:
本文讲述的是hokuyo UST-10LX在Ubuntu 14.04.5 ROS Indigo下进行实验,然后通过hector_slam构建地图。
slam(Simultaneous Localization andMapping,同步定位与建图)。
ros 中常用的2d slam 算法主要有 gmapping和hector_slam ,其中 hector_slam是个性能非常好的算法。
hector_slam通过最小二乘法匹配扫描点,且依赖高精度的激光雷达数据,但是不需要里程计。
运行环境:
系统:Ubuntu14.04.5 amd64(下载)
ROS:ROS Indigo Igloo
UST-10LX(以太网接口) IP地址:192.168.211.221
构建地图:hector_slam
其中,ROS 安装及配置请参考ROS 安装和配置;hokuyo_node 相关资料请参考:hokuyo_node;
1、 安装节点包
如果用的是UST-10LX(以太网接口),需要下载urg_node 包
$ sudo apt-get install ros-indigo-urg-node
2、 Ubuntu ping通激光雷达
请参考在ROS中使用Hokuyo激光雷达UST-10LX和UST-30LX 中的2 Ubuntu ping通激光雷达。
3、创建catkin工作空间
创建方法请参考ROS Indigo安装和配置 中3 创建ROS工作环境。
即:
$ source /opt/ros/indigo/setup.bash $ mkdir -p ~/catkin_ws/src //连续创建两个目录 $ cd ~/catkin_ws/src //进入目录 $ catkin_init_workspace //初始化工作空间创建CMakeLists.txt $ cd ~/catkin_ws/ $ catkin_make
也可使用已有的catkin工作空间 。
4、下载并编译hector_slam_example
1 > 下载hector_slam_example
$ cd ~/catkin_ws/src $ git clone https://github.com/DaikiMaekawa/hector_slam_example
也可以在百度云盘下载:hector_slam_example (密码:192o)
将对应的launch文件中的ip_address改为 “192.168.211.221”
类型 launch文件 openni
hector_openni.launch
UTM-30LX
hector_hokuyo.launch
UST-10LX/20LX hector_hokuyo_eth.launch
2 > 编译 hector_slam_example
$ cd ~/catkin_ws $ catkin_make --pkg hector_slam_example
编译完成后,需要运行以下指令,这样便可以通过包名来运行程序了。
$ source devel/setup.bash
或
$ echo "source /home/hebbe/catkin_ws/devel/setup.bash" >> ~/.bashrc $ source ~/.bashrc
3 > 将 hector_slam_example 路径添加到ros包的ROS_PACKAGE_PATH中
ROS_PACKAGE_PATH=/home/hebbe/catkin_ws/src/hector_slam_example:$ROS_PACKAGE_PATH
注意,如果你关闭了终端,或者新建一个终端,可能需要重新执行一下这个命令。
echo $ROS_PACKAGE_PATH //查看路径
5、启动构建地图
roslaunch hector_slam_example hector_hokuyo_eth.launch
只需要移动平台就可以去构建地图。
如果出现以下错误:
则需要在该终端先输入指令:
$ source devel/setup.bash
6、保存地图
使用map_server包的map_saver保存地图到当前目录下,地图名为map.pgm。
$ rosrun map_server map_saver
可以用任何图像浏览器(gimp,eog,gthumb等)查看地图;
如果输入保存地图指令时出现以下错误:
[rospack] Error: package 'map_server' not found
则先输入:
$ source /opt/ros/indigo/setup.bash $ source /home/hebbe/catkin_ws/devel/setup.bash
若问题依然无法解决,
$ rospack list
查看是否有map_server 包,如果没有,则安装map-server:
$ sudo apt-get install ros-indigo-map-server
然后问题就可以完美解决了。
7 、launch文件解析
在ROS应用中,每个节点通常有许多参数需要设置,为了方便高效操作多个节点,可以编写launch文件。
launch文件是 XML 格式标记文本,后缀名无关紧要,一般为.launch/.xml/.test/无后缀
1 > launch文件启动
roslaunch工具是ros中python实现的程序启动工具,通过读取launch文件中的参数配置、属性配置等来启动一系列节点。
$ roslaunch package_name file.launch
语法:roslaunch [options] [package] <filename> [arg_name:=value...]roslaunch [options] <filename> [<filename>...] [arg_name:=value...]
2 > launch文件格式
launch 文件一般格式如下:
<launch><node .../><rosparam ..../><param .../><include .../><env .../><remap .../><arg.../> </launch>
最简单的配置:
<launch><node name="you_define_node_name" pkg="package_name" type="exe_name" /> </launch>
3 > <node> 参数
<node>常用属性tag:
pkg ="pkg_name" 包名
type ="exe_name" 节点类型,即编译生成的可执行文件
name ="node_name"节点名称,自定义但不能重复
args ="arg1 ..." 传递节点的参数列表,(可选)
respawn ="true" 如果节点退出,自动重启;default:false,(可选)
output ="screen" 标准输出/标准错误输出重定向屏幕,log重定向log文件,default:log,(可选)
ns = “foo” 在foo命名空间启动节点,(可选)
required ="true" 如果节点退出,杀死全部launch进程(可选)
launch-prefix ="prefix arguments" 前置的参数,可以使用其他工具如gdb,valgrind等(可选)
4 > <rosparam> 操作yaml 文件
<rosparam>操作参数
command="load|dump|delete"(默认load)
file="$(findpkg-name)/path/foo.yaml"(load或dump命令)yaml文件的名字
param="param-name"参数名
5 > <param>定义一个设置在参数服务器的参数,它可以添加到<node>中
<param>参数
name="namespace/name"
value="value"(可选)如果省略这个参数,则应指定一个文件(binfile/textfile)或命令
type="str|int|double|boot"(可选)指定参数的类型
textfile="$(find pkg-name)/path/file"(可选)
binfile="$(find pkg-name)/path/file"()
command="(find pkg-name)/exe '$(find pkg-name)/arg.txt'"(可选)exe是可执行文件(cpp、py),arg.txt是参数文件
6 > <include>在当前launch文件中调用另一个launch文件
<include>参数
file="$(find pkg-name)/path/launch-file.launch"
7 > <env>设置节点的环境变量
<env>参数
name="environment-variable-name"
value="environment-variable-value"
8 > <remap>将一个参数名映射为另一个名字
<remap>参数
from="original-name"
to="new-name"
9 > <arg>定义一个局部参数,该参数只能在一个launch文件中使用
<arg>参数
<arg name="foo"/>声明一个参数foo,后面需要给它赋值
<arg name="foo" default="1"/>声明一个参数foo,如不赋值取默认值
<arg name="foo" value="bar"/>声明一常量foo,它的值不能修改
另:ROS与激光雷达教程
这篇关于UST-10LX使用hector_slam构建地图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!