• 学习时长

    9周/建议每周8个小时

  • 答疑服务

    专属微信答疑群/讲师助教均参与

  • 作业批改

    每章节设计作业/及时批改评优

  • 任务1: 助教分组结果-激光SLAM第四期.xlsx
  • 第1章: 激光SLAM简介
  • 任务2: 【课件】L1 激光SLAM概述.pdf
  • 第1节: SLAM定义、分类及框架
  • 任务3-1: 【视频】激光雷达工作原理 03:48
  • 任务3-2: 【视频】SLAM定义、分类及框架 43:43
  • 第2节: 激光SLAM介绍
  • 任务4: 【视频】激光SLAM介绍 18:02
  • 第3节: 位姿变换
  • 任务5: 【视频】位姿变换 24:35
  • 第4节: 实践:搭建系统环境
  • 任务6: 【作业】熟悉系统环境及基础数学知识
  • 任务7: 第一章作业讲评-刘敦浩助教.pdf
  • 第2章: 传感器数据处理I:里程计运动模型及标定
  • 任务8: 【课件】L2 里程计标定.pdf
  • 第1节: 里程计运动模型
  • 任务9: 【视频】轮式里程计运动模型 20:10
  • 第2节: 里程计标定原理
  • 任务10: 【视频】轮式里程计标定 27:38
  • 第3节: 实践:里程计标定
  • 任务11-1: 【视频】轮式里程计标定代码实践 17:33
  • 任务11-2: 【作业】里程计标定实践
  • 任务11-3: 第二章作业讲评-觉罗雅威助教.pdf
  • 第3章: 传感器数据处理II:激光雷达数学模型和运动畸变去除
  • 任务12: 【课件】L3 激光雷达及畸变去除.pdf
  • 第1节: 激光雷达数学模型及概念介绍
  • 任务13: 【视频】概念介绍 32:18
  • 第2节: 运动畸变去除
  • 任务14: 【视频】运动畸变去除 31:10
  • 第3节: 实践:激光雷达运动畸变去除
  • 任务15-1: 【视频】运动畸变去除实践讲解 12:43
  • 任务15-2: 【作业】实践运动畸变去除
  • 任务15-3: 第三章作业讲评-刘敦浩助教.pdf
  • 第4章: 激光SLAM的前端配准方法 Ⅰ
  • 任务16: 【课件】帧间匹配算法I.pdf
  • 第1节: ICP与PL-ICP算法
  • 任务17: 【视频】ICP与PL-ICP算法 37:41
  • 第2节: NICP与IMLS-ICP匹配方法
  • 任务18: 【视频】NICP与IMLS-ICP匹配方法 34:51
  • 第3节: 实践:IMLS-ICP方法实现前端配准
  • 任务19-1: 【视频】激光SLAM的前端配准方法实践 15:04
  • 任务19-2: 【作业】第四节
  • 任务20: 第四章作业讲评-觉罗雅威助教.pdf
  • 第5章: 激光SLAM的前端配准方法 Ⅱ
  • 任务21: 【课件】帧间匹配算法II.pdf
  • 第1节: 拟梯度法与高斯牛顿方法
  • 任务22: 【视频】爬山法与高斯牛顿优化方法 34:04
  • 第2节: NDT,相关方法和分支定界方法
  • 任务23: 【视频】NDT、相关方法和分支定界方法 47:02
  • 第3节: 实践:基于优化方法的前端配准
  • 任务24-1: 【视频】基于优化的前端配准方法实践 13:19
  • 任务24-2: 【作业】第5节
  • 任务24-3: 第五章作业讲评-刘敦浩助教.pdf
  • 第6章: 基于图优化的激光SLAM方法(Grid-based)
  • 任务25: 【课件】图优化SLAM算法.pdf
  • 第1节: Pose Graph的构建及回环检测方法
  • 任务26: 【视频】Pose Graph构建以及回环检测方法 15:46
  • 第2节: 非线性最小二乘原理及其在SLAM中的应用
  • 任务27: 【视频】非线性最小二乘及其在SLAM中的应用 41:59
  • 第3节: 经典开源cartographer算法讲解(2019版)
  • 任务28-1: 【代码】cartographer.rar
  • 任务28-2: 【视频】Cartographer代码讲解 67:15
  • 第4节: Cartographer算法讲解(2020版)
  • 任务29-1: 【代码】Cartographer-2020-10-07.rar
  • 任务29-2: 【视频】Cartographer新版本代码讲解 48:06
  • 第5节: 实践:基于优化的SLAM后端
  • 任务30-1: 【视频】一个简单的基于优化的SLAM算法实践 03:55
  • 任务30-2: 【作业】第6次
  • 任务30-3: 第六章作业讲评-觉罗雅威助教.pdf
  • 第7章: 基于已知定位的建图
  • 任务31-1: 【课件】已知定位的构图算法.pdf
  • 任务31-2: 【资料】grid-maps.pdf
  • 第1节: 基于占用概率的栅格地图构建
  • 任务32: 【视频】覆盖栅格地图算法 28:59
  • 第2节: 基于TSDF的栅格地图构建
  • 任务33: 【视频】计数建图与TSDF 30:31
  • 第3节: 实践:构建栅格地图
  • 任务34-1: 【视频】栅格地图构建实践 04:26
  • 任务34-2: 【作业】第7节
  • 任务34-3: 第七章作业讲评-刘敦浩助教.pdf
  • 第8章: Life-long Mapping
  • 任务35: 【课件】lifelong mapping.pdf
  • 第1节: life-long Mapping的概念及冗余节点的选择
  • 任务36: 【视频】Lifelong Mapping概念及冗余节点选择 19:26
  • 第2节: Pose-Graph的精确及近似边缘化
  • 任务37: 【视频】PoseGraph的稠密近似及稀疏近似 30:52
  • 第9章: 3D激光SLAM
  • 第1节: 3D激光SLAM介绍
  • 任务38-1: 【课件】3D激光SLAM.pdf
  • 任务38-2: 【视频】3D激光SLAM 43:08
  • 第2节: ALOAM
  • 任务39-1: 【代码】A-LOAM.rar
  • 任务39-2: 【视频】ALOAM代码讲解 51:46
  • 第3节: 大作业
  • 任务40-1: 【视频】作业说明 07:55
  • 任务40-2: 【作业】大作业说明文档.rar
  • 任务40-3: 【作业】大作业提交

一.本次作业练习目标

巩固课程所学知识,理解基于直接线性法和基于模型的标定方法,并对下一节课激光雷达模型的内容做一些铺垫学习。

二.作业计分原则

满分为12分,10分为优秀,8分为良好,6分为及格。

三.作业提交说明

需提供完整的PDF报告及代码。公式推导题可以手写照相粘进PDF,也可以直接写进PDF

四.作业题目说明

1. 补充直接线性方法的里程计标定模块代码。(6)

2. 补充轮速计+角速度计标定模块代码。(2分)

3. 对于线性方程 Ax = b的求解,Eigen[1]提供了多种求解方法:

具体可参见

http://eigen.tuxfamily.org/dox/group__TopicLinearAlgebraDecompositions.html

https://www.cnblogs.com/wangxiaoyong/p/8977343.html

通过网络等各种渠道学习总结,对于最小二乘问题,都有哪几种求解方法,各优缺点有哪些,分别在什么条件下较常使用?(2分)

4. 阅读论文Precise indoor localization for mobile laserscanner前两章,回答问题。(2分)

(1)根据第二章内容,简述激光雷达测距原理;

(2)简要介绍一下右图的含义。 

第一题代码说明:

1. 本次的作业为用直接线性方法来对机器人的里程计进行校正。

2. 给出的文件中包含有本次作业使用的 bag 数据,路径为odom_ws/bag/odom.bag。

3. 本次的作业中,需要实现三个函数,分别为:

1. Main.cpp,第 340 行中的 cal_delta_distance()函数,该函数的功能为给定两个里程计位姿,计算这两个位姿之间的位姿差。

2. Odom_Calib.cpp,第 23 行 Add_Data()函数,该函数的功能为构建超定方程组

Ax=b,具体参考 PPT。

3. Odom_Calib.cpp,第 44 行 Solve()函数,该函数的功能为对 2 中构建的超定方程组进行求解。

本次程序的运行过程为:

Step1: 实现上述的三个函数,并进行编译。

Step2: 在odom_ws下,进行 source,具体命令为: source devel/setup.bash

Step3: 运行launch文件:roslaunch calib_odom odomCalib.launch。执行本条指令的时候,必须保证没有任何 ros 节点在运行,roscore也要关闭。

Step4: 在 3 正常的情况下,运行 rviz, fix_frame 选择为odom。在 Add 选项卡中增加三条Path 消息。一条订阅的topic 为: odom_path_pub_;一条订阅的 topic 为:scan_path_pub_;最后一条为:calib_path_pub_。分别选择不同的颜色。

Step5: 进入到 odom_ws/bag 目录下,运行指令: rosbag play -–clock odom.bag。

Step6: 如果一切正常,则能看到运行矫正程序的终端会打印数据,并且 rviz 中可以看到两条路径。当打印的数据到达一个的数量之后,则可以开始矫正。

Step7: 矫正的命令为,在 calib_flag 的 topic 下发布一个数据:rostopic pub /calib_flag std_msgs/Empty "{}" 。

Step8: 程序矫正完毕会输出对应的矫正矩阵,并且会在 rviz 中显示出第三条路径,即calib_path。可以观察里程计路径 odom_path 和矫正路径_calib_path 区别来判断此次矫正的效果。

参考结果:绿色为odom、黄色为激光、红色为矫正后的轨迹,可以看到校正后的轨迹跟激光的轨迹接近了很多。

说明:以上结果为数据包开始到179s的2500个数据计算出来的,采集不同量数据得到的结果会有所不同,也并非采集时间越长结果越好,标定结果数据仅供参考,效果直接看轨迹图。

第二题代码说明:

在实际标定中,直接线性方法通用性强,但精度不如基于模型的方法。

在课程中我们得知,差速轮运动模型中,可以通过轮速差得到机器人底盘中心的线速度和角速度。但有时由于地面打滑或其它原因导致角速度计算不准。这里我们用角速度计来替代轮速计计算机器人的角速度w,而线速度v依旧通过轮速计计算。

机器人由于载重不同或轮胎气压大小不同,真实的速度v_real与v相差一个比例v_ratio, v_real = v * v_ratio + noise. 角速度计得到的角速度w与真实角速度w_real相差一个缓慢变化的bias, w_real = w + bias + noise. noise一般为0均值的高斯白噪声,bias在此次标定作业中假设变化不大。

本次作业中你需要通过一小段groundtruth.txt标定出v_ratio和noise的大小,之后生成标定后的航迹推算轨迹,利用DrawTrajectory.py比较标定前后的轨迹不同。

代码编译说明:

cd 你放置作业代码的目录/wheel_imu/

mkdir build

cd build

cmake ..

make

cd ..

./wheel_imu

之后可用命令python DrawTrajectory.py raw_poses.txt python DrawTrajectory.py corrected_poses.txt 查看标定前生成的轨迹和标定后生成的轨迹。

最后标定成功的轨迹大致为:

[1] http://eigen.tuxfamily.org/index.php?title=Main_Page

一.本次作业练习目标

巩固课程所学知识,理解基于直接线性法和基于模型的标定方法,并对下一节课激光雷达模型的内容做一些铺垫学习。

二.作业计分原则

满分为12分,10分为优秀,8分为良好,6分为及格。

三.作业提交说明

需提供完整的PDF报告及代码。公式推导题可以手写照相粘进PDF,也可以直接写进PDF

四.作业题目说明

1. 补充直接线性方法的里程计标定模块代码。(6)

2. 补充轮速计+角速度计标定模块代码。(2分)

3. 对于线性方程 Ax = b的求解,Eigen[1]提供了多种求解方法:

具体可参见

http://eigen.tuxfamily.org/dox/group__TopicLinearAlgebraDecompositions.html

https://www.cnblogs.com/wangxiaoyong/p/8977343.html

通过网络等各种渠道学习总结,对于最小二乘问题,都有哪几种求解方法,各优缺点有哪些,分别在什么条件下较常使用?(2分)

4. 阅读论文Precise indoor localization for mobile laserscanner前两章,回答问题。(2分)

(1)根据第二章内容,简述激光雷达测距原理;

(2)简要介绍一下右图的含义。 

第一题代码说明:

1. 本次的作业为用直接线性方法来对机器人的里程计进行校正。

2. 给出的文件中包含有本次作业使用的 bag 数据,路径为odom_ws/bag/odom.bag。

3. 本次的作业中,需要实现三个函数,分别为:

1. Main.cpp,第 340 行中的 cal_delta_distance()函数,该函数的功能为给定两个里程计位姿,计算这两个位姿之间的位姿差。

2. Odom_Calib.cpp,第 23 行 Add_Data()函数,该函数的功能为构建超定方程组

Ax=b,具体参考 PPT。

3. Odom_Calib.cpp,第 44 行 Solve()函数,该函数的功能为对 2 中构建的超定方程组进行求解。

本次程序的运行过程为:

Step1: 实现上述的三个函数,并进行编译。

Step2: 在odom_ws下,进行 source,具体命令为: source devel/setup.bash

Step3: 运行launch文件:roslaunch calib_odom odomCalib.launch。执行本条指令的时候,必须保证没有任何 ros 节点在运行,roscore也要关闭。

Step4: 在 3 正常的情况下,运行 rviz, fix_frame 选择为odom。在 Add 选项卡中增加三条Path 消息。一条订阅的topic 为: odom_path_pub_;一条订阅的 topic 为:scan_path_pub_;最后一条为:calib_path_pub_。分别选择不同的颜色。

Step5: 进入到 odom_ws/bag 目录下,运行指令: rosbag play -–clock odom.bag。

Step6: 如果一切正常,则能看到运行矫正程序的终端会打印数据,并且 rviz 中可以看到两条路径。当打印的数据到达一个的数量之后,则可以开始矫正。

Step7: 矫正的命令为,在 calib_flag 的 topic 下发布一个数据:rostopic pub /calib_flag std_msgs/Empty "{}" 。

Step8: 程序矫正完毕会输出对应的矫正矩阵,并且会在 rviz 中显示出第三条路径,即calib_path。可以观察里程计路径 odom_path 和矫正路径_calib_path 区别来判断此次矫正的效果。

参考结果:绿色为odom、黄色为激光、红色为矫正后的轨迹,可以看到校正后的轨迹跟激光的轨迹接近了很多。

说明:以上结果为数据包开始到179s的2500个数据计算出来的,采集不同量数据得到的结果会有所不同,也并非采集时间越长结果越好,标定结果数据仅供参考,效果直接看轨迹图。

第二题代码说明:

在实际标定中,直接线性方法通用性强,但精度不如基于模型的方法。

在课程中我们得知,差速轮运动模型中,可以通过轮速差得到机器人底盘中心的线速度和角速度。但有时由于地面打滑或其它原因导致角速度计算不准。这里我们用角速度计来替代轮速计计算机器人的角速度w,而线速度v依旧通过轮速计计算。

机器人由于载重不同或轮胎气压大小不同,真实的速度v_real与v相差一个比例v_ratio, v_real = v * v_ratio + noise. 角速度计得到的角速度w与真实角速度w_real相差一个缓慢变化的bias, w_real = w + bias + noise. noise一般为0均值的高斯白噪声,bias在此次标定作业中假设变化不大。

本次作业中你需要通过一小段groundtruth.txt标定出v_ratio和noise的大小,之后生成标定后的航迹推算轨迹,利用DrawTrajectory.py比较标定前后的轨迹不同。

代码编译说明:

cd 你放置作业代码的目录/wheel_imu/

mkdir build

cd build

cmake ..

make

cd ..

./wheel_imu

之后可用命令python DrawTrajectory.py raw_poses.txt python DrawTrajectory.py corrected_poses.txt 查看标定前生成的轨迹和标定后生成的轨迹。

最后标定成功的轨迹大致为:

[1] http://eigen.tuxfamily.org/index.php?title=Main_Page

相关推荐

智能机器人 SLAM/VIO 基础
计算机视觉 智能机器人 SLAM/VIO 基础