ROS读书记录1:机器人SLAM导航核心技术与实战1


视频参考: 《机器人SLAM导航核心技术与实战》书籍配套教学视频

第0章

在这里插入图片描述在这里插入图片描述在这里插入图片描述

第1章 ROS相关知识

ROS:机器人开发平台
①ROS是一个分布式通信框架(最核心的本质
②ROS是一个开发工具的集台
③ROS是一系列开源软件包

计算机中程序的通信分为:①进程内通信 (程序内通信)
②进程间通信 (程序间通信)
③跨计算机通信 (设备间通信)
ROS=进程通信+网络通信;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ROS中程序=进程=节点;
topic:多对多;解耦合,可以分开设计;
service:多对一;实时性更高;
action:
消息类型分为:标准消息类型和自定义消息类型;标准的消息类型可以参考下面的网站
https://wiki.ros.org/std_msgs
ROS1的特点:中心化,XMLRPC/TCP/UDP传输;
ROS2.0的特点:去中心化,DDS信息传输方式。兼容ROS1,通过Bridge机制。
在这里插入图片描述

第2章 C++编程范式

SLAM选C++不选Python的原因:
实时性方面,C++要优于Python,Python是对程序员友好的编程语言,C++是对计算机友好的编程语言。Python一般用来开发跟实时性无关的功能,比如车道识别/动态物体追踪。
Python可以跨平台,是因为程序运行在Python虚拟机上。
在这里插入图片描述

C++编译

在这里插入图片描述
在这里插入图片描述
静态链接库 libxx.o结尾是.O;动态链接库 libxx.so结尾是.SO;
静态库:会打包所有的二进制文件,这样bin文件较大。缺点:程序升级麻烦。可能只改动了一个小的库,但是要升级所有的文件。
动态库:不用强行打包到一起,程序运行的时候自动查找库。这样就避免重复打包公用库,bin文件会较小。缺点:可能会有库不兼容问题。

g++

示例代码和执行流程

cd dero/
g++ foo.cpp main.cpp -o demo
./demo

makefile

类似一个脚本文件;
示例代码和执行流程

start:
g++ -o foo.o -c foo.cpp
g++ -o main.o -c main.cpp
g++ -o demo foo.o main.o
clean:
rm -rf foo.o main.o

//执行流程
cd demo/
make
make clean
./demo

CMake

比Make更智能,会自动处理引用关系
写在CMakeLists.txt文件中
示例代码和执行流程

cmake_minimum_required (VERSION 2.8]
project(demo)

include_directories("$[PROJECT_BINARY_DIR)")

add_library(foo foo.cPp)  // 编译成库
addLexecutable (demo main.cpp)  // 编译成可执行文件
target_link libraries (demo foo)   // 链接

// 执行流程
cd demo/
cmake .
make
./demo

命名规范

成员变量:m+驼峰;package用大驼峰;

第3章 OpenCv

图像处理是利用计算机对图像进行计算分析的技术,包括数字图像处理和计算机视觉两大领域。
数字图像处理:初级算法,滤波、缩放、分割;
计算机视觉:高级算法,识别、追踪;
常见图片处理库:口OpenCV、Halcon、Matlab、PIL、skimage。
AI图片处理平台:TensorFlow、PyTorch、Caffe。
在这里插入图片描述

OpenCv与PCL

单目相机得到的数据一般是2维的,所以需要OpenCv来进行处理;
双目、RGB-D相机、激光雷达得到的数据一般是3维的,需要PCL来进行点云处理。

第4章 机器人传感器

当环境特征不明显时,例如走廊 空旷房间,SLAM纯定位失效。会结合自身运动状态进行定位

IMU

IMU数据频率很高,而相机、轮式里程计测量频率较低,可以在时间上互补。而IMU又可以和雷达相机等不同数据进行空间上的互补。
良率检测:将一些建模困难的重要误差项作为指标,对指标存在较大误差的IMU模块进行筛除。
内参:IMU测量的都是三维空间量,所以要测量各个轴上的分量,但是IMU制作工艺误差会使得实际的三个轴不是正交的,所以需要轴偏差矩阵来修正。加速度作用在X Y轴上可能会出现换算的不一致性,这种换算不一致性是由敏感器件和AD转换器的固有特性的差异引起的,称为尺度偏差。静止状态IMU在各个轴上的测量值不一定为零,这种是由制造过程中的机械,物理,电子等的固有偏差,称为零偏
外参:IMU与其他设备进行数据融合时,需要知道IMU与其他设备的相对位姿,才能进行数据融合。

数据融合

最常用的是:卡尔曼滤波融合和互补滤波融合。
互补滤波融合是简化版卡尔曼滤波,其中最有名的是Madgwick和Mahony算法;
其中Mahony 简化版 Madgwick。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

激光雷达

多线激光雷达使用PCL库进行点云处理。PCL中包含点云滤波、特征点提取、点云配准、点云分割、点云曲面重建。
单线激光雷达和多线激光雷达都是绕Z轴旋转,校准方法都是采用 纯估计法和里程计辅助法。
为了提高雷达运动畸变校正的效果,可以将里程计辅助法与ICP估计法相结合。先利用轮式里程计对雷达畸变做初步校正,然后将校正后的雷达数据放入ICP算法求位置转移,利用得到的位置转移信息反过来修正里程计的误差,这样就形成了一个迭代闭环。通过不断的迭代,实现对雷达运动的畸变校正。

相机

相机数据发布在<cam_name>/image_raw中。
ROS有自带驱动包usb_cam,但是只能发布相机的image_raw数据,无法发布CameraInfo信息。CameraInfo信息中包含相机的内参校正参数,相机的模式配置和其他硬件信息。
gscam功能包可以发布image_raw和CameraInfo信息。
相机标定采用camera_calibration功能包,标定完的信息保存在~/.ros/camera_info/head_camera.yaml中。

双目相机

双目相机可以当作两个独立的单目相机,也可以将左右图进行拼接然后发布。拼接的图会消耗硬件的计算资源,但是保证了左右图的时间同步,一般都会采用拼接发布。
双目相机标定也采用camera_calibration功能包。

RGB-D相机

在这里插入图片描述
RGB-D相机可以探测深度信息。而且可以通过depthimage_to_laserscan功能包将RGB-D深度图转为激光雷达扫描图。
由于RGB-D相机的视野角度小,激光SLAM建图效果,没有360度扫描的激光雷达建的地图好。所以,通常不用RGB-D相机建图,而只做避障用。我们可以将一定高度范围的深度图压缩成平面图,然后用二维扫描信息进行三维障碍物避障。
在这里插入图片描述

第5章 机器人主机

在这里插入图片描述
ROS节点开机自启动,需要安装 robot_upstart。
ROS网络通信是中心式结构。所有参与ROS网络通信的主机都必须指定一台主机作为master。
在这里插入图片描述

第6章 机器人底盘

底盘是机器人传感器和机器人主机的载体,也是移动机器人的基本形式。
轮式机器人分为:两轮差速、四轮差速、阿克曼、全向。
在这里插入图片描述
机器人通常借助感知装持续跟外部环境进行交互,从而来获取机器人的状态和环境的状态,我们可以简单的把机器人获取自身状态的行为叫做自我认知,把机器人获取环境状态为叫做环境认知。
在这里插入图片描述
SLAM是建图和定位的结合,导航是定位和路径规划的结合,探索是建图和路径规划的结合。SPLAM是建图、定位和导航的结合。
一种情况是,机器人会先启动SLAM算法构建好环境的地图。然后关闭 SLAM中的建图功能,利用建立好的地图和SLAM定位算法,为导航提供定位信息,这个过程也叫重定位。
另一种情况是,机器人启动SLAM算法的同时启动导航,这样机器人会一边建图一边导航,环境地图会随机器人导航而实时更新。
由于同时开启 SLAM算法和导航会使地图的鲁棒性很差,实际商业机器人上一般都是前一种情况。

第7章 SLAM的数学基础

SLAM简史

定位问题:已知全局地图坐标信息,利用观测求解机器人在地图中的坐标。
建图问题:已知机器人的实时坐标,利用观测求解被观测物体的坐标。
在这里插入图片描述
SLAM:Simultaneous Localization and Mapping
我在哪?->取决于何种参考系
我将到何处去?->取决于目的地在参考系下采用的描述方式
我该如何去?->取决于路线和运动方式
数据相关:数据关联的数据形式是多样的,除了基于激光轮廓,还可以基于激光特征点、图像特征、机器学习特征等。其实目前的人工智能算法,也就相当于一个数据关联模型。

SLAM中的概率理论

SLAM基于概率论:不确定性是普遍存在的,而概率理论的目的是试图从不确定性事物中发现一些确定性规律。
大数定律是将统计平均用来表示数学期望的依据。中心极限定理可以解释正态分布为何普遍存在。
SLAM问题,是一个状态估计问题,用概率进行描述。有两种方法:基于贝叶斯网络的状态估计,基于因子图的状态估计。
在这里插入图片描述
在这里插入图片描述
SLAM是一个软硬件相结合,理论加实战的浩大工程性问题
企业的目的是要将SLAM技术真正落地到产品,而不是等你慢慢研究数学理论或简单调几个参数,每个从业者都应该建立起大局观以避免重复造轮子。
在这里插入图片描述
数学模型的构建,是基于大量实践数据归纳总结出来的经验。
波束模型缺乏光滑性,导致构建出来的地图具有很多毛刺。
似然域模型较为平滑,构建出来的地图不易出现毛刺。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
置信度,其实是对后验概率分布的符号化简写。
由于实际SLAM问题的非线性最小二乘中,很难找到合适的线性化方法,初值也比较难确定,并目代价函数的谋差往往不能最小化到0值,所以上面介绍的直接求解方法很难利用在实际问题中实际工程中,通常采用优化方法进行迭代求解。
在这里插入图片描述
可以发现,每一种方法都是前一种的改进,下降速度越来越好,但是每一步迭代的计算代价越来越高。
因此,在实际应用中要结合实际问题合理选择。比如Dogleg算法虽然每步迭代下降效果是最好的,但是每步选代付出的计算代价也最昂贵,站在整个迭代过程看,迭代效率并不一定比最普通的梯度下降法好。常用优化工具
在这里插入图片描述

典型SLAM算法

在这里插入图片描述
在这里插入图片描述
在线SLAM: 仅包括当前时刻的位姿,不需要一直保存之前所有时刻的观察数据和控制指令;
完全SLAM: 需要计算机器人的整个轨迹和地图路标的所有数据。现在多用完全SLAM
在这里插入图片描述

SLAM与BA与SFM的区别对比

在这里插入图片描述
最重要的区别:SLAM要求尽可能地实时性

第8章 激光SLAM系统

1.5555
2.555

第9章 视觉SLAM系统

1.5555
2.555

第10章 其他SLAM系统

1.5555
2.555

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值