做SLAM的硬件要求(不一定是必须的,看包和库的依赖):
(1):差分轮式机器人,可以使用Twist速度指令控制,需要线速度和角速度。
(2):需要激光雷达、深度摄像头等测距设备,可以获取环境深度信息。
(3):最好使用正方形和圆形的机器人,其他外形的机器人虽然可以正常使用,但是效果可能不佳。机器人的深度信息里面需要包含什么内容。可以通过以下命令来对其进行查看
rosmsg show sensor_msgs/LaserScan

最上面三行包括序列、时间戳、坐标系。下面的话就是一些关于激光雷达的数据:angle_min:可检测范围的起始角度。angle_max:可检测范围的终止角度,与angle_min组成激光雷达的可检测范围。像从-180度到+180度就是360度的范围。angle_increment:相邻数据帧之间的角度步长。time_increment:采集到相邻数据帧之间的时间步长,当传感器处于相对运动状态时进行补偿使用。scan_time:采集一帧数据所需的时间。range_min:最近可检测深度的阈值。range_max:最远可检测深度的阈值。ranges:一帧深度数据的存储数组(深度数据的具体内容)。
最后面的intensities代表的是激光的反光属性,等等的这样一些性质。一般的低成本雷达在强度这一块是用不到的。高端的雷达才会使用它做辅助判断。
除了激光雷达,深度摄像头也是可以采集深度信息的,像kinetic这样的摄像头就可以。在ros里面depthimage_to_laserscan功能包就能把三维点云数据转换成二维的激光雷达数据。但是深度摄像头的精度不高。机器人里面的里程计信息
你可以通过下面的命令查看一下里程计信息:
rosmsg show nav_msgs/Odometry

里面主要包含两个内容,一个是pose,一个是twist。
pose:机器人当前位置坐标,包括机器人的XYZ三轴位置与方向参数,以及用于校正误差的协防差矩阵。里面有位置信息position和姿态信息orientation。
twist:机器人当前的运动状态,包括XYZ三轴的线速度与角速度,以及用于校正误差的协防差矩阵。
在这里的话,我们主要以仿真环境来演示效果:
代码的包在教学视频的文件里面有,我们打开一个终端运行以下命令:
roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch
运行成功之后会打开下面这样的一个界面:

接下来我们看一下一些SLAM的功能包:Gmapping功能包:
基于激光雷达的功能包,采用Rao-Blackwellized粒子滤波算法创建二维栅格地图。调用gmapping功能包的时候需要给它三个信息的输入:(1):深度信息。(2):IMU信息。(3)里程计信息。gmapping的算法来自于OpenSlam的开源算法。输出是nav_msgs/OccupancyGrid这样的栅格地图。
我们可以通过以下方式对其进行安装:
sudo apt-get install ros-kinetic-gmapping

gmapping里面有一个核心的节点,我们要使用gmapping建图的话我们就需要去启动这个核心的节点。启动的方式是使用.launch文件来启动的。因为这里面有很多参数需要去配置。改变这个参数能够改变我们建图的效果。但是如果我们只是为了能够使用建图功能的话,我们可以去参考turtlebot机器人的建图功能就可以了。我们可以去roswiki上面看一下功能包的使用方法。
输入以下命令:
roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch
roslaunch mbot_navigation gmapping_demo.launch
roslaunch mbot_teleop mbot_teleop.launch

建图完成之后效果如下:

我们可以通过下面这个命令来将地图保存:
rosrun map_server map_saver -f cloister_gmappingg

可能会没有安装功能包,所以我们需要安装功能包:
git clone https://github.com/ros-planning/navigation.git
之后回到工作空间目录下面catkin_make。
可能会需要依赖:
sudo apt-get install ros-kinetic-tf2-sensor-msgs
这种安装方式不会使得你出现以下这种错误:
[rosrun] Couldn't find executable named map_save below /opt/ros/kinetic/share/map_server
保存之后会有两个文件:

第一个是一张图片,第二个是一些说明文件:

第一个是图片的名称,第二个是图片的分辨率,0.05米,origin代表的是机器人的位置,下一次导航的时候可以把机器人放到这个位置。Hector_slam功能包:
基于激光雷达建图,采用高斯牛顿方法,是二维栅格地图,不需要里程计数据,输出地图话题。可以通过以下命令对其进行安装:
sudo apt-get install ros-kinetic-hector-slam

接下来我们来启动演示一下:
roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch
roslaunch mbot_navigation hector_demo.launch
roslaunch mbot_teleop mbot_teleop.launch

