1. 仿真器架构概述
这个ROS-based无人机运动规划仿真器由五个核心模块组成,构成了一个完整的闭环仿真系统。每个模块都承担着特定的功能,共同实现了从环境感知到运动控制的完整流程。
模块组成与数据流向:
- 地图生成器(map_generator):负责构建全局障碍物地图
- 局部感知器(pcl_render_node):模拟机载传感器感知局部环境
- SO3姿态控制器:将轨迹指令转换为力和姿态控制量
- 物理动力学仿真器:执行四旋翼动力学仿真
- 里程计可视化:将仿真结果可视化呈现
提示:这种模块化设计使得每个组件都可以独立开发和测试,也便于替换不同算法进行对比实验。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 全局障碍物地图生成器
2.1 核心功能实现
地图生成器模块的核心代码位于random_forest.cpp,其主要功能是构建一个以世界坐标系原点为中心的全局障碍物地图。这个地图具有以下特点:
- 静态与动态结合:既包含预先生成的静态障碍物,也支持通过RViz交互添加动态障碍物
- 坐标系固定:使用世界坐标系而非机体坐标系,便于全局路径规划
- 点云表示:采用点云数据结构存储障碍物信息
关键参数配置:
cpp复制// 典型参数配置示例
double map_size_x = 20.0; // 地图x轴范围(m)
double map_size_y = 20.0; // 地图y轴范围(m)
double map_size_z = 5.0; // 地图z轴范围(m)
double resolution = 0.1; // 障碍物分布密度
int obstacle_num = 50; // 障碍物数量
2.2 数据流与接口设计
地图生成器的工作流程如下:
-
初始化阶段:
- 读取参数服务器配置
- 调用MapGenerate()生成初始全局点云(global_cloud_)
-
运行阶段(10Hz循环):
- 发布全局点云(/map_generator/global_cloud)
- 处理RViz交互输入(/move_base_simple/goal)
回调函数设计要点:
cpp复制// RViz点击回调示例
void clickCallback(const geometry_msgs::PoseStamped& msg) {
// 将点击位置转换为障碍物
pcl::PointXYZ pt;
pt.x = msg.pose.position.x;
pt.y = msg.pose.position.y;
pt.z = msg.pose.position.z;
global_cloud_.push_back(pt);
}
``
