-
学习时长
9周/建议每周8个小时
-
答疑服务
专属微信答疑群/讲师助教均参与
-
作业批改
每章节设计作业/及时批改评优
支持花呗分期
- 第1章: 激光SLAM简介
- 第1节: 激光雷达工作原理
- 任务2-1: 【课件】L1 激光SLAM概述.pdf
- 任务2-2: 【视频】激光雷达工作原理 03:48
- 第2节: SLAM定义、分类及框架
- 任务3: 【视频】SLAM定义、分类及框架 43:43
- 第3节: 激光SLAM介绍
- 任务4: 【视频】激光SLAM介绍 18:02
- 第4节: 位姿变换
- 任务5: 【视频】位姿变换 24:35
- 第5节: 实践:搭建系统环境
- 任务6-1: 【作业】第一章
- 任务6-2: 第一章作业-金力人助教.pptx
- 第2章: 传感器数据处理I:里程计运动模型及标定
- 任务7: 【课件】L2里程计标定.pdf
- 第1节: 里程计运动模型
- 任务8: 【视频】轮式里程计运动模型 20:10
- 第2节: 里程计标定原理
- 任务9: 【视频】轮式里程计标定 27:38
- 第3节: 实践:里程计标定
- 任务10-1: 【视频】轮式里程计标定代码实践 17:33
- 任务10-2: 【作业】第二章
- 任务10-3: 第二章作业讲评-周忠容同学.pptx
- 第3章: 传感器数据处理II:激光雷达数学模型和运动畸变去除
- 任务11: 【课件】L3 激光雷达及畸变去除.pdf
- 第1节: 激光雷达数学模型及概念介绍
- 任务12: 【视频】概念介绍 32:18
- 第2节: 运动畸变去除
- 任务13: 【视频】运动畸变去除 31:10
- 第3节: 实践:激光雷达运动畸变去除
- 任务14-1: 【视频】运动畸变去除实践讲解 12:43
- 任务14-2: 【作业】第三章
- 任务14-3: 第三章作业讲评-张智辉同学.pdf
- 第4章: 激光SLAM的前端配准方法 Ⅰ
- 任务15: 第四课-帧间匹配算法.pdf
- 第1节: ICP与PL-ICP算法
- 任务16: 【视频】ICP与PL-ICP算法 37:41
- 第2节: NICP与IMLS-ICP匹配方法
- 任务17: 【视频】NICP与IMLS-ICP匹配方法 34:51
- 第3节: 实践:IMLS-ICP方法实现前端配准
- 任务18-1: 【视频】激光SLAM的前端配准方法实践 15:04
- 任务18-2: 【作业】第四章
- 任务18-3: 第四章作业讲评-郭子萱同学.pdf
- 任务18-4: icp pl-icp n-icp imls-icp原理及对比-郭子萱同学.pdf
- 任务18-5: 作业第二题代码-郭子萱同学.pdf
- 第5章: 激光SLAM的前端配准方法 Ⅱ
- 任务19: 【课件】帧间匹配算法II.pdf
- 第1节: 拟梯度法与高斯牛顿方法
- 任务20: 【视频】爬山法与高斯牛顿优化方法 34:04
- 第2节: NDT,相关方法和分支定界方法
- 任务21: 【视频】NDT、相关方法和分支定界方法 47:02
- 第3节: 实践:基于优化方法的前端配准
- 任务22-1: 【视频】基于优化的前端配准方法实践 13:19
- 任务22-2: 【作业】第五章
- 任务22-3: 第五章作业讲评-钟灼同学.pdf
- 第6章: 基于图优化的激光SLAM方法(Grid-based)
- 任务23: 【课件】图优化SLAM算法.pdf
- 第1节: Pose Graph的构建及回环检测方法
- 任务24: 【视频】Pose Graph构建以及回环检测方法 15:46
- 第2节: 非线性最小二乘原理及其在SLAM中的应用
- 任务25: 【视频】非线性最小二乘及其在SLAM中的应用 41:59
- 第3节: Cartographer算法讲解(2020版)
- 任务26-1: 【代码】Cartographer-2020-10-07.rar
- 任务26-2: 【视频】Cartographer新版本代码讲解 48:06
- 第4节: 实践:基于优化的SLAM后端
- 任务27-1: 【视频】一个简单的基于优化的SLAM算法实践 03:55
- 任务27-2: 【作业】第六章
- 第7章: 基于已知定位的建图
- 任务28-1: 【课件】已知定位的构图算法.pdf
- 任务28-2: 【资料】grid-maps.pdf
- 第1节: 基于占用概率的栅格地图构建
- 任务29: 【视频】覆盖栅格地图算法 28:59
- 第2节: 基于TSDF的栅格地图构建
- 任务30: 【视频】计数建图与TSDF 30:31
- 第3节: 实践:构建栅格地图
- 任务31-1: 【视频】栅格地图构建实践 04:26
- 任务31-2: 【作业】第七章
- 第8章: Life-long Mapping
- 任务32: 【课件】lifelong mapping.pdf
- 第1节: life-long Mapping的概念及冗余节点的选择
- 任务33: 【视频】Lifelong Mapping概念及冗余节点选择 19:26
- 第2节: Pose-Graph的精确及近似边缘化
- 任务34: 【视频】PoseGraph的稠密近似及稀疏近似 30:52
- 第9章: 3D激光SLAM
- 第1节: 3D激光SLAM介绍
- 任务35-1: 【课件】3D激光SLAM.pdf
- 任务35-2: 【视频】3D激光SLAM 43:08
- 第2节: ALOAM
- 任务36-1: 【代码】A-LOAM.rar
- 任务36-2: 【视频】ALOAM代码讲解 51:46
- 第3节: 大作业
- 任务37-1: 【视频】作业说明 07:55
- 任务37-2: 【作业】大作业说明文档.rar
- 任务37-3: 【大作业】
一.本次作业练习目标
巩固课程所学知识,理解基于直接线性法和基于模型的标定方法,并对下一节课激光雷达模型的内容做一些铺垫学习。
二.作业计分原则
满分为12分,10分为优秀,8分为良好,6分为及格。
三.作业提交说明
需提供完整的PDF报告及代码。公式推导题可以手写照相粘进PDF,也可以直接写进PDF。
四.作业题目说明
1. 补充直接线性方法的里程计标定模块代码。(6分)
2. 补充轮速计+角速度计标定模块代码。(2分)
3. 对于线性方程 Ax = b的求解,Eigen库[1]提供了多种求解方法:
具体可参见
https://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] https://eigen.tuxfamily.org/index.php?title=Main_Page
一.本次作业练习目标
巩固课程所学知识,理解基于直接线性法和基于模型的标定方法,并对下一节课激光雷达模型的内容做一些铺垫学习。
二.作业计分原则
满分为12分,10分为优秀,8分为良好,6分为及格。
三.作业提交说明
需提供完整的PDF报告及代码。公式推导题可以手写照相粘进PDF,也可以直接写进PDF。
四.作业题目说明
1. 补充直接线性方法的里程计标定模块代码。(6分)
2. 补充轮速计+角速度计标定模块代码。(2分)
3. 对于线性方程 Ax = b的求解,Eigen库[1]提供了多种求解方法:
具体可参见
https://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