效果如下:

但是这种方法如果机器人运动的速度过大的话就会使得建图出现偏差。建图过程中特征点比较多的话,建图效果会比较好。Cartographer功能包:
这个功能包是2016年10月5日谷歌开源的基于图网络的优化方法,是一种二维或三维条件下的定位及建图功能,设计的目的是在计算资源有限的情况下,实时获取相对较高精度的2D地图,主要是基于激光雷达,后面会支持更多传感器和机器人平台,同时不断增加新的功能。安装
安装工具:
sudo apt-get update
sudo apt-get install -y python-wstool python-rosdep ninja-build
创建一个名字为google_ws的文件夹作为我们的工作空间:
wstool init src wstool merge -t src https://raw.githubusercontent.com/googlecartographer/cartographer_ros/master/cartographer_ros.rosinstall wstool update -t src
上面第二步可能会有网络问题,我们可以到src目录下面ctrl+h打开隐藏文件夹,修改里面第三个包的下载地址: https://github.com/ceres-solver/ceres-solver.git

下载功能包:
src/cartographer/scripts/install_proto3.sh

lsb_release -a
查看自己的ubuntu版本号:
rosdep update rosdep install --from-paths src --ignore-src --rosdistro=${ROS_DISTRO} -y --os=ubuntu:xenial
这里我之前由于没有加后面这个os报错如下,加了之后就没有了:
ERROR: the following packages/stacks could not have their rosdep keys resolved
to system dependencies:
cartographer: No definition of [eigen] for OS version []
ceres-solver: No definition of [eigen] for OS version []
编译功能包:
catkin_make_isolated --install --use-ninja source install_isolated/setup.bash #当前终端有效

接下来我们可以演示一下效果:
下载 2D SLAM Demo:
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/cartographer_paper_deutsches_museum.bag
启动 2D SLAM Demo:
roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}/Downloads/cartographer_paper_deutsches_museum.bag
下载 3D SLAM Demo:
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_3d/with_intensities/b3-2016-04-05-14-14-00.bag
启动 3D SLAM Demo:
roslaunch cartographer_ros demo_backpack_3d.launch bag_filename:=${HOME}/Downloads/b3-2016-04-05-14-14-00.bag
下载PR2 Demo:
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/pr2/2011-09-15-08-32-46.bag
启动PR2 :roslaunch cartographer_ros demo_pr2.launch bag_filename:=~/Downloads/2011-09-15-08-32-46.bagORB_SLAM功能包
基于特征点的实时单目SLAM系统,实时解算摄像机的移动轨迹,构建三维点云地图,不仅适用与手持设备获取的一组连续图像,也可以应用于汽车行驶过程中获取的连续图像。
安装:
安装工具&下载源码:
sudo apt-get install libboost-all-dev libblas-dev liblapack-dev
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
安装eigen3.2
去官网下载:http://eigen.tuxfamily.org/index.php?title=Main_Page
解压源码包,并进入目录:
mkdir build
cd build
cmake ..
make
sudo make install
编译安装Pangolin
sudo apt-get install libglew-dev
sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
cmake --build .
编译g2o:
cd ~/ORB_SLAM2/Thirdparty/g2o/
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
编译DBoW2:
cd ~/ORB_SLAM2/Thirdparty/DBoW2/
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
编译ORM_SLAM:
cd ~/ORB_SLAM2
chmod +x build.sh
./build.sh
在make -j4这一步的时候,如果你遇到了error: ‘usleep’ was not declared in this scope,这种问题的话,你需要找到出错的文件,添加头文件:
#include <unistd.h>
Examples/Monocular/http://mono_euroc.cc Examples/Monocular/http://mono_kitti.cc Examples/Monocular/http://mono_tum.cc Examples/RGB-D/http://rgbd_tum.cc Examples/Stereo/http://stereo_euroc.cc Examples/Stereo/http://stereo_kitti.cc src/http://LocalMapping.cc src/http://LoopClosing.cc src/http://System.cc src/http://Tracking.cc src/http://Viewer.cc
爆炸,我之前装的是opencv3,装不上去,不想卸载,也不想装两个版本opencv,以后再说。https://github.com/raulmur/ORB_SLAM2

opt文件夹下没有ros_ubuntu16.04下ROS操作系统学习笔记(二)相关推荐

  1. ekf pose使用方法 ros_ubuntu16.04下ROS操作系统学习笔记(二)

    做SLAM的硬件要求(不一定是必须的,看包和库的依赖): (1):差分轮式机器人,可以使用Twist速度指令控制,需要线速度和角速度. (2):需要激光雷达.深度摄像头等测距设备,可以获取环境深度信息 ...

  2. 前端中怎么把网页多个文件夹的内容整合成一个_web前端学习笔记

    web前端的定义:是面向用户(浏览者)的互联网技术统称.主要包括Web界面的结构.Web界面的外观视觉表现以及Web界面的交互实现. HTML结构语言:超文本标记语言. Web前端的分类:前端设计和前 ...

  3. ROS中的roslaunch命令和launch文件(ROS入门学习笔记四)

    ROS中的基本对象和概念学习笔记(ROS入门学习笔记一) ROS中创建工作区和包(ROS入门学习笔记二) ROS功能包中CMakeLists.txt的说明(ROS入门学习笔记三) 1.roslaunc ...

  4. qt 移动文件夹到另一目录下

    qt 移动文件夹到另一目录下 #include <QDir>//删除文件夹 bool delDir(const QString &path) {if (path.isEmpty() ...

  5. python判断一个文件夹里面是否为空_Python碎片化学习教程 @8. 判断目标文件夹是否为空...

    代码功能:判断目标文件夹是否为空 代码如下:import os  # 导入负责处理操作系统相关事务的os模块 tar_dir = "D:\\666"  # 指定目标文件夹 if l ...

  6. SEO学习笔记二:在搜索引擎竞价排名环境下,个人网站将何去何从?

    本文首发于「妙蛙种子前端」博客,欢迎关注- 早期的搜索引擎,大家都在一个相对公平的规则内玩耍:你的内容够好,网站体验更优秀,在搜索引擎中的排名一般都会比较高. 因为搜索引擎能便捷的为我们定位到精准的内 ...

  7. linux将文件夹树状列出,Linux下用tree命令列出树形图

    命令用法: tree 参数: -a 显示所有文件和目录. -A 使用ASNI绘图字符显示树状图而非以ASCII字符组合. -C 在文件和目录清单加上色彩,便于区分各种类型. -d 显示目录名称而非内容 ...

  8. shell访问php文件夹,Shell获取某目录下所有文件夹的名称

    Shell获取某目录下所有文件夹的名称以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Shell获取某目录下所有文件夹的 ...

  9. linux temp文件夹在哪_Win10系统下使用linux命令的方法

    Win10系统是目前主流的操作系统之一,其功能十分强大,而在Windows10系统下也是能够使用linux命令,只是不少用户不知道而已.那么如何在Win10系统下使用linux命令?下面小编分享一下W ...

最新文章

  1. Java中的包,类的导入,静态导入
  2. activemq 连接mysql_ActiveMQ 内存配置,ActiveMQ 和mysql
  3. Win10 安装msi 提示2502、2503的错误代码 -- 命令提示符(管理员) -- msiexec /package...
  4. Leetcode 62. Unique Paths
  5. leetcode -- 279. Perfect Squares
  6. [LintCode] Minimum Size Subarray Sum 最小子数组和的大小
  7. 阿姆斯特朗数 matlab,数学实验报告
  8. 前端学习(771):小结
  9. 社区出入登记源码1.0.53完整安装包+小程序前端+公众号
  10. Codeforces Round #419 Div. 1
  11. VSCode设置中文语言
  12. android判断某文件下是否you_Android_判断文件是否存在并创建代码
  13. 88se9230 linux raid,Marvell发布全球首颗PCI-E 2.0 x2 SATA 6Gbps主控
  14. 网络爬虫之正则表达式
  15. 学以致用——Excel报表自动化方案 (Automation solution of complicated manual Excel Report)
  16. Selenium:元素判断
  17. excel 根据某单元格的值设置整行颜色(条件格式)
  18. S5PV210 对电源、地,DQ, DQM, DQS 信号的布线向导
  19. 垂死挣扎还是涅槃重生 -- Delphi XE5 发布会归来感想
  20. WDF开发USB设备驱动教程(2)

热门文章

  1. WDS 自动化部署安装 win2008 服务器实验
  2. Win7下配置Apache+PHP+Mysql环境
  3. decimal在存储过程和C#中的应用
  4. 【直播讲座】用友摩天联合光环国际,听国学学项目管理
  5. Docker 镜像之存储管理
  6. MySQL ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)的真正原因...
  7. 对话Linus Torvalds:大多黑客甚至连指针都未理解
  8. WCF 第八章 安全 基于证书的加密
  9. 【实用】ABAP ALV单元格修改信息提示
  10. 【常识】高尔夫计分规则