简单来说,SLAM就是在GPS无法使用的地方,对机器人进行定位定姿,建造增量式地图,实现机器人的自主定位和导航。就像是一个盲人,在未知环境中,用自己的双手探索环境,并不断矫正自己心中对外界环境构建的地图,这就是SLAM算法的主要过程。
针对激光雷达,ROS在sensor_msgs功能包中定义专用数据结构——LaserScan,用于存储激光消息。激光雷达有一些消息的具体定义(见217页)。
如果没有激光雷达,有RGB-D深度摄像头也行,但是深度摄像头得到的数据是三维点云数据,而ROS很多功能包需要的输入是二维激光数据,我们需要调用相关的功能包将数据转换。
roscore
rosrun gazebo_ros gazebo
rostopic list
成功则出现以下代码:
~$ rostopic list
/clock
/gazebo/link_states
/gazebo/model_states
/gazebo/parameter_descriptions
/gazebo/parameter_updates
/gazebo/set_link_state
/gazebo/set_model_state
/rosout
/rosout_agg
模型下载地址:
https://bitbucket.org/osrf/gazebo_models/downloads/
https://github.com/osrf/gazebo_models
将下载好的模型放在本地文件夹~/.gazebo/models/
sudo cp -r gazebo_models-master /home/wmj/.gazebo/models
我们发现,将模型文件夹复制到目标路径,在GAZEBO中并未找到该模型文件夹,我们进入目标路径,注意使用控制+h键可以将隐藏文件显示。
这是我们之前就与到过的权限问题,给他权限就好了,记得要获取ROOT权限:
chmod +x gazebo_models-master
我们发现这个命令是不行的,这个应该是对文件给予权限的,下面这个指令是对文件夹给予权限:
chmod 777 gazebo_models-master
我们发现,现在可以进入模型文件夹,但是模型子文件夹仍然不可用,有没有什么办法可以批量给予权限呢?
先进入文件后输入命令:sudo chmod 777 -R *
(其中的-R是递归处理,*代表所有文件)
或sudo chmod 777 -R /home/abc/文档/*
此命令不用进入文件夹中处理,“/home/abc/文档/“是文件夹路径。
再介绍一下linux的权限设置:
sudo chmod 600 ××× (只有所有者有读和写的权限)
sudo chmod 644 ××× (所有者有读和写的权限,组用户只有读的权限)
sudo chmod 700 ××× (只有所有者有读和写以及执行的权限)
sudo chmod 666 ××× (每个人都有读和写的权限)
sudo chmod 777 ××× (每个人都有读和写以及执行的权限)
其中×××指文件名(也可以是文件夹名,不过要在chmod后加-ld)。
整个命令的形式是
sudo chmod -(代表类型)×××(所有者)×××(组用户)×××(其他用户)
三位数的每一位都表示一个用户类型的权限 设置。 取值是0~7,即二进制的[000]~[111]。
这个三位的二进制数的每一位分别表示读、写、执行权限。
如000表示三项权限均无,而100表示只读。这样,我们就有了下面的对应:
0 [000] 无任何权限
4 [100] 只读权限
6 [110] 读写权限
7 [111] 读写执行权限
再来一点chmod命令的帮助(从终端输入chmod --help就可以后到帮助):
-c, --changes 类似 --verbose,但只在有更改时才显示结果
--no-preserve-root 不会对根目录给予特别对待 (默认)
--preserve-root 对根目录进行递归操作时会失败
-f, --silent, --quiet 去除大部份的错误信息
-v, --verbose 处理任 何文件都会显示详细信息
--reference=参考文件 使用<参考文件>的模式,而非自行指定权 限模式
-R, --recursive 以递归方式更改所有的文 件及子目录
--help 显示此帮助信息并离开
--version 显示版本信息并离开
到这里,我们成功获取了该文件夹下所有文件夹的权限。
应该注意,不能将整个模型文件夹直接放入其中,否则系统会不认这些模型,和功能包类似,模型文件也不可以嵌套放置,需要平行放置在模型文件根目录下。
我们可以看到,这里成功的出现了我们下载的所有模型文件:
手绘地图,选中Edit==》Building Editor
在Edit中找到Building Editor,或者直接Ctrl+B,都能打开界面
左侧有绘图选项,我们可以在里面进行图形绘制:
之后点击左上角File进行保存,路径自己选择,保存后会在路径所在位置生成一个room1文件夹。
我们将gazebo关闭并再次打开。在Insert中选择自己已经下载好的模型添加到环境中,就可以保存了。
如图,我们在房子边上添加了一个路障,保存的时候将文件后缀改成.world选择好路径,之后就可以在roslaunch中加载打开此地图环境了。world路径:
building_editor_models/worlds/cloister.world
###我们使用launch文件的方式登录刚刚搭建好的仿真环境:
roslaunch pkg-name launch-file-name
这里需要我们之前下载好的代码文件,路径:
mrobot_gazebo/launch/mrobot_laser_nav_gazebo.launch
roslaunch mrobot_gazebo mrobot_laser_nav_gazebo.launch
这里遇到了问题:将launch文件中的模型文件路径改为我们新建的模型路径,启动失败。
我更改完路之后忘记编译了,问题应该就是处在这里,我们重新更改,编译试一下:
还是不行。
我大概知道是怎么回事了,代码空间中有一个worlds文件夹,里面放置了世界模型文件,我们没有将自己创造的文件放进去编译,我们将文件放进去后再行编译:
果然,文件打开成功,基础了解阶段告一段落,后续我们再进行学习。