上传文件至 /

master
贾召钱 2024-06-11 19:14:43 +08:00
parent 8181dd35bd
commit 620c948b56
1 changed files with 0 additions and 0 deletions

91
说明文档.docx Normal file
View File

@ -0,0 +1,91 @@
一.算法概述
1.1 算法解决问题
根据语义激光雷达信息,在地图上相应位置绘出对应物体
1.2 输入,输出,数据格式
输入信息ROS格式的激光雷达其中intensities并非指激光雷达点的返回强度而是语义信息
输出信息:含有语义信息和占据栅格信息的数组
1.3 目前效果
能在地图上对应位置显示出物体,且位置和尺寸符合要求
详细描述
2.1 框架图
2.1.1 语义cartographer整体流程定义接受的激光雷达格式增加语义信息维度在ROS层做处理将一帧雷达数据分割成多段并将激光雷达坐标系的点云转换到统一的小车坐标系将处理好的数据扔给前端进行多激光雷达的时间同步并转换数据格式确定激光雷达数据帧的位姿利用光光线跟踪法计算子图的语义和是否占据的概率信息压缩子图信息传输后进行多张子图融合绘成语义地图。
false
图1 语义cartographer整体流程图
2.1.2 语义地图绘制流程由N帧语义激光雷达得到语义子图对每张语义子图进行位姿变换映射到大地图上将它与cartographer原生的占据地图对齐通过栅格是否占据滤除多余的语义信息合成语义大地图。
false
图2 语义地图详细流程图
2.2 详细步骤
2.2.1 sensor_bridge.cc
SensorBridge::HandleLaserScanMessage将激光雷达点分段模拟提高激光雷达点的频率原本输出的是TimedPointCloud丢失了强度值在此处改为输出PointCloudWithIntensities
SensorBridge::HandleRangefinder将数据转到tracking坐标系下,再调用trajectory_builder_的AddSensorData进行数据的处理重载TimedPointCloudData使其返回 PointCloudWithIntensities使函数最后可以使用的TimedPointCloudData含有强度值
2.2.2local_trajectory_builder_2d.cc
LocalTrajectoryBuilder2D::AddRangeData():处理点云数据,TimedPointCloudData格式转换为TimedPointCloudOriginData继而转换为RangeData将进行扫描匹配, 将点云写成地图
2.2.3 grid_2d.h
定义栅格地图大小,概率值等
增加std::vector<std::vector<uint16>> semantics_counter_ 存储语义信息
Semantics_observer代表摄像头观测区域
2.2.4 probability_grid_range_data_inserter_2d.cc
CastRays():根据雷达点对栅格地图进行更新,修改ApplyLookupTable根据hit点的位置即语义信息更新语义值存储到semantics_counter_
2.2.5 probability_grid.cc
在ApplyLookupTableMiss()中调用ApplyLookupTableSemMiss() 增加栅格的语义概率
在ApplyLookupTableHit()中调用ApplyLookupTableSemHit() 降低栅格的语义概率
ProbabilityGrid::DrawToSubmapTexture获取压缩后的地图栅格数据增加GetColor并且多传输一个摄像头观测区域
2.2.6 occupancy_grid_node_main.cc
获取地图信息绘图并展示
::cartographer_ros::FetchSubmapTextures相应得更改解压缩函数获取正确的SubmapTexture数据
2.2.6 occupancy_grid_node_main.cc
2.2.7 submap_painter.cc
DrawTexture给函数增加color值传参给子图赋予语义信息
PaintSubmapSlicesResult PaintSubmapSlices() :跳过cairo库绘图
算法记录
3.1 语义颜色输出混乱
【问题点概述】:
多子图融合时,语义颜色输出混乱。
【事件回放】:
根据六要素进行填写,即:时间、地点、人物、事件的起因、经过、结果(可附图片)。
2022年03月下午在实验室测试动态语义地图效果时发现语义输出混乱。
【原因分析】3why分析需找到最根源的诱因
经过调试程序发现原cartographer利用cairo库绘图子图融合成大地图时语义颜色会根据不同透明度而发生叠加。
【解决方案】:
在融合多张子图时跳过cairo机制将子图的语义值剥离开来不进行叠加保持子图最新的语义值
【实验过程】:
写测试代码,查看语义输出结果。
【验收效果说明】:
语义值输出正常则说明问题解决。
四.实验环境及代码
1.实验环境
Ubuntu 18.0.4 + ROS Meldic
2.代码管理
附录:激光雷达格式转换
PointCloud