模块四:自定义无人机接入与目标资产说明

说明目标:

前置条件:

验证目标:

01 自定义无人机接入条件

USD 能显示,不代表无人机能被 Pegasus/PX4 控制。要能飞,至少需要:

通常要准备:

内容作用
USD 资产无人机外观、body、rotor、碰撞体、传感器位置
动力学参数质量、惯量、旋翼位置、推力系数、力矩系数
车辆配置告诉 Pegasus 如何创建 Multirotor
backend 配置告诉 Pegasus 使用 PX4、ArduPilot 或自定义 backend
UI 注册让 Pegasus UI 中可以选择该无人机

02 USD 资产结构要求

如需在 Pegasus UI 的 Vehicle Model 下拉框中选择自定义无人机,需要将资产放到 Pegasus 插件的资产目录:

路径示例:

如果仅通过脚本加载,不需要出现在 Pegasus UI 中,也可以将 USD 放在项目的 assets/robots/ 下,然后在脚本中传入绝对路径或相对路径。

USD 的命名、层级和物理属性要符合 Pegasus 创建 Multirotor 的要求。也可以由脚本明确告诉 Pegasus 这些 prim 在哪里。满足这些条件后,外部 USD 资产才可能变成可控无人机。

03 Pegasus UI 注册新机型

Pegasus UI 的车辆列表来自插件源码中的 ROBOTS 字典。需要修改的文件是:

在这个文件里可以看到类似内容:

如果要新增 MyDrone,可以按这个思路加一项:

然后把 USD 和它引用的 mesh、材质、子层文件放到:

修改后需要重启 Isaac Sim,重新启用 Pegasus 插件。这样 UI 的 Vehicle Model 下拉框里才会出现新无人机。

Pegasus UI 加载车辆时会走 ui/ui_delegate.py。核心逻辑是根据 robot_keyROBOTS 中取 USD 路径,然后调用 Multirotor(...) 创建无人机。也就是说,params.py 只解决“UI 能否选到资产”。无人机能否飞行,还取决于 USD 结构、动力学参数和 PX4 backend 是否匹配。

04 脚本加载无人机

替换为自定义无人机时,通常需要修改:

配置说明
DRONE_ASSET_USD指向新的无人机 USD
DRONE_PRIM加载到 Isaac stage 的 prim 路径,常用 /World/quadrotor
DRONE_BODY_PRIM机体刚体路径,通常是 ${DRONE_PRIM}/body
传感器 prim 路径如果无人机带传感器,需要同步修改对应路径
spawn 配置出生位置和姿态,可以放在脚本参数或配置文件里

加载脚本的核心思路是:

这种方式适合单独加载无人机,也适合在简单场景里验证自定义 USD 能不能被 Pegasus 创建和控制。

05 绑定已有 /World/quadrotor

有时无人机已经写在某个 USD 文件里,不需要 Pegasus 再加载一次。这个 USD 加载后,stage 中已经存在:

这种情况下不能再调用 Multirotor(DRONE_PRIM, DRONE_ASSET_USD, ...) 重复加载,否则场景里可能出现两个无人机,或者 prim 路径冲突。正确做法是先加载 USD,让 /World/quadrotor 出现在 stage 中,再让 Pegasus 绑定这个已有 prim。

绑定已有 prim 的思路如下:

参数含义:

参数含义
DRONE_PRIM已经存在的无人机 prim,例如 /World/quadrotor
usd_file=""不再新增引用 USD,因为资产已经在 stage 里
init_pos=None不再设置出生点,使用 USD 当前位姿
init_orientation=None不再设置出生姿态,使用 USD 当前姿态
attach_existing=True告诉 Pegasus 绑定已有 prim,而不是创建新 prim

绑定已有 prim 前,先确认:

06 自定义无人机资产说明

项目
无人机 prim/World/quadrotor
机体 prim/World/quadrotor/body
无人机资产本项目包中的 Sunray150 自定义无人机资产
资产入口assets/robots/sunray150_with_mid360_cargo/sunray150_with_mid360_cargo.usda

当前仓库里的资产目录名来自原始建模文件。使用时可将其作为自定义无人机示例资产,无需关注旧项目任务逻辑。

Pegasus UI 中出现自定义无人机资产,说明 UI 至少已经识别到注册项或资产路径。

Pegasus UI 中出现自定义无人机资产

06.1 独立货舱资产与控制脚本

如果需要单独使用货舱,无需将其挂载到无人机上。项目包中已经单独放置一个货舱 USD,可以直接加载到 Isaac Sim 场景中。

货舱资产位置:

货舱和无人机是分开的两个对象。无人机章节说明机体、旋翼和 PX4 控制,货舱章节说明单独加载的附加资产和门控制话题。

加载、控制命令和 ROS 2 话题的完整说明见:

07 自定义无人机飞行问题排查

Iris 能飞而自定义无人机不能飞时,Pegasus、PX4、QGC 基础链路通常已经连通。问题更可能出现在自定义无人机:

Pegasus 不能直接控制任意可显示模型。它需要能找到并绑定可控制的结构:

09 最终检查清单

基础环境:

官方 Iris:

ROS 2 Offboard:

自定义无人机:

货舱: