机器人SLAM导航核心技术与实战1
视频参考: 《机器人SLAM导航核心技术与实战》书籍配套教学视频
第一章
第2章 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机制。
第3章 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用大驼峰;
第4章 OpenCv
图像处理是利用计算机对图像进行计算分析的技术,包括数字图像处理和计算机视觉两大领域。
数字图像处理:初级算法,滤波、缩放、分割;
计算机视觉:高级算法,识别、追踪;
常见图片处理库:口OpenCV、Halcon、Matlab、PIL、skimage。
AI图片处理平台:TensorFlow、PyTorch、Caffe。
OpenCv与PCL
单目相机得到的数据一般是2维的,所以需要OpenCv来进行处理;
双目、RGB-D相机、激光雷达得到的数据一般是3维的,需要PCL来进行点云处理。