ROS中阶笔记(七):机器人SLAM与自主导航—SLAM功能包的使用(下)

简介: ROS中阶笔记(七):机器人SLAM与自主导航—SLAM功能包的使用

2.2.4 启动hector_slam演示


分别开启三个终端运行以下命令:

$ roslaunch mbot_gazebo mbot_laser_nav_gazebo.launch     # 动一个gazebo仿真节点
$ roslaunch mbot_navigation hector_demo.launch     # hector建图节点
$ roslaunch mbot_teleop mbot_teleop.launch          # 启动一个键盘控制节点

第一个节点启动了gazebo仿真,它使用仿真的雷达给出了一个scan扫描数据;而后下面的节点订阅了这个数据并进行处理,最后得到一个二维栅格地图。


hector这个算法有一个很大的问题,就是在于它的自定位,它利用自身的激光雷达数据进行定位,如果上一次的扫描数据与下一次的扫描数据基本一致的话,它就很难确定自己是否在运动,例如当我给一个足够大的空间,这里有一条没有任何特征点的长廊,长度远远超过激光扫描的最大距离时,hector基本就失去了建图的能力。


2.3 cartographer


2.3.1 cartographer功能包


2016年10月5日,谷歌开源

基于图网络的优化方法

二维或三维条件下的定位及建图功能

设计目的是在计算资源有限的情况下,实时获取相对较高精度的2D地图

主要基于激光雷达

后续会支持更多传感器和机器人平台,同时不断增加新的功能。


2.3.2 cartographer安装


方法一:(新方法)


sudo apt-get update
sudo apt-get install ros-<your ros version>-cartographer*  # 安装全部关于cartographe


方法二:原来的方法(有好处)


cartographer功能功能包没有集成到ROS的软件源里面,所以需要采用源码编译方式进行安装。为了不与其他安装包冲突,最好为cartographer专门创建一个工作空间,这里我们创建了一个工作空间catkin_google_ws:


1、安装工具:


$ sudo apt-get update
$ sudo apt-get install -y python-wstool python-rosdep ninja-build


2、初始化工作空间:


$ mkdir google_ws            # 创建工作空间,名称为google_ws
$ cd google_ws
$ wstool init src


3、设置下载地址(挂VPN最好)


在新建的工作空间下输入下边指令:


# 如果这一步错误,见下面方法一、方法二
$ wstool merge -t src https://raw.githubusercontent.com/googlecartographer/cartographer_ros/master/cartographer_ros.rosinstall                
$ wstool update -t src


说明:配置Cartographer需要三个包,分别是:Cartographer、Cartographer_ros 和ceres-solver。


方法一:

# 如果无法从google取出代码可以从github提取code:
# 在~/google_ws/src下目录下面ctrl+h打开隐藏文件夹,修改里面第三个包的下载地址: 
https://github.com/ceres-solver/ceres-solver.git

方法二:


# 输入完第一个命令后需要改文件的下载地址,另起终端输入:
$ gedit google_ws/src/.rosinstall
# 将最后一个git来源网址由https://ceres-solver.googlesource.com/ceres-solver.git改为htt


4、安装功能包依赖

# 安装  proto3.sh
进入protobuf的release版本下载页,link:https://github.com/protocolbuffers/protobuf/releases
# 在google_ws目录下
# protobuf的下载太慢,可以在官网手动下载好,放到cartographer目录下(和src同级,具体操作如下)
$ src/cartographer/scripts/install_proto3.sh
# 安装 deb 依赖,出现错误可以忽略 
$ sudo rosdep init
$ rosdep update
$ rosdep install --from-paths src --ignore-src --rosdistro=${kinetic} -y


5、编译功能包


$ catkin_make_isolated --install --use-ninja          # 在google_ws目录下,编译


6、在当前终端,设置环境变量


source install_isolated/setup.bash  #设置环境变量,在当前终端中设置环境变量,只能在当


建议把该句source命令直接写入系统的bashrc环境里


$ vim ./bashrc 
source install_isolated/setup.bash           # 然后把该句source命令添加到最后一行即可


2.3.3 启动2D、3D 演示

