深蓝学院,激光slam第二讲作业,踩坑总结

作业原文:

  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中构建的超定方程组进行求解。

本次程序的运行过程为:

  1. 实现上述的三个函数,并且进行编译。

  2. 在odom_ws下,进行source:source devel/setup.bash

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

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

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

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

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

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

运行步骤:

1.  创建新的工作空间:mkdir -p odom_ws/src

2.  在src中:catkin_init_workspace

3. 把 calib_odom文件放到src文件夹中,然后把老师给的bag也复制粘贴到 odom_ws工作空间下。

4.  把Main.cpp和Odom_Calib.cpp函数补充完整,并且在/home/dearzhu/odom_ws/src/calib_odom/CMakeLists.txt文件中搜索到indigo的地方,均换为melodic。参照博客激光slam学习——第二章(里程计标定)习题_lievech的博客-CSDN博客

5. 在odom_ws根目录下进行编译:catkin_make

6. 我这出现了报错:nav_core/recovery_behavior.h: 没有那个文件或目录

于是在src中的main.cpp中,注释掉了第五行的头文件。

深蓝学院,激光slam第二讲作业,踩坑总结_第1张图片

7. 再次编译,成功。

8. 在工作空间的根目录odom_ws中设置环境变量: source  devel/setup.bash

9. 运行launch文件 roslaunch calib_odom odomCalib.launch(注意:保证没有任何ROS节点在运行,roscore也要关闭。)

10. 依然参照这篇博客:激光slam学习——第二章(里程计标定)习题_lievech的博客-CSDN博客

    ①打开rviz
    rosrun rviz rviz
    ②配置rviz
    fix_frame选择为odom(我这里没有选项,于是直接手动输入odom)。在Add选项卡中增加三条Path消息,订阅的topic分别为:
    odom_path_pub_
    scan_path_pub_
    calib_path_pub_
    分别选择不同的颜色,用来区分路径。
    可以将此rviz的配置保存为odom_calib.rviz文件,然后在odomCalib.launch文件中添加:
    这样,在启动launch文件时,就自动打开了配置好的rviz。



11. 进入到odom_ws/bag目录下,运行指令:rosbag play --clock odom.bag。(注意是两条--)

12. 矫正里程计
当打印的数据到达一定的数量后,则可以开始矫正。这里,需要给calib_flag话题发布一个数据。

rostopic pub /calib_flag std_msgs/Empty "{}"

效果图如下:

correct_matrix:
    0.955294      -7.1119 -0.000941654
  -0.0116232       13.417  0.000289205
 -0.00066565      41.1115  0.000487204
calibration over!!!!

深蓝学院,激光slam第二讲作业,踩坑总结_第2张图片

这篇博客主要记录自己一些操作上的错误,也给其他的新手填一些坑,具体的代码理解可以看我参考的博客:激光slam学习——第二章(里程计标定)习题_lievech的博客-CSDN博客

 

 

你可能感兴趣的:(自动驾驶,人工智能,机器学习,slam)