LIO-SAM激光建图操作总结
一、准备工作
打开小车激光雷达,连接wifi,输入密码进行连接。代码如下:
wifi:Alkaid_WH2
ssh khadas@192.168.2.20
password:12345678
二、基本操作流程
由于激光雷达中内置LIO-SAM导航算法,但不具备建图算法,故需要利用16线激光雷达进行激光数据采集和本地建图,最后将建好的图导入激光雷达中进行定位导航,定位精度可达厘米级。共包含四个步骤。
第一步
开启激光雷达进行扫描室内的环境,并将扫描到的数据记录到.bag文件中。代码如下:
cd codebase/
cd robot_project/
启动激光和imu方法1:
./locallization.sh #相关启动命令可以在该sh文件夹中进行查看
方法2:
roslaunch yesense_driver yesense_driver.launch
roslaunch velodyne_pointcloud VLP16_points.launch
记录数据到bag
rosbag record /imu/data /velodyne_points /scan
传输到本地电脑
scp 2021.bag luoluolll@192.168.2.52:/home/luoluo/
第二步
将记录到的数据包导入本地电脑中,并配置lio-sam建图算法环境,代码github地址为GitHub - TixiaoShan/LIO-SAM: LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping
重放.bag数据,并开启lio-sam建图算法。代码如下:
roslaunch lio_sam run.launch
rosbag play --clock 2021.bag
第三步
将本地生成的地图数据导入到激光雷达中。
将生成的cornerMap.pcd GridsCloud.pcd sufaceMap.pcd trajectory_wheel.pcd放入相应位置map/mrd
第四步
启动小车激光雷达和Imu进行定位可使用tf监听,监听位置信息
cd codebase/
cd robot_project/
启动激光和imu方法1:
./locallization.sh #相关启动命令可以在该sh文件夹中进行查看
方法2:
roslaunch yesense_driver yesense_driver.launch
roslaunch velodyne_pointcloud VLP16_points.launch
注意事项
小车行驶过程中尽可能缓慢,尤其是拐弯的时候,防止小车因为打滑或者速度太快扫描数据量不足导致建图精度不够。
室内三维重建采用的是https://github.com/PRBonn/puma代码,具体操作流程跟上面基本相似,都需要将数据导入本地进行建图,并配置本地代码环境。
附录:学习笔记
python代码不用编译,但要设置为可执行文件
chmod +x *.py
rm filename 删除文件
rmdir dirname 删除空目录
rm -rf dirname 删除非空目录
mv file1 file2 将文件1重命名为文件2
mv file1 dir1
rostopic -h查看topic的所有操作
rospack 获取程序包的相关信息
rospack find [package]
#torch <文件名>在当前路径下新建文件
find /etc/ -name "*.conf"
1.#电脑
rostopic pub /cma_vel geometry_msgs/Twist tab补全
rqt_graph计算图
rosnode info /imu 节点信息
rosmag show 显示节点信息类型
rosservice list
从某一时刻开始保存数据
rosbag record -a -O cmd_record(开始移动
数据复现:
rosbag play cmd_record.bag
rosservice call <服务名> #双击自动补全请求数据
1.1如何配置CMakeList.txt中的编译规则
1)设置需要编译的代码和生成的可执行文件
2)设置链接库
3)添加依赖项
2.创建工作空间
src:代码空间 build:编译空间 devel:开发空间 install:安装空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
编译工作空间
cd ~/catkin_ws/
catkin_make
source devel/setup.bash
echo $ROS_PACKAGE_PATH
创建功能包
cd ~/catkin_ws/src
catkin_creat_pkg <package_name> [depend1] [depend2] [depend3]
编译功能包
cd ~/catkin_ws/
catkin_make
source devel/setup.bash
注释:c++文件需要编译功能包,.py文件可以直接运行.py文件,无需编译
2.1如何实现一个发布者
1)初始化ROS节点
2)向ROS Master注册节点信息,包括发布的话题名和话题中的消息类型
3)创建消息类型
4)按照一定的频率循环发布消息
2.2如何实现一个订阅者
1)初始化ros节点
2)订阅需要的话题
3)循环等待话题消息,接收到消息后进入回调函数
4)在回调函数中完成消息处理
3 话题消息自定义与使用
1)定义msg文件
2)在package.xml中添加功能包依赖
3)在CMakeLists.txt添加编译选项
4)编译生成语言相关文件
4Client客户端编程实现(服务模型
1)初始化ros节点
2)创建一个Client实例
3)发布服务请求数据
4)等待server处理之后的应答结果
5服务端Service的编程实现(如何定义一个服务器
1)初始化ROS节点
2)创建Server实例
3)循环等待服务请求,进入回调函数
4)在回调函数中完成服务功能的处理,并反馈应答数据
6自定义服务数据
1)定义srv文件
2)在package.xml中添加功能包依赖
3)在CMakeLists.txt添加编译选项
4)编译生成语言相关文件
7参数的使用
rosparam list 列出当前所有参数
rosparam get param_key显示某个参数值
rosparam set param_key param_value 设置某个参数值
rosparam dump file_name 将参数保存到文件
rosparam load file_name *.yaml 从文件读取参数
rosparam delete param_key删除参数
如何获取/设置参数
1)初始化ROS节点
2)get函数获取参数
3)set函数设置参数
8坐标管理
rosrun tf view_frames 查看当前系统的所有
rosrun tf tf_echo turtle1 turtle2 查看两个坐标系间的转换关系
Rotation显示的是角度的相对变换:in Quaternion是用四元数的方法显示;in RPY(radian)是相对于xyz轴的弧度变换;in RPY(degree)是相对于xyz轴的角度变换;三种表示表达的内容一致
9tf广播与监听器
9.1如何实现一个tf广播器
1)定义TF广播器
2)创建坐标变换值
3)发布坐标变换
10launch文件 xml语言
<launch> launch文件中的根元素采用<launch>标签定义
<node> 启动节点
<node pkg=”package-name” type=”executable-name” name=”node-name”/>
pkg:节点所在的功能包的名称
type:节点的可执行文件名称
name:节点运行时的名称
可选参数:output,respawn,required,ns,args
param整个ros服务,arg仅当前launch文件使用
10常见可视化工具使用
rqt_graph
rqt_plot 数据绘图
TF监听
rosrun tf view_frames#监视tf信息
evince frames.pdf查看生成的pdf
rosrun rqt_tf_tree rqt_tf_tree#TF树
rosrun rqt_graph rqt_graph#节点关系树
rosrun tf tf_echo [reference_frame] [target_frame]#监听两个坐标系之间的坐标变化关系