# Download the 2D backpack example bag.
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_2d/cartographer_paper_deutsches_museum.bag
# Launch the 2D backpack demo.
roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=${HOME}/Downloads/cartographer_paper_deutsches_museum.bag
# Download the 3D backpack example bag.
wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/backpack_3d/with_intensities/b3-2016-04-05-14-14-00.bag
# Launch the 3D backpack demo.
roslaunch cartographer_ros demo_backpack_3d.launch bag_filename:=${HOME}/Downloads/b3-2016-04-05-14-14-00.bag

启动Revo LDS demo演示


启动PR2 demo填示

wget -P ~/Downloads https://storage.googleapis.com/cartographer-public-data/bags/pr2/2011-09-15-08-32-46.bag
roslaunch cartographer_ros demo_pr2.launch bag_filename:=~/Downloads/2011-09-15-08-32-46.bag


2.3.4 把cartographer功能包运行到自己的机器人上


由于传感器的rostopic不同,我们需要对cartographer订阅的名称进行修改,需要在launch文件中进行修改,但是修改后发现没有任何作用,这是因为修改后需要重新按照上面的流程进行编译安装,这个可能是因为在安装的时候其实已经把launch文件安装到系统中了,所以我们调用的时候还是调用系统中的launch文件


1、配置cartographer节点

mbot_navigation/launch/cartographer_demo_rplidar.launch


2、参数配置

mbot_navigation/config/rplidar.lua


2.3.5 启动cartographer仿真

catkin_make_isolated --install--use-ninja 
roslaunch mbot_ gazebo mbot_laser_nav_gazebo.launch 
roslaunch cartographer_ros cartographer_demo_rplidar.launch 
roslaunch mbot_teleop mbot_teleop.launch


2.4 ORB_SLAM


2.4.1 ORB_SLAM功能包


基于特征点的实时单目SLAM系统

实时解算摄像机的移动轨迹

构建三维点云地图

不仅适用于手持设备获取的一组连续图像,也可以应用于汽车行驶过程中获取的连续图像


Raul Mur-Artal,J.M.M.Montiel和Juan D.Tardos于2015年发表在IEEE Transactions on Robotics上


2.4.2 ORB_SLAM2安装


1、安装工具&下载源码:


sudo apt-get install libboost-all-dev libblas-dev liblapack-dev
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2       # 克隆到home下


2、安装eigen3.2.10

去官网下载:http://eigen.tuxfamily.org/index.php?title=Main_Page
解压源码包,并进入目录:
mkdir build
cd build
cmake ..
make
sudo make install

3、编译g2o

cd ~/ORB_SLAM2/Thirdparty/g2o/
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make

4、编译DBoW2

cd ~/ORB_SLAM2/Thirdparty/DBoW2/
mkdir build && cd build 
cmake .. -DCMAKE_BUILD_TYPE=Release
make

5、编译Pangolin

sudo apt-get install libglew-dev 
git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build && cd build 
cmake ..
cmake --build .

6、编译ORM_SLAM

cd ~/ORB_SLAM2
mkdir build && cd build 
cmake .. -DCMAKE_BUILD_TYPE=Release
make

7、编译功能包(配置ROS环境)

# 首先修改.bashrc文件
$ cd ~
$ gedit .bashrc
# 打开.bashrc文件在最后一行加入
source ~/ORB_SLAM2/Examples/ROS/ORB_SLAM2/build/devel/setup.bash
$ source ~/.bashrc
$ export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/ggk/ORB_SLAM2/Examples/ROS
$ cd ~/ORB_SLAM2
$ chmod +x build_ros.sh
$ ./build_ros.sh


第7步,编译功能包 出现的问题:


aHR0cHM6Ly9naXRlZS5jb20vSVQtY3V0ZS9QaWNiZWQvcmF3L21hc3Rlci9pbWcvaW1hZ2UtMjAyMDA1MjAwMjU4MTE1NjAucG5n.png


解决方法:


修改 ~/ORB_SLAM2/Examples/ROS/ORB_SLAM2/CMakeLists.txt,添加 -lboost_system


aHR0cHM6Ly9naXRlZS5jb20vSVQtY3V0ZS9QaWNiZWQvcmF3L21hc3Rlci9pbWcvaW1hZ2UtMjAyMDA1MjAwMzA0NDc3NjMucG5n.png


2.4.3 启动单目SLAM示例(基于数据包)


KITTI:http://www.cvlibs.net/datasets/kitti/eval_odometry.php,是室外,双目


1、首先下载数据包TUM:这个主要是室内,单目和RGB-D


https://vision.in.tum.de/data/datasets/rgbd-dataset/download#freiburg1_desk


在ORB-SLAM2下新建文件夹Data,把测试的数据解压在这里。

TUM数据集分为相机fr1,fr2,fr3,对应TUM1-3.yaml;

一般第一次测试用fr1/xyz这个数据集,这个就是x,y,z方向来回动,用来检测一下系统出没出什么问题。

其他的数据看名字就知道,比如desk就是在桌子附近来回转,room就是在房间里面扫来扫去。

值得注意的是,运行其他数据集的时候,单目不一定能追踪成功,在台式机上能成功的在虚拟机上也不一定能成功,这就需要我们进行一些调整,比如调整初始化需求数量等,这个关系到对SLAM系统的理解。


2、分别打开三个终端运行下面的三个命令:


$ roscore
# 进入ORB_SLAM2目录下启动Mono功能节点。
# 看到开启的等待数据的可视化建图界面
$ rosrun ORB_SLAM2 Mono Vocabulary/ORBvoc.txt Examples/ROS/ORB_SLAM2/Asus.yaml
# 进入数据包所在目录下,运行命令
# /camera/image_raw表示播放的数据要发布的话题名称,此时可以在界面中看到建图的效果
$ rosbag play rgbd_dataset_freiburg1_desk.bag /camera/rgb/image_color:=/camera/image_raw


PATH_TO_VOCABULARY:算法参数文件,在ORB_SLAM2/Vocabulary中,将其中的压缩包解压即可;


PATH_TO_SETTINGS_FILE:相机参数设置文件,需要对camera进行标定产生,也可以使用ORB_SLAM2/Examples/ROS/ORB_SLAM2中已有的设置文件Asus.yaml。


2.4.4 启动AR示例(基于数据包)

$ roscore
# 进入ORB_SLAM2目录下启动Mono功能节点。
# 看到开启的等待数据的可视化建图界面
$ rosrun ORB_SLAM2 MonoAR Vocabulary/ORBvoc.txt Examples/ROS/ORB_SLAM2/Asus.yaml
# 进入数据包所在目录下,运行命令
# /camera/image_raw表示播放的数据要发布的话题名称,此时可以在界面中看到建图的效果
$ rosbag play rgbd_dataset_freiburg1_desk.bag /camera/rgb/image_color:=/camera/image_raw


点击界面Insert Cube,看到正方形插入进来,展示AR效果


2.4.5 启动ORB_SLAM示例(真实摄像头)

$ roslaunch mbot_navigation usb_cam_remap.launch
# 进入ORB_SLAM2目录下启动Mono功能节点。
# 看到开启的等待数据的可视化建图界面
$ rosrun ORB_SLAM2 Mono Vocabulary/ORBvoc.txt Examples/ROS/ORB_SLAM2/Asus.yaml


2.4.6 启动AR示例(真实摄像头)


摄像头要运动起来,来完成地图构建

$ roslaunch mbot_vision usb_cam_remap.launch
# 进入ORB_SLAM2目录下启动Mono功能节点。
# 看到开启的等待数据的可视化建图界面
$ rosrun ORB_SLAM2 MonoAR Vocabulary/ORBvoc.txt Examples/ROS/ORB_SLAM2/Asus.yaml


3 参考资料

2.3 参考资料


Compiling Cartographer ROS


https://google-cartographer-ros.readthedocs.io/en/latest/compilation.html#building-installation


ROS slam-google cartographer编译和demo运行


https://blog.csdn.net/x_r_su/article/details/52927564


Google Cartographer安装教程


https://blog.csdn.net/xmy306538517/article/details/81455625


ubuntu18.04配置cartographer


https://blog.csdn.net/SimileciWH/article/details/82939752


相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
ROS入门实践
本课程将基于基础设施即代码 IaC 的理念,介绍阿里云自动化编排服务ROS的概念、功能和使用方式,并通过实际应用场景介绍如何借助ROS实现云资源的自动化部署,使得云上资源部署和运维工作更为高效。
目录
相关文章
|
人工智能 开发框架 机器人
AstrBot:轻松将大模型接入QQ、微信等消息平台,打造多功能AI聊天机器人的开发框架,附详细教程
AstrBot 是一个开源的多平台聊天机器人及开发框架,支持多种大语言模型和消息平台,具备多轮对话、语音转文字等功能。
6618 38
AstrBot:轻松将大模型接入QQ、微信等消息平台,打造多功能AI聊天机器人的开发框架,附详细教程
|
传感器 算法 机器人
机器人SLAM建图与自主导航:从基础到实践
通过Gazebo平台和gmapping算法成功生成并保存了一张二维仿真环境地图,为后续的机器人自主导航实验奠定了基础。完整代码及更多细节可参考[GitHub仓库](https://github.com/Jieshoudaxue/ros_senior/tree/main/mbot_navigation/config/move_base)。
2482 23
|
传感器 算法 机器人
机器人SLAM建图与自主导航
前言 这篇文章我开始和大家一起探讨机器人SLAM建图与自主导航 ,在前面的内容中,我们介绍了差速轮式机器人的概念及应用,谈到了使用Gazebo平台搭建仿真环境的教程,主要是利用gmapping slam算法,生成一张二维的仿真环境地图 。我们也会在这篇文章中继续介绍并使用这片二维的仿真环境地图,用于我们的演示。 教程 SLAM算法的引入 (1)SLAM:Simultaneous Localization and Mapping,中文是即时定位与地图构建,所谓的SLAM算法准确说是能实现SLAM功能的算法,而不是某一个具体算法。 (2)现在各种机器人研发和商用化非常火 ,所有的自主机器
845 9
|
自动驾驶 安全 机器人
ROS2:从初识到深入,探索机器人操作系统的进化之路
前言 最近开始接触到基于DDS的这个系统,是在稚晖君的机器人项目中了解和认识到。于是便开始自己买书学习起来,感觉挺有意思的,但是只是单纯的看书籍,总会显得枯燥无味,于是自己又开始在网上找了一些视频教程结合书籍一起来看,便让我对ROS系统有了更深的认识和理解。 ROS的发展历程 ROS诞生于2007年的斯坦福大学,这是早期PR2机器人的原型,这个项目很快被一家商业公司Willow Garage看中,类似现在的风险投资一样,他们投了一大笔钱给这群年轻人,PR2机器人在资本的助推下成功诞生。 2010年,随着PR2机器人的发布,其中的软件正式确定了名称,就叫做机器人操作系统,Robot Op
673 14
|
XML 算法 自动驾驶
ROS进阶:使用URDF和Xacro构建差速轮式机器人模型
【11月更文挑战第7天】本篇文章介绍的是ROS高效进阶内容,使用URDF 语言(xml格式)做一个差速轮式机器人模型,并使用URDF的增强版xacro,对机器人模型文件进行二次优化。
715 6
|
自动驾驶 安全 机器人
ROS2:从初识到深入,探索机器人操作系统的进化之路
【11月更文挑战第4天】ROS2的学习过程和应用,介绍DDS系统的框架和知识。
1233 1
|
传感器 数据可视化 机器人
【ROS速成】半小时入门机器人ROS系统简明教程之可视化系统(三)
半小时入门机器人ROS系统简明教程之可视化系统
937 0
|
机器人
【ROS速成】半小时入门机器人ROS系统简明教程之安装测速(二)
半小时入门机器人ROS系统简明教程之安装测速
945 0
|
5月前
|
数据采集 自动驾驶 机器人
数据喂得好,机器人才能学得快:大数据对智能机器人训练的真正影响
数据喂得好,机器人才能学得快:大数据对智能机器人训练的真正影响
443 1
|
11月前
|
人工智能 自然语言处理 机器人
9.9K star!大模型原生即时通信机器人平台,这个开源项目让AI对话更智能!
"😎高稳定、🧩支持插件、🦄多模态 - 大模型原生即时通信机器人平台"
383 0

热门文章

最新文章