• 学习时长

    9周/建议每周8个小时

  • 答疑服务

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

  • 作业批改

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

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

相关推荐

计算机视觉 智能机器人 定位与建图 基础
智能机器人 定位与建图 进阶
智能机器人 定位与建图 高级

未注册验证后自动登录,注册/登录则视为同意

《服务协议》《隐私协议》

请完善资料,让我们更好的为您服务!

+86  (手机号已绑定)

未注册验证后自动登录,注册/登录则视为同意

《服务协议》《隐私协议》

请选择自己感兴趣的领域

智能语音

三维视觉

计算机视觉

移动机器人

推荐系统

工业机器人

知识图谱

深度学习

自然语言处理