Autonomous Exploration笔记

文章详细介绍了ROS环境中的一个探索系统,包括移动机器人模拟器、传感器模拟、局部路径规划器和地形分析工具。地形分析通过分割点云识别可行驶区域,用于避障。local_planner功能包负责局部路径规划和轨迹跟踪,而terrain_analysis进行地面分割和障碍物识别。此外,还提到了velodyne激光雷达模拟器和waypoint发布工具,用于导航和路径设定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

探索环境部分主要包括移动双轮差速机器人模拟器,传感器模拟器,局部路径规划器,可视化工具,路点发布example,路点发布rviz插件,地形分析程序,扩展地形分析程序等.

主要的程序功能由terrain_analysis和local_planner这两个功能包

loam_interface

loam的接口,作用是将loam输出的里程计进行坐标系转换,同时将单帧点云装换到全局坐标系map下面输入给localPlanner.

local_planner

局部路径规划planner,输入机器人里程计和目标路点,输出控制指令cmd_vel.用于局部路径规划导航,其中包括了localPlanner和pathFoller两部分,localplanner作用是规划局部路径,pathFollower作用是根据规划的局部轨迹进行轨迹跟踪,核心思想和pid差不多.

terrain_analysis(主要是地面分割)

地形分析,叠加多帧点云,将机器人周围区域的地面进行可行驶区域分析,不能通行的区域会以点云的形式传输给localPlanner,用于localPlanner避障.

terrain_analysis_ext

扩展地形分析,从rviz结果来看是对更大区域的地形进行了可行驶区域进行分析,具体代码内容还没有看.

vehicle_simulator

该ros包主要功能是实现了一个双轮差动底盘的模拟,接收cmd_vel速度信息,自己手写的机器人运动学微分方程来对机器人位姿进行推算,从而输出里程计odometry,而gazebo只是用来做模型显示.该包中包含了CMU制作的几个探索gazebo world,分别包含了不同的环境类型.

velodyne_simulator

velodyne激光雷达模拟器,velodyne开源gazebo插件

visualization_tools

可视化工具,将探索过程中的三个实验指标曲线进行可视化,通过matplotlib绘图显示出来,包括探索体积 探索路程 每次规划计算时间.

waypoint_example

路点发布example程序,将设置好的路点写到data目录下面,运行就能安装顺序发布路点,从而进行逐个路点导航.

waypoint_rviz_plugin

waypoint发布的rviz插件,运行此插件后,rviz就能通过waypoint按钮鼠标点击发布路点,直接进行导航.

tare的sensor_coverage_planner_ground.cpp   1326行的回调函数execute才是全部代码核心循环执行部分

CMU所提供的点云地面分割算法在其提供的仿真环境下,效果比较明显,可以有效的识别地面与障碍物。

首先还是对参数简单的介绍一下:

double scanVoxelSize = 0.05;---点云下采样
double decayTime = 2.0;---    点云时间差阈值 大于则不会被处理
double noDecayDis = 4.0;---    点云距离阈值 小于该阈值不考虑时间差
double clearingDis = 8.0;---    该距离外的点会被清除
bool clearingCloud = false;---    清除距离外的点云
bool useSorting = true;
double quantileZ = 0.25;---    考虑地面附近高程最小值会改变
bool considerDrop = false;
bool limitGroundLift = false;
double maxGroundLift = 0.15;
bool clearDyObs = false;
double minDyObsDis = 0.3;
double minDyObsAngle = 0;
double minDyObsRelZ = -0.5;
double minDyObsVFOV = -16.0;
double maxDyObsVFOV = 16.0;
int minDyObsPointNum = 1;
bool noDataObstacle = false;
int noDataBlockSkipNum = 0;
int minBlockPointNum = 10;---计算有效高程的最小点云数量
double vehicleHeight = 1.5;---车辆的高度
int voxelPointUpdateThre = 100;---需要处理的体素网格点云数量最小值
double voxelTimeUpdateThre = 2.0;---更新体素网格时间阈值
double minRelZ = -1.5;---点云处理的最小高度
double maxRelZ = 0.2;---点云处理的最大高度
double disRatioZ = 0.2;---点云处理的高度与距离的比例
// terrain voxel parameters
float terrainVoxelSize = 1.0;---地形的分辨率
int terrainVoxelShiftX = 0;---地形中心与车体的偏移量
int terrainVoxelShiftY = 0;---地形中心与车体的偏移量
const int terrainVoxelWidth = 21;---地形的宽度
int terrainVoxelHalfWidth = (terrainVoxelWidth - 1) / 2;
const int terrainVoxelNum = terrainVoxelWidth * terrainVoxelWidth;
// planar voxel parameters
float planarVoxelSize = 0.2;---平面的分辨率
const int planarVoxelWidth = 51;---平面的宽度
int planarVoxelHalfWidth = (planarVoxelWidth - 1) / 2;
const int planarVoxelNum = planarVoxelWidth * planarVoxelWidth;

和 LocalPlanner 中一样,地形分割所接收到的点云信息同样也是在map坐标系下,因此首先要将其转换到车体坐标系下,即base_link,还包括点云的裁剪。在进行地面分割之前,做了一个点云滚动的操作。如下图所示,紫色的点云为 terrainVoxelCloud 地形,其他彩色则为分割后的结果,可发现其分割的区域并不完全是地形点云。因此猜想,这个点云滚动的操作,可能是为了同步点云和车辆的位置,毕竟点云是在map坐标下下的,比如说因为某些延迟,导致车辆与切割的点云信息存在偏差。当偏差大于 terrainVoxelSize 一个格子大小时,就通过翻滚,将车辆位置与点云位置进行配准。

.................参考以下文章。

原文链接:https://blog.csdn.net/qq_39266065/article/details/120445189

2.terrain_analysis

terrain_analysis是一种进行地面点云分割的算法,其主要的程序流程如下图。

原文链接:https://blog.csdn.net/lizjiwei/article/details/124000855

CMU的自主环境探索利用matlab生成前向三次样条路径点

在CMU开源的自主环境探索算法中,机器人或者无人机的主要是靠matlab进行前向三次样条曲线生成路径点的方式进行的,这部分程序在matlab中运行并且生成相应的文件,从而为local_planner提供帮助。

float score = (1 - sqrt(sqrt(dirWeight * dirDiff))) * rotDirW * rotDirW * rotDirW * rotDirW * penaltyScore;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值