github保存了相关代码和学习笔记:
第1章:概述
课程内容
源码:01-introduction.zip
kitti数据集:kitti_lidar_only_2011_10_03_drive_0027_synced.zip
视频:第1节-课程概述.mp4
PPT:多传感器融合定位-第1讲 V2.pdf
课程笔记
讲师知乎:任乾 - 知乎
企业缺有工程经验的高端人才,项目不在多在于精,更看重工程实践和思维能力。
项目开发思路:先run起来一个demo,然后不断优化它。
环境搭建
课程提供的docker环境
参考github:
或者在课程提供的docker文件中查看readme。
自建docker环境(和本地系统环境搭建一致)
参考:https://github.com/electech6/LVI-SAM_detailed_comments
- 拉取镜像
docker pull liangjinli/slam-docker:v1.2
新建文件夹(用于挂载docker环境):/home/qjs/code/localization_docker
- 第一次运行镜像:
docker run -v /home/qjs/code/localization_docker/:/home/ --net=host -it liangjinli/slam-docker:v1.2 /bin/bash
- 后续运行:
docker start CONTAINER-ID
- 进入容器:
docker exec -it CONTAINER-ID /bin/bash
- 关闭容器:
docker stop CONTAINER-ID
- 安装课程所需环境:
https://github.com/AlexGeControl/Sensor-Fusion-for-Localization-Courseware
- 第三方库文件见第三方库文件夹
- 查看容器ID:
docker ps -a
- 查看镜像ID:
docker images
- 保存镜像:
sudo docker commit -m="add config" -a="qjs" 4eac4bdb61be(CONTAINER ID) liangjinli/slam-docker:v1.3(自定义)
保存容器为新的镜像版本,这一步很重要,系统每次配置完环境需要重新提交,更新镜像版本,下次运行镜像,开启容器时,选择最新的版本,如果不更新就白装环境了,但是很方便版本管理。
- 保存到本地:
用容器保存和导入 docker export f299f501774c(CONTAINER ID) > hangger_server.tar docker import - new_hangger_server < hangger_server.tar 用镜像保存和导入 docker save 0fdf2b4c26d3(IMAGE ID) > hangge_server.tar docker load < hangge_server.tar
ps:
- 这种方法暂时还没弄可视化,但是是可以弄的,暂时使用可以用本地系统中的rviz显示。
- 课程环境的搭建和本地系统环境搭建是一致的,故可以参考下面。
- 该镜像装了gtsam,需要卸载后重装
本地系统环境搭建
- 安装Ubuntu18.04和ROS开发环境,参考博客:
goldqiu:三.开发记录之移动硬盘装ubuntu系统的配置、环境、各类软件安装和备份等
goldqiu:四.开发记录之ubuntu系统安装ROS和开发环境
- 安装docker
参考官方文档:
https://docs.docker.com/engine/install/ubuntu/
测试:
sudo docker pull hello-world
sudo docker run hello-world
将当前用户加入Docker Group:
为了能在非sudo
模式下使用Docker
, 需要将当前用户加入Docker Group
.
执行命令:
sudo usermod -aG docker $USER
为了使上述变更生效,请先Logout,再Login
- 安装课程环境,参考:
https://github.com/AlexGeControl/Sensor-Fusion-for-Localization-Courseware
第三方库文件见第三方库文件夹
可能需要安装:pcl-ros
sudo apt-get install ros-melodic-pcl-ros
ps:
- GeographicLib在项目工程中有,可以不用装。
- glog下载0.3.5版本源码安装。
- gflag直接github下载最新源码安装。
报错:
undefined reference to `google::FlagRegisterer::FlagRegisterer<bool>
cmakelists添加
find_package(gflags REQUIRED)
target_link_libraries(gflags)
- 安装sophus报错:
/home/qjs/pack/Sophus/sophus/so2.cpp:32:26: error: lvalue required as left operand of assignment
unit_complex_.real() = 1.;
^~
/home/qjs/pack/Sophus/sophus/so2.cpp:33:26: error: lvalue required as left operand of assignment
unit_complex_.imag() = 0.;
^~
找到如下代码:
SO2::SO2()
{
unit_complex_.real() = 1.;
unit_complex_.imag() = 0.;
}
将其修改为
SO2::SO2()
{
unit_complex_.real(1.);
unit_complex_.imag(0.);
}
- 安装ceres报错:undefined glflags_shared
cmake -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DINSTALL_HEADERS=ON -DINSTALL_SHARED_LIBS=ON -DINSTALL_STATIC_LIBS=ON -DGFLAGS_NAMESPACE=google .. 然后再编译
作业
- 代码见文件夹。
- 使用kitti_lidar_only_2011_10_03_drive_0027_synced.bag这个数据集。
- 运行:roslaunch lidar_localization hello_kitti.launch
实验室实车实现
- 代码中适配了实验室小车数据集,但没有进行真正的传感器软时间同步,暂时没有什么影响,后面可以做。
- 使用的数据集在NAS的路径为:Ausim_Public\AMR平台数据\项目自录数据集\建图定位汇总\建图-小地图-可用于定位\20220715_2022-07-15-18-51-38.bag
- 代码见文件夹。
- 运行:roslaunch lidar_localization hello_kitti.launch