机器人新人必学开源库:PCL、Eigen、OpenCV 等通用工具入门
本文面向刚进入机器人、SLAM、自动驾驶、无人机、移动机器人方向的新人,介绍 PCL、Eigen、OpenCV、ROS/ROS2、Ceres、g2o、Sophus 等常见开源库的作用、学习重点和练习路线。目标不是背 API,而是建立“这些库为什么重要、在系统里怎么配合”的整体认知。
一、为什么机器人开发离不开开源库?
机器人软件不是单一算法,而是一个由传感器、数学计算、感知、定位、建图、规划、控制和可视化组成的复杂系统。
一个典型机器人系统可能同时处理:
- 相机图像
- 激光雷达点云
- IMU 加速度和角速度
- 轮速计数据
- GPS/RTK 数据
- 地图数据
- 位姿和轨迹
- 控制指令
如果所有底层能力都从零写,成本非常高,也很容易出错。因此机器人开发大量依赖成熟开源库。
常见库可以粗略分成几类:
| 类别 | 常用库 | 主要作用 |
|---|---|---|
| 数学计算 | Eigen | 矩阵、向量、坐标变换、线性代数 |
| 图像处理 | OpenCV | 相机图像处理、视觉算法、标定 |
| 点云处理 | PCL | 激光雷达/RGB-D 点云滤波、分割、配准 |
| 机器人框架 | ROS/ROS2 | 节点通信、消息管理、系统集成 |
| 非线性优化 | Ceres、g2o | SLAM 后端、标定、位姿图优化 |
| 位姿表示 | Sophus | SO(3)、SE(3)、李群李代数 |
| 空间搜索 | nanoflann、ikd-Tree | 最近邻搜索、点云地图索引 |
| 地图表达 | OctoMap、grid_map | 栅格地图、三维占据地图 |
新人学习这些库时,不建议一开始就“库大全式”学习,而应该围绕机器人数据流理解它们之间的关系。
机器人系统中的典型数据流:
传感器数据
↓
ROS/ROS2 消息
↓
OpenCV / PCL / Eigen 数据结构
↓
算法处理
↓
位姿、地图、检测结果
↓
rviz 可视化 / 控制模块 / 规划模块
二、Eigen:机器人算法的数学地基
2.1 Eigen 是什么?
Eigen 是 C++ 中非常常用的线性代数库。机器人代码里只要出现矩阵、向量、旋转、位姿、雅可比,大概率都能看到 Eigen。
它常用于:
- 三维点和向量表示
- 矩阵运算
- 坐标系变换
- 旋转矩阵、四元数、欧拉角
- 线性方程求解
- 最小二乘和优化问题中的雅可比计算
- EKF、ESKF、SLAM、VIO、LIO 中的状态表达
2.2 机器人里常见的 Eigen 类型
| 类型 | 含义 | 常见用途 |
|---|---|---|
Eigen::Vector3d |
三维向量 | 点、速度、加速度、平移 |
Eigen::Matrix3d |
3×3 矩阵 | 旋转矩阵、协方差 |
Eigen::Matrix4d |
4×4 矩阵 | 齐次变换矩阵 |
Eigen::Quaterniond |
四元数 | 三维旋转 |
Eigen::Isometry3d |
刚体变换 | 位姿变换 |
Eigen::AngleAxisd |
轴角 | 旋转构造与转换 |
示例:定义一个三维点。
Eigen::Vector3d point(1.0, 2.0, 3.0);
示例:定义一个单位旋转矩阵。
Eigen::Matrix3d R = Eigen::Matrix3d::Identity();
示例:定义一个位姿变换。
Eigen::Isometry3d T = Eigen::Isometry3d::Identity();
T.rotate(R);
T.pretranslate(Eigen::Vector3d(1.0, 0.0, 0.0));
2.3 新人重点不是背 API,而是理解坐标变换
机器人里最容易让新人迷糊的是坐标系。
常见坐标系包括:
map:地图坐标系odom:里程计坐标系base_link:机器人本体坐标系imu_link:IMU 坐标系camera_link:相机坐标系lidar_link:激光雷达坐标系
一个点从激光雷达坐标系变换到地图坐标系,本质就是:
p_map = T_map_lidar * p_lidar
这里的 T_map_lidar 就可以用 Eigen 的矩阵、四元数或 Isometry3d 表示。
如果你以后看 FAST-LIO、LIO-SAM、VINS-Fusion、ORB-SLAM,会反复看到类似的位姿变换。
2.4 Eigen 建议学习顺序
建议按下面顺序学:
- 向量:
Vector2d、Vector3d、VectorXd - 矩阵:
Matrix3d、Matrix4d、动态矩阵 - 基础运算:加减乘、转置、逆、行列式
- 旋转表达:旋转矩阵、欧拉角、轴角、四元数
- 刚体变换:
Isometry3d、Affine3d - 坐标变换链:
T_world_body * T_body_sensor - 与 ROS 消息互转:
geometry_msgs、tf2
一句话总结:Eigen 是机器人算法的数学地基,越早熟悉越好。
三、OpenCV:机器人视觉入门首选
3.1 OpenCV 是什么?
OpenCV 是计算机视觉领域最常见的开源库。只要机器人上有相机,基本就会用到 OpenCV。
它可以处理:
- 图像读取、保存、显示
- 图像滤波、增强、二值化
- 边缘检测、轮廓提取
- 特征点检测和匹配
- 光流跟踪
- 相机标定
- 双目视觉
- ArUco / AprilTag 识别
- 深度学习模型前后处理
最基础的图像读取:
cv::Mat img = cv::imread("image.png");
cv::imshow("image", img);
cv::waitKey(0);
图像灰度化和边缘检测:
cv::Mat gray, edges;
cv::cvtColor(img, gray, cv::COLOR_BGR2GRAY);
cv::Canny(gray, edges, 50, 150);
3.2 OpenCV 在机器人中的典型用途
| 场景 | OpenCV 作用 |
|---|---|
| 相机驱动调试 | 显示图像、检查曝光、检查畸变 |
| 相机标定 | 求内参、畸变参数、重投影误差 |
| 视觉里程计 | 特征点提取、匹配、光流跟踪 |
| 目标识别 | 图像预处理、结果可视化 |
| 双目视觉 | 立体匹配、视差图、深度估计 |
| 标志物定位 | ArUco、AprilTag 检测 |
| 视觉 SLAM | 图像金字塔、特征、PnP、RANSAC |
3.3 新人一定要理解 cv::Mat
cv::Mat 是 OpenCV 最核心的数据结构,可以理解成一张图像或一个矩阵。
一张 RGB 图像通常是:
高度 × 宽度 × 通道数
例如 640×480 的彩色图像:
480 行,640 列,3 通道
新人容易踩坑的地方:
- OpenCV 默认颜色顺序是 BGR,不是 RGB
- 图像坐标原点在左上角
- 像素坐标通常是
(u, v),不是三维坐标(x, y, z) cv::Mat赋值默认可能共享数据,需要注意深拷贝clone()- ROS 图像消息和
cv::Mat之间通常需要cv_bridge
3.4 OpenCV 建议学习顺序
推荐路线:
cv::Mat数据结构- 图像读取、保存、显示
- 颜色空间转换:BGR、RGB、GRAY、HSV
- 滤波:均值、高斯、中值
- 二值化、形态学操作
- 边缘检测和轮廓提取
- 相机模型和相机标定
- 特征点:ORB、SIFT、FAST
- 特征匹配、RANSAC、PnP
- ROS 中使用
cv_bridge
一句话总结:OpenCV 是机器人视觉感知的基础工具,先学图像数据结构,再学视觉算法。
四、PCL:点云处理核心库
4.1 PCL 是什么?
PCL,全称 Point Cloud Library,是点云处理领域最常用的 C++ 开源库之一。
如果机器人使用:
- 机械式激光雷达
- 固态激光雷达
- RGB-D 相机
- 双目深度点云
- 三维重建地图
那么大概率会用到 PCL。
PCL 能做:
- 点云读写
- 点云滤波
- 点云下采样
- 法向量估计
- KD-Tree 搜索
- 平面/圆柱/模型分割
- 欧式聚类
- ICP / NDT 点云配准
- 点云特征提取
- 点云可视化
4.2 常见点云类型
| 类型 | 含义 | 常见场景 |
|---|---|---|
pcl::PointXYZ |
只有 xyz 坐标 | 普通三维点云 |
pcl::PointXYZI |
xyz + intensity | 激光雷达点云 |
pcl::PointXYZRGB |
xyz + rgb | RGB-D 彩色点云 |
pcl::PointNormal |
xyz + normal | 法向量估计 |
pcl::PointCloud<T> |
点云容器 | 存储一帧点云 |
定义一帧点云:
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(
new pcl::PointCloud<pcl::PointXYZ>
);
体素滤波示例:
pcl::VoxelGrid<pcl::PointXYZ> voxel;
voxel.setInputCloud(cloud);
voxel.setLeafSize(0.1f, 0.1f, 0.1f);
voxel.filter(*filtered_cloud);
4.3 PCL 在机器人中的典型用途
| 场景 | PCL 作用 |
|---|---|
| 激光雷达预处理 | 去除无效点、裁剪范围、降采样 |
| 地面分割 | RANSAC 平面拟合、区域分割 |
| 障碍物检测 | 欧式聚类、包围框估计 |
| 点云地图 | 拼接多帧点云、保存 PCD |
| 激光 SLAM | 特征提取、最近邻搜索、点面残差 |
| 点云配准 | ICP、GICP、NDT |
| 可视化调试 | PCL Viewer、rviz 显示 |
4.4 PCL 学习难点
PCL 比 OpenCV 更难一些,原因有三个:
- 点云是三维数据,空间几何理解更难
- 点云规模大,一帧可能几万到几十万个点
- 算法经常依赖最近邻搜索、法向量、局部几何特征
新人常见困惑:
PointCloud2和pcl::PointCloud有什么区别?- 为什么点云要下采样?
- ICP 为什么需要初值?
- NDT 和 ICP 有什么区别?
- 为什么激光 SLAM 里要找边缘点和平面点?
- KD-Tree 是干什么的?
4.5 PCL 建议学习顺序
推荐路线:
- PCD 文件读取和保存
PointXYZ、PointXYZI、PointXYZRGB- 直通滤波、体素滤波、统计滤波
- 点云坐标变换
- KD-Tree 最近邻搜索
- RANSAC 平面分割
- 欧式聚类
- ICP 点云配准
- NDT 点云配准
- ROS 中
sensor_msgs/PointCloud2和 PCL 互转
一句话总结:PCL 是激光雷达和三维感知的基础工具,重点掌握滤波、分割、搜索、配准。
五、ROS/ROS2:把各种库连接成机器人系统
5.1 ROS 不是算法库,而是机器人中间件
ROS/ROS2 的作用不是替代 OpenCV、PCL、Eigen,而是把它们组织进一个完整系统。
一个机器人系统通常有多个节点:
相机驱动节点
激光雷达驱动节点
IMU 驱动节点
定位节点
建图节点
路径规划节点
控制节点
可视化节点
ROS/ROS2 提供:
- Topic 发布订阅
- Service 请求响应
- Action 长任务通信
- 参数服务器/参数系统
- launch 启动管理
- rosbag 数据录制和回放
- tf/tf2 坐标变换
- rviz 可视化
5.2 ROS 和其他库如何配合?
以相机节点为例:
ROS Image 消息
↓ cv_bridge
cv::Mat
↓ OpenCV 处理
检测结果 / 图像结果
↓
ROS Topic 发布
以激光雷达节点为例:
ROS PointCloud2 消息
↓ pcl_conversions
pcl::PointCloud<PointXYZI>
↓ PCL 滤波/分割/配准
处理后的点云 / 位姿
↓
ROS Topic 发布
以定位算法为例:
IMU + LiDAR + Odom
↓
Eigen 表示状态和位姿
↓
PCL 处理点云
↓
Ceres/g2o/EKF 做估计
↓
发布 odometry 和 tf
5.3 新人学习 ROS 的重点
不要一开始就纠结“ROS1 还是 ROS2”,先理解机器人系统的基本通信思想。
建议学习顺序:
- 工作空间和功能包结构
- Topic 发布和订阅
- Service 和 Action
- 常见消息类型:
Image、PointCloud2、Imu、Odometry - launch 文件
- rviz 可视化
- rosbag 录制和回放
- tf/tf2 坐标变换
- OpenCV 与 ROS 集成
- PCL 与 ROS 集成
一句话总结:ROS/ROS2 是机器人系统的胶水,负责把传感器、算法和执行模块连接起来。
六、Ceres 和 g2o:SLAM 里的优化工具
6.1 为什么机器人需要优化?
机器人中的很多问题本质上是优化问题。
例如:
- 相机标定:找到最合适的内参和畸变参数
- 位姿估计:找到最符合观测的机器人位姿
- 视觉 SLAM:最小化重投影误差
- 激光 SLAM:最小化点到线、点到面的残差
- 后端优化:让整条轨迹和地图整体一致
- 外参标定:估计相机、雷达、IMU 之间的相对位姿
典型形式:
找到一组状态 x,使残差 r(x) 尽可能小
也就是:
minimize Σ ||r_i(x)||²
6.2 Ceres Solver
Ceres 是 Google 开源的非线性优化库,特点是接口友好,自动求导方便。
常见用途:
- Bundle Adjustment
- 相机标定
- 曲线拟合
- 位姿优化
- 传感器外参标定
Ceres 比较适合新人入门非线性优化,因为它的例子较多,文档相对清晰。
6.3 g2o
g2o 是图优化库,在经典 SLAM 项目中非常常见。
它适合表达:
- 顶点:待优化变量,例如位姿、地图点
- 边:约束,例如里程计约束、观测约束、回环约束
典型应用:
- 位姿图优化
- SLAM 后端
- ORB-SLAM 等项目中的优化模块
6.4 新人什么时候学优化库?
不建议刚入门就深挖 Ceres/g2o。更合理的顺序是:
- 先掌握 Eigen 和坐标变换
- 理解最小二乘问题
- 理解残差、雅可比、鲁棒核
- 看懂简单曲线拟合例子
- 再看 SLAM 中的位姿优化和图优化
一句话总结:Ceres 和 g2o 是 SLAM、标定、状态估计中的优化工具,建议有数学和位姿基础后再深入。
七、Sophus:更专业的三维位姿表达
7.1 Sophus 解决什么问题?
机器人中经常需要表示三维位姿,也就是旋转和平移。
常见表达方式包括:
- 欧拉角
- 旋转矩阵
- 四元数
- 齐次变换矩阵
- SO(3)
- SE(3)
Sophus 是一个用于李群李代数计算的 C++ 库,常用于 SLAM、VIO、LIO 和非线性优化。
你可能会在代码里看到:
Sophus::SO3d R;
Sophus::SE3d T;
其中:
SO3表示三维旋转SE3表示三维刚体变换,也就是旋转 + 平移
7.2 为什么不用普通欧拉角?
欧拉角直观,但在优化和连续更新中有问题:
- 存在万向节锁
- 插值不自然
- 旋转更新不适合直接加减
- 在优化中不如李代数扰动方便
SLAM 中常见的位姿更新形式是:
T_new = exp(δξ) * T_old
这里的 δξ 是李代数扰动,Sophus 就是处理这类问题的工具。
7.3 Sophus 建议学习顺序
推荐路线:
- 先理解旋转矩阵和四元数
- 理解 SO(3)、SE(3) 是什么
- 理解指数映射和对数映射
- 理解李代数扰动更新
- 结合 Ceres/g2o 看位姿优化
- 再看 VIO/LIO 项目中的 Sophus 使用
一句话总结:Sophus 不是新人第一天必须掌握的库,但想深入 SLAM,一定绕不开它。
八、其他常见机器人开源库
8.1 OctoMap
OctoMap 用于构建三维占据地图。
它把空间划分成八叉树结构,用概率表示某个空间是否被占据。
常见用途:
- 三维避障
- 无人机建图
- 移动机器人导航
- 环境占据建模
8.2 grid_map
grid_map 常用于二维或 2.5D 栅格地图表达。
适合表示:
- 高程地图
- 代价地图
- 地形可通行性
- 局部规划地图
8.3 nanoflann
nanoflann 是轻量级 KD-Tree 库,常用于最近邻搜索。
在 SLAM 和点云配准中,经常需要快速找到某个点附近的点:
给定当前点 p,在地图中找最近的 5 个点
这类操作如果暴力遍历会非常慢,需要 KD-Tree 加速。
8.4 ikd-Tree
ikd-Tree 是增量式 KD-Tree,在 FAST-LIO2 中非常关键。
传统 KD-Tree 适合静态数据,但 SLAM 地图会不断插入和删除点。ikd-Tree 支持增量更新,更适合实时激光 SLAM。
8.5 GTSAM
GTSAM 是因子图优化库,常用于多传感器融合和 SLAM 后端。
典型项目:
- LIO-SAM
- GPS/IMU/LiDAR 融合
- 因子图 SLAM
它的思想是把传感器约束建模成因子,再统一优化状态变量。
九、新人应该按什么顺序学?
9.1 第一阶段:C++、Linux、CMake、Eigen
先打基础:
- C++ 基础语法
- 指针、引用、类、模板
- Linux 命令行
- CMake 编译
- Git 基础
- 线性代数
- Eigen 矩阵和坐标变换
这一阶段的目标:
能看懂机器人 C++ 项目,能编译,能理解矩阵和位姿变换。
9.2 第二阶段:ROS/ROS2 基础
重点掌握:
- 工作空间
- package
- node
- topic
- service
- launch
- rviz
- rosbag
- tf/tf2
这一阶段的目标:
能写一个节点,订阅传感器数据,处理后再发布出去。
9.3 第三阶段:OpenCV 或 PCL 二选一深入
如果你偏视觉方向,优先学:
- OpenCV
- 相机模型
- 相机标定
- 特征点
- PnP
- 视觉里程计
如果你偏激光雷达方向,优先学:
- PCL
- 点云滤波
- 点云分割
- KD-Tree
- ICP/NDT
- 激光里程计
这一阶段的目标:
能独立处理一种主传感器数据:图像或点云。
9.4 第四阶段:SLAM 和优化
再往后学习:
- Ceres
- g2o
- Sophus
- GTSAM
- EKF/ESKF
- 因子图
- 视觉 SLAM
- 激光 SLAM
- LiDAR-IMU 融合
这一阶段的目标:
能看懂主流 SLAM 项目的整体框架和核心模块。
十、推荐练手项目
10.1 Eigen 坐标变换练习
任务:
- 定义几个三维点
- 定义一个旋转和平移
- 把点从雷达坐标系变换到机器人坐标系
- 再从机器人坐标系变换到世界坐标系
- 分别用矩阵和四元数实现
能学到:
- 坐标系变换
- 旋转矩阵
- 四元数
- 齐次变换
10.2 OpenCV 相机标定
任务:
- 采集棋盘格图片
- 检测角点
- 标定相机内参
- 计算重投影误差
- 保存标定参数
能学到:
- 相机模型
- 畸变参数
- 内参矩阵
- 标定流程
10.3 ROS 图像处理节点
任务:
- 订阅相机图像
- 使用
cv_bridge转成cv::Mat - 做灰度化和边缘检测
- 发布处理后的图像
- 在 rviz 或 rqt_image_view 中查看
能学到:
- ROS 图像消息
- OpenCV 和 ROS 集成
- 图像处理节点结构
10.4 PCL 点云滤波与分割
任务:
- 读取一帧
.pcd点云 - 使用体素滤波降采样
- 使用直通滤波裁剪范围
- 使用 RANSAC 分割地面
- 保存处理后的点云
能学到:
- 点云数据结构
- 点云滤波
- 平面分割
- PCD 文件读写
10.5 ROS 点云处理节点
任务:
- 订阅
sensor_msgs/PointCloud2 - 转成
pcl::PointCloud<pcl::PointXYZI> - 做滤波处理
- 再转回
PointCloud2 - 发布到新话题
- 在 rviz 中显示
能学到:
- ROS 点云消息
- PCL 和 ROS 集成
- 激光雷达预处理流程
10.6 简单 ICP 配准实验
任务:
- 读取两帧点云
- 给第二帧点云一个初始位姿
- 使用 ICP 配准
- 输出变换矩阵
- 可视化配准前后效果
能学到:
- 点云配准思想
- 初值的重要性
- ICP 的收敛特点
- 点云地图拼接基础
十一、学习这些库时最容易踩的坑
11.1 只背 API,不理解数据结构
新人最常见的问题是会调用函数,但不知道数据是什么。
例如:
cv::Mat的通道顺序是什么?PointCloud2的字段里有什么?Eigen::Quaterniond的系数顺序是什么?- 点云坐标是在雷达坐标系还是世界坐标系?
机器人开发里,数据结构比函数名更重要。
11.2 不重视坐标系
很多 bug 不是算法错,而是坐标系错。
常见问题:
- 左乘右乘搞反
- 外参方向写反
T_body_lidar和T_lidar_body混淆- 世界坐标系和机体系混用
- 相机坐标系和图像坐标系混用
建议养成习惯:变量名写清楚坐标系。
例如:
p_lidar
p_body
p_world
T_world_body
T_body_lidar
不要只写:
p
T
R
11.3 不会用可视化工具调试
机器人开发一定要会可视化。
常用工具:
rviz:看点云、轨迹、地图、tfrqt_graph:看节点和 topic 关系rqt_image_view:看图像话题pcl_viewer:看 PCD 点云- OpenCV
imshow:快速看图像处理结果
很多问题用肉眼一看就知道:
- 点云方向不对
- 坐标系飞了
- 图像畸变没去掉
- 地图重影
- 轨迹跳变
11.4 一开始就啃大型项目源码
新人很容易直接冲 ORB-SLAM、FAST-LIO、LIO-SAM,然后被复杂工程劝退。
更好的方式是:
先学小库 → 做小实验 → 理解数据流 → 再看大项目
例如看 FAST-LIO2 前,至少应该了解:
- PCL 点云数据结构
- Eigen 位姿变换
- IMU 基本模型
- KD-Tree 最近邻搜索
- ESKF 基本思想
- ROS topic 和 tf
这样看源码会轻松很多。
十二、面向 SLAM 方向的重点库组合
12.1 视觉 SLAM 常见组合
OpenCV + Eigen + Sophus + Ceres/g2o + ROS
重点能力:
- 图像特征提取
- 特征匹配
- PnP
- 三角化
- 重投影误差
- Bundle Adjustment
- 位姿图优化
典型项目:
- ORB-SLAM
- VINS-Mono
- VINS-Fusion
12.2 激光 SLAM 常见组合
PCL + Eigen + ROS + KD-Tree + Ceres/g2o/GTSAM
重点能力:
- 点云滤波
- 特征提取
- 最近邻搜索
- ICP/NDT
- 点线/点面残差
- 位姿估计
- 地图维护
典型项目:
- LOAM
- LeGO-LOAM
- LIO-SAM
- FAST-LIO
- FAST-LIO2
12.3 多传感器融合常见组合
Eigen + Sophus + Ceres/GTSAM + ROS + OpenCV/PCL
重点能力:
- 时间同步
- 外参标定
- IMU 预积分
- EKF/ESKF
- 因子图优化
- 多传感器残差建模
典型任务:
- LiDAR-IMU 融合
- Camera-IMU 融合
- LiDAR-Camera 融合
- GPS-IMU-LiDAR 融合
十三、推荐学习路线总结
如果你是机器人方向新人,可以按这个路线走:
C++ / Linux / CMake / Git
↓
Eigen:矩阵、向量、坐标变换
↓
ROS/ROS2:节点、话题、tf、rviz
↓
OpenCV 或 PCL:图像或点云处理
↓
小项目:图像节点 / 点云节点 / 标定 / 配准
↓
SLAM 基础:里程计、地图、状态估计
↓
Sophus / Ceres / g2o / GTSAM
↓
阅读 ORB-SLAM、VINS、LIO-SAM、FAST-LIO 等项目
按照方向也可以这样选:
| 方向 | 优先学习 |
|---|---|
| 视觉 SLAM | OpenCV、Eigen、Sophus、g2o/Ceres |
| 激光 SLAM | PCL、Eigen、KD-Tree、ROS |
| 多传感器融合 | Eigen、Sophus、GTSAM、Ceres、ROS |
| 自动驾驶感知 | OpenCV、PCL、ROS、深度学习部署 |
| 移动机器人导航 | ROS/ROS2、tf、costmap、OctoMap、PCL |
十四、总结
PCL、Eigen、OpenCV 这些库不是孤立知识点,而是机器人系统里的基础能力模块。
可以简单记成:
- Eigen:负责数学计算和坐标变换
- OpenCV:负责图像处理和视觉感知
- PCL:负责点云处理和三维感知
- ROS/ROS2:负责系统通信和模块集成
- Ceres/g2o/GTSAM:负责优化和后端估计
- Sophus:负责更专业的位姿表达和李群计算
- OctoMap/grid_map:负责地图表达
- KD-Tree/ikd-Tree:负责高效空间搜索
新人学习时最重要的是抓住四件事:
数据结构
坐标变换
传感器处理
系统通信
只要把这四件事理解清楚,再去学具体 API、看大型 SLAM 项目,就会顺畅很多。
不要试图一次学完所有库。最好的方式是围绕一个小项目,一边写代码,一边补知识:
- 想学视觉:做 ROS + OpenCV 图像节点
- 想学激光:做 ROS + PCL 点云节点
- 想学 SLAM:先学 Eigen 坐标变换,再看配准和优化
- 想看 FAST-LIO:先补 PCL、Eigen、IMU、ESKF、KD-Tree
机器人开发的学习曲线确实比较陡,但这些通用开源库就是最稳的台阶。一步一步把它们踩实,后面无论做 SLAM、导航、感知还是多传感器融合,都会轻松很多。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)