在NVIDIA Jetson中使用PX4自动驾驶仪进行硬件在环(HITL)仿真,并在Simulink中建模无人机动力学
本示例展示了如何使用无人机工具箱支持包PX4自动驾驶仪来验证部署在NVIDIA Jetson作为机载计算机以及Pixhawk硬件板上的避障算法,在HITL模式和Simulink中包含的无人机动力学。
的避障作为无人机工具箱的一部分提供的块是一种使用视觉传感器数据和目标位置计算无障碍方向的自主算法。对于这种计算密集型算法,您可以使用无人机上的机载计算机以及自动驾驶仪。NVIDIA Jetson是无人机常用的机载计算机。使用Simulink,您可以设计一个复杂的自治算法,并将其部署在NVIDIA Jetson上。
本例还展示了飞行过程中的3D场景模拟,并使用模拟相机传感器将图像传输到机载计算机。采用虚幻引擎仿真环境进行三维场景仿真和可视化。此图像可在NVIDIA Jetson中接收,并可由障碍物回避块使用。
总之,在这个例子中,
在NVIDIA Jetson上部署一个避障算法,从虚幻中获取视觉数据,并提供PX4的路径修正。
启用飞行可视化与PX4 HITL和流模拟相机图像到NVIDIA Jetson。
使用机载计算机运行并完成无人机任务。
限制:虚幻引擎仿真环境仅支持Microsoft®Windows®系统。如果您使用的是Linux系统,请跳过添加3D场景模拟步骤,仍然可以完成这个示例。
先决条件
如果您是Simulink的新手,请观看Simulink快速入门视频。
浏览PX4硬件在环系统架构文档,以了解设置用于HITL仿真的Pixhawk和Simulink所需的物理连接。
在HITL模式下配置和设置Pixhawk。有关更多信息,请参见通过QGroundControl在硬件在环(HITL)模式下设置PX4自动驾驶仪.
设置PX4固件,如为硬件在环(HITL)模拟设置PX4固件.在选择一个PX4自动驾驶仪和构建目标屏幕上,从下拉列表中选择任意一块Pixhawk系列板作为PX4 Autopilot板。本例使用Pixhawk 4。
熟悉无人机的联合仿真框架,参见无人机的虚幻引擎仿真
建议了解基于Simulink的PX4自动驾驶仪硬件在环(HITL)仿真的例子。
所需第三方软件这个例子需要第三方软件:
所需的硬件要运行这个例子,你需要以下硬件:
Pixhawk系列飞行控制器
Micro USB - b型电缆
微型sd卡插槽
Pixhawk串行端口连接器
NVIDIA Jetson &电源适配器
主机PC已配置MATLAB支持的GPU.建议使用GPU with计算能力大于5的。
在HITL模式下运行NVIDIA Jetson和Pixhawk模型的工作流
上图说明了PX4和NVIDIA Jetson HITL设置以及各个模块之间的物理通信。
这个例子使用了四个不同的Simulink模型。
飞行控制器的Simulink模型将部署在PX4自动驾驶仪上。
避障算法的Simulink模型将部署在NVIDIA Jetson上。
自主算法的Simulink模型将部署在NVIDIA Jetson上。
用于飞行可视化的Simulink模型与虚幻引擎仿真无人机。
为了避免由于同时运行三个不同的Simulink模型而导致MATLAB中的性能下降,请启动同一个MATLAB的三个单独会话。
在MATLAB的第一节课中,飞行控制器部署在自动驾驶仪上,无人机动力学模型将在与自动驾驶仪通信的主机上运行。
在MATLAB的第二节课中,将运行使用虚幻引擎仿真的Simulink飞行可视化模型。如果您选择不添加飞行可视化,则可以跳过此步骤。
在MATLAB的第三节课中,NVIDIA Jetson的Simulink模型使用Monitor & Tune Simulation与上位机的MATLAB进行通信。
步骤1:进行硬件连接,并在HITL模式下设置Pixhawk
1.使用USB电缆将Pixhawk板连接到主机计算机。
2.请确保已将Pixhawk单板配置为HITL模式通过QGroundControl在硬件在环(HITL)模式下设置PX4自动驾驶仪.
3.确保您已经设置了PX4固件,如为硬件在环(HITL)模拟设置PX4固件.
4.安装和配置您的NVIDIA Jetson网络使用NVIDIA Jetson和NVIDIA DRIVE平台的MATLAB编码器支持包.
步骤2:启动MATLAB的第一个会话和MATLAB项目
该支持包包括一个示例MATLAB项目,其中PX4飞行控制器和无人机遵循QGroundControl (QGC)中的任务设置。
1.开放的MATLAB。
2.在MATLAB命令提示符下执行以下命令打开示例MATLAB项目:
px4demo_HardwareInLoopWithOnboardComputerStart
3.Simulink项目使用PX4demo_HITLSimulinkPlant作为参考项目。无人机动力学和自动驾驶仪控制器由PX4demo_HITLSimulinkPlant项目。打开Simulink项目后,单击项目的快捷方式2 .在MATLAB窗口中,单击开放式自动驾驶控制器从PX4demo_HITLSimulinkPlant下拉列表启动PX4控制器命名Quadcopter_ControllerWithNavigation.
4.导航到导航子系统。这是一个不同的子系统使用guidanceType作为变量控制变量。在全局工作空间中定义guidanceType = 1,为本例选择导航子系统。
5.在项目的快捷方式选项卡,在PX4demo_HITLSimulinkPlant下拉列表中单击开放式无人机动力学以Simulink无人机动力学模型命名UAV_Dynamics_Autopilot_Communication.
6.打开Simulink Plant模型UAV_Dynamics_Autopilot_Communication并配置串口。选择Pixhawk与主机连接的串口。在MAVLink桥接块中添加以下机载计算机的UDP连接。有关更多信息,请参见MAVLink用于QGC、机载计算机和Simulink工厂的连接.双击MAVLink桥接块,打开块参数对话框。
a.在“MAVLink Bridge Source”和“MAVLink Bridge Sink”块中添加板载计算机(NVIDIA Jetson)的IP地址。确保您可以从主机PC上成功ping NVIDIA Jetson。输入端口号为14540。
b.在MAVLink Bridge Source块中为飞行可视化添加localhost连接。端口输入为25000。如果您选择不添加飞行可视化,请跳过此步骤。
7.复制MATLAB项目路径到剪贴板。
步骤3:配置用于HITL模式的Simulink Controller模型
1.中所提到的说明配置用于硬件在环(HITL)仿真部署的Simulink模型.
注意:在预配置的模型中不需要这些步骤。如果您更改了硬件或没有使用预配置的型号,请执行这些步骤。
2.点击构建、部署和启动从部署的部分硬件选项卡中的控制器模型Quadcopter_ControllerWithNavigation.
将为Controller模型生成代码,并自动将其部署到Pixhawk板(本例中为Pixhawk 4)。
部署完成后,会自动启动QGroundControl。
注意:如果你使用的是Ubuntu, QGC可能不会自动启动。要启动QGC,打开Terminal,进入下载QGC的位置,执行以下命令:
。/ QGroundControl.AppImage
第四步:启动MATLAB第二阶段,打开飞行可视化模型
1.打开相同MATLAB版本的第二个实例。在此MATLAB会话中,使用Simulink模型进行场景仿真和虚拟环境下的飞行可视化。
2.在当前MATLAB中导航到之前在步骤2中复制的项目路径。
3.单击.prj文件在当前MATLAB中启动相同的项目。
请确保您的主机PC已配置MATLAB支持的GPU (GPU with计算能力5)以上。
4.在项目的快捷方式选项卡,在PX4demo_HITLSimulinkPlant下拉框中,单击打开3D可视化与虚幻引擎要发射机载型号命名Unreal_3DVisualization.
在这个模型中,来自PX4自动驾驶仪的MAVLink数据通过UDP(端口:25000)接收,并用于解码无人机的位置和姿态数据。坐标转换后,将其传递给仿真三维无人机车辆飞行可视化块。
5.通过更新变量,使模拟深度传感器数据流NVIDIA JetsonenableOnboardStreaming
来1
在MATLAB工作空间。
6.的模拟3D摄像机块提供来自虚幻环境的相机图像。在这个例子中,您使用视频发送块将深度图像从相机块流到NVIDIA Jetson。双击block,打开block参数对话框。在对话框中添加板载计算机(NVIDIA Jetson)的IP地址,单击好吧.
7.在这个例子中,一个Suburban场景被用于虚幻模拟环境。要下载此场景,运行以下命令。
>>sim3d.maps.Map。下载(“郊区现场”)
运行以下命令验证地图是否已下载到磁盘上:
>>sim3d.maps.Map.local
8.双击模拟3D场景配置块,从下拉菜单中选择郊区场景作为场景名称
9.在模拟选项卡上,单击运行模拟模型。一旦模型开始运行,您将看到虚幻模拟环境启动。示例屏幕如下所示。
第五步:启动第三期MATLAB和板载模型
1.打开相同MATLAB版本的第三个实例。
2.在当前MATLAB中导航到之前在步骤2中复制的项目路径。
3.单击.prj文件在当前MATLAB中启动相同的项目。
4.在项目的快捷方式选项卡上,单击开放式避障模型要发射机载型号命名Onboard_ObstacleAvoidance.
该模型使用PX4实现了路径规划接口MAVLink序列化器而且MAVLink串并转换器块。有关更多信息,请参见PX4路径规划接口.作为该接口的一部分交换的MAVLink消息如下图所示。
5.这个例子演示了如何使用UAV工具箱中的Obstacle Avoidance block来避免障碍物。
6.导航到目标硬件资源> Board Parameters,输入NVIDIA Jetson的IP地址和登录凭据。
7.双击“UDP Send”块,打开“块参数”对话框。输入运行UAV_Dynamics_Autopilot_Communication的主机PC的IP地址作为“远程IP地址”。将Port的值输入为14580。请确保主机与板载计算机连接在同一网络中。
8.配置网络视频接收块以接收来自虚幻环境的深度数据。请注意,网络视频接收块中的端口号和压缩参数与虚幻引擎中相应的视频发送块流媒体摄像机图像相同。
9.点击监视和调优从在硬件上运行的部分硬件选项卡中的Simulink工具条。
将为控制器模型生成代码,并将自动部署到NVIDIA Jetson。NVIDIA Jetson应该开始通过监视器和调优模拟与主机通信。
注意:确保没有其他来自Simulink的部署模型正在NVIDIA Jetson中运行。如果无法验证,请在开始部署之前重新启动Pixhawk硬件板。
NVIDIA Jetson中的算法也与Plant模型通信UAV_Dynamics_Autopilot_CommunicationUDP。
第6步:运行无人机动力学模型,从QGroundControl上传任务并飞行无人机
1.在工厂模型的Simulink工具条中(UAV_Dynamics_Autopilot_Communication),在模拟选项卡上,单击运行模拟模型。
2.设置PX4参数COM_OBS_AVOID
开启PX4路径规划接口。从主菜单导航到参数并设置COM_OBS_AVOID
参数值为1
.
3.设置参数COM_DISARM_PRFLT
价值-1
.
4.在QGC中,导航到平面图.
5.这个例子提供了一个预先计划好的任务OA_simple_mission.plan你可以上传到QGC。上传预先规划的任务,单击开放模式点击本页上方的按钮(MATLAB帮助浏览器)下载计划文件(OA_simple_mission.plan).在QGC中,导航并选择OA_simple_mission.plan文件。
上传计划后,任务在QGC中可见。
6.点击QGC界面中的上传按钮,从QGroundControl上传任务。
7.导航到飞的观点查看已上传的任务。
8.在QGC开始任务。无人机应遵循任务路径。
9.在虚幻引擎中观察飞行可视化。在虚幻场景中,无人机偏离了期望的路径以避免树木。
10.去Onboard_ObstacleAvoidance在视频查看器(来自计算机视觉工具箱™)中对飞行期间流到Jetson的深度图像进行建模和验证。
故障排除
在模拟第4步中的可视化模型时,您可能会得到任何STD异常错误,例如“某些模块无法找到”。
将编译器更改为Microsoft Visual c++ 2019使用安装c++
命令来修复该问题。
开始任务时警告“回避系统不可用”。出现此警告是因为NVIDIA Jetson和PX4 HITL之间的通信未建立。
确保主机PC与NVIDIA Jetson连接到同一网络。尝试从主机PC ping NVIDIA jetson,反之亦然。此外,再次检查在MAVLink桥接块中输入的NVIDIA Jetson IP地址(如步骤2的第6点所述)和在UDP发送块中输入的主机PC IP地址(如步骤5的第7点所述)。