做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

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

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

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

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

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

  3. Ubuntu16.04下ROS Kinetic的安装(2022)

    文章目录 Ubuntu16.04下ROS Kinetic的安装(2022) 一.Ubuntu16.04配置 二.ROS Kinetic安装过程 1.软件中心配置 2.ROS的下载安装 2.1添加源和密 ...

  4. ROS系列——Ubuntu18.04下ros Melodic安装mavros过程中遇到问题及解决-定期更新版

    ROS系列--Ubuntu18.04下ros Melodic安装mavros过程中遇到问题及解决-定期更新版 问题 问题一:运行 wstool update -t src -j8 时,出错如下: 问题 ...

  5. ROS机器人操作系统学习笔记(三)ROS通信架构

    ROS机器人操作系统学习笔记(三)ROS通信架构 ROS的通信架构是ROS的灵魂,也是整个ROS正常运行的关键所在.ROS通信架构包括各种数据的处理,进程的运行,消息的传递等等.本章主要介绍了通信架构 ...

  6. ROS学习笔记二:探索ROS文件系统

    ROS学习笔记二:探索ROS文件系统 ROS针对自己文件的特性,具有一些自己的工具命令,当针对ROS文件进行操作的时候是非常方便的.这些命令和ubuntu系统原有的命令相似但却不同,单独针对ROS文件 ...

  7. Mr.J-- jQuery学习笔记(二十八)--DOM操作方法(添加方法总结)

    Table of Contents appendTo appendTo(source, target) 源代码 append prependTo ​ ​ ​ ​ prependTo源码 prepend ...

  8. python3.4学习笔记(二十一) python实现指定字符串补全空格、前面填充0的方法

    python3.4学习笔记(二十一) python实现指定字符串补全空格.前面填充0的方法 Python zfill()方法返回指定长度的字符串,原字符串右对齐,前面填充0. zfill()方法语法: ...

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

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

最新文章

  1. python之 数据类型判定与类型转换
  2. matlab中欠定方程组超定方程组_七年级下册第10章:认识二元一次方程组(1课时)...
  3. linux的基础知识——线程
  4. 苹果手机更改照片大小kb_苹果手机照片视频删除了怎样恢复?专业人士建议你这样做...
  5. android 应用监听home键,Android 监听Home键
  6. asp.net网站的配置文件
  7. python sys模块详解_python之sys模块详解
  8. BSD/MIT/Apache许可证印象尚可
  9. jQuery - 按回车键触发跳转
  10. 算法基础--基本排序算法总结·
  11. delphi win64 DEBUG不能进预设断点的问题
  12. SQL server 创建数据库代码,非常详细
  13. 单片机怎么通过按键控制计时器的开始和停止_《搞机作战室》机械师PX780控制中心软件使用教程...
  14. ImageMagick convert命令
  15. 自适应辛普森学习笔记
  16. 各种颜色十六进制代码表
  17. 带有Arduino的WS2812B可寻址RGB LED灯条指南
  18. chrome浏览器无法访问此网站并且响应时间长的方法
  19. python中的screen blit_什么是python中的surface.blit()函数?它有什么作用?这个怎么运作?...
  20. c#-中国象棋:画棋盘

热门文章

  1. 直接插入排序算法实现思想个人理解
  2. 10中文显示都是问号_CAD字体出现问号乱码的解决方法
  3. ICCV 2021 | ARCH++: 可直接用于动画的穿衣服人体重建
  4. 多视图立体几何PatchMatchStereo:DSI与Cost Volume
  5. 3D目标检测深度学习方法之voxel-represetnation内容综述(一)
  6. Drug Discovery Today | 频繁命中化合物机制探究:PAINS规则的局限性
  7. Chemistry.AI | 基于线性回归预测分子特性
  8. python(matplotlib)画柱状图(1)
  9. pyhton 中的字符串切片问题
  10. php嵌入html还是html嵌入php,php嵌入html有哪几种方法