此示例演示如何使用PX4自动驾驶仪UAV工具箱支持包中的PX4 uORB Read和PX4 uORB Write块在uORB网络中读取和写入uORB消息。万博1manbetx
用于PX4 autopi万博1manbetxlot的UAV工具箱支持包使您能够创建与uORB中间件一起工作的Simulink模型。万博1manbetxuORB是一个异步publish() / subscribe()消息传递API,用于线程间/进程间通信。组件通过将消息发布到特定的主题来发送消息,例如sensor_accel
。其他组件通过订阅该主题来接收消息。
用于PX4 autopi万博1manbetxlot的无人机工具箱支持包包括Simulink块库,用于发送和接收指定uORB主题的消息。万博1manbetx当您为包含PX4 uORB Read和PX4 uORB W万博1manbetxrite块的Simulink模型生成代码并将其部署到Pixhawk系列飞行控制器时,控制器中的Simulink应用程序从uORB网络读取数据,并将相应的uORB主题的数据写入网络。
在本例中,您将学习如何:
创建Simul万博1manbetxink模型来发送和接收uORB消息
通过在External模式下运行模型来观察实时uORB数据
如果你是Simulink的新手,请观万博1manbetx看万博1manbetx仿真软件快速入门视频。
执行最初的设置和配置任务使用硬件设置屏万博1manbetx幕查看支持包的详细信息。
要运行此示例,您需要以下硬件:
Pixhawk系列飞行控制器
微型USB B型电缆
Micro-SD卡(已在使用期间初始硬件设置)
在本任务中,您将配置一个Simulink模型,使用PX4 uORB r万博1manbetxead块从PX4飞行控制器读取传感器数据,并通过外部模式观察数据。
1.从MATLAB toolstrip中,选择首页>刚出现的>万博1manbetx仿真软件模型,以打开Simulink开始页万博1manbetx。点击空白模型启动一个新的Simulink模型万博1manbetx。
2.在Simuli万博1manbetxnk工具栏上,选择“View > Library Browser”,打开Simulink Library Browser。单击“PX4 autopilot UAV工具万博1manbetx箱支持包”选项卡(您也可以键入px4lib在MATLAB命令窗口中)。选择PX4 uORB读写块类别
3.拖放PX4 uORB读
块到模型。
4.双击该块以打开块掩码。点击选择在“要订阅的主题”字段旁边。将出现一个弹出窗口,其中包含味精下载的PX4固件的文件夹。选择传感器加速度.msg
,然后单击开放.点击好啊关闭块掩码。
5.从库浏览器的Sim万博1manbetxulink>信号布线选项卡中,拖放总线选择器块到模型。
6.连接味精的输出PX4 uORB读
块到总线选择器块的输入端口。
7.单击Modeling > Update Model以确保传播总线信息。你可能会得到一个错误:在输入总线信号中找不到总线选择器块“无标题/总线选择器”中的选定信号“信号1”
.这个错误是预期的,它将在下一步中解决。
8.双击总线选择器块。选择???signal1
和???signal2
在右侧的列表中,单击删除.选择左侧列表中的x、y、z信号,单击选择> >.点击好啊.
9.从库浏览器的Sim万博1manbetxulink>接收器选项卡中,拖放四个显示块到模型。将总线选择器块的三个输出连接到三个显示块。连接状态
输出到第四个显示块。您的整个模型应该是这样的。
10使用USB电缆将Pixhawk系列控制器连接到主机。
11.在建模选项卡上,单击模型设置.
12.在“配置参数”对话框中,导航到硬件实现窗格:
设置硬件板到您在硬件设置屏幕中选择的相同Pixhawk系列控制器。
在目标硬件资源节中,输入Pixhawk系列控制器所连接的主机串口,在用于固件上载的串行端口字段。的Nuttx(NSH)终端的串行端口是可选的。
13.在模拟选项卡,将模拟停止时间设置为inf.
14.在硬件选项卡,在模式部分中,选择机上运行然后点击监视和优化启动信号监测和参数调整。
等待代码生成完成。每当出现指示您将飞行控制器重新连接到串行端口的对话框时,请确保单击好啊在对话框内5秒重新连接飞行控制器后。
在Pixhawk系列控制器闪烁后,等待信号监控启动。
在模拟运行时观察加速度计的值。改变板沿所有轴的位置,观察相应的加速度计沿这些轴的值。
一个预先配置的仿真软件模型万博1manbetx也是可用的,它可以帮助您读取加速度计,陀螺仪,和气压计的值使用sensor_accel
,sensor_gyro
和sensor_baro
分别uORB主题。该型号默认配置为PX4 Host Target。当硬件单板设置为“PX4 Host Target”时,可进行“Connected I/O仿真”。当您在Connected I/O中模拟一个模型时,该模型与PX4 Host Target通信,使您能够从Simulink中读写数据到PX4 Host Target。万博1manbetx
在MATLAB中执行以下命令,打开预配置模型:
开放式系统(“px4demo_uORBRead”);
在本任务和两个后续任务(任务3和任务4)中,您将使用vehicle_gps_position
uORB专题。
1.从MATLAB工具条中,选择HOME > New > Simulink Model,打开一个新万博1manbetx的Simulink模型。
2.在Simuli万博1manbetxnk工具栏上,选择“View > Library Browser”,打开Simulink Library Browser。单击“PX4 autopilot UAV工具万博1manbetx箱支持包”选项卡(您也可以键入px4lib在MATLAB命令窗口中)。选择PX4 uORB读写块类别
3.拖放PX4 uORB写入块到模型。
4.双击该块。点击选择“要发布到的主题”字段旁边。将出现一个弹出窗口,其中包含味精所选PX4固件的文件夹。选择vehicle_gps_position.msg
,然后单击开放.
点击好啊关闭块掩码。
在这个任务中,您将在task 2中创建的模型中创建一个空白uORB消息,并填充uORB主题的纬度(lat)、经度(lon)、海拔(alt)和速度(vel_m_s)字段vehicle_gps_position
.
在Simulink中,uORB消息表示为总线信号。万博1manbetx总线信号是一组Simulink信号,也可以包括其他总线信万博1manbetx号(参见万博1manbetxSimulink总线信号的例子概述)。的PX4 uORB消息
模块输出与uORB消息对应的Si万博1manbetxmulink总线信号。
1.在Simuli万博1manbetxnk工具栏上,选择视图>库浏览器以打开Simulink库浏览器。单击PX4自动驾驶仪的UAV工具箱支持包选项卡(您也可以输入命令万博1manbetxpx4lib在MATLAB命令窗口中)。选择thePX4 uORB读写块类别
2.拖放PX4 uORB消息块到模型。双击该块以打开块掩码。
3.点击选择挨着话题
字段。将出现一个弹出窗口,其中包含味精所选PX4固件的文件夹。选择vehicle_gps_position.msg
,然后单击开放.点击好啊关闭块掩码。
4.从库浏览器的Sim万博1manbetxulink>信号布线选项卡中,拖放总线分配块。
5.连接设备的输出端口PX4 uORB消息块到总线分配块的总线输入端口。连接总线分配块的输出端口到PX4 uORB写块的输入端口。
6.双击总线分配块以打开块掩码。你应该看到lat, lon, alt和vel_m_s(信号包括avehicle_gps_position
uORB主题)列在左侧。选择???signal1
在右侧的列表中,单击删除.在左侧列表中选择lat、lon、alt和vel_m_s信号,然后单击选择> >把它们移到右边。点击好啊关闭块掩码。
请注意:如果您没有看到列出的信号,请关闭总线分配块的块掩码,并单击Simulation > Update Diagram以确保总线信息已正确传播。如果你看到错误,在总线分配块中找不到选定的信号'signal1',表示总线信息尚未传播。关闭诊断查看器,并重复上述步骤。
现在可以使用表示GPS位置的随机值填充总线信号。
7.在Library 万博1manbetxBrowser中的Simulink > Sources选项卡中,拖放四个常数块到模型中。
8.将每个Constant块的输出端口连接到总线分配输入端口。
9.双击连接到总线分配的每个常量块,设置常数值(如下图所示),并将Output数据类型设置为继承:通过反向传播进行继承.
模型现在应该是这样的:
在此任务中,您将向task 3中创建的模型添加订阅者(PX4 uORB Read块),以接收发送到vehicle_gps_position
的话题。您将从消息中提取lat、lon、alt和vel_m_s信号。
1.从库浏览器中PX4自动驾驶仪的UAV工具箱万博1manbetx支持包选项卡中,拖放PX4 uORB读块到模型。
2.双击该块。点击选择挨着要订阅的主题
字段。将出现一个弹出窗口,其中包含味精所选PX4固件的文件夹。选择vehicle_gps_position.msg
,然后单击开放.点击好啊关闭块掩码。
的PX4 uORB读
块输出Simulink总线信号;万博1manbetx所以你需要从它提取lat, lon, Alt和vel_m_s信号。
3.从库浏览器的Sim万博1manbetxulink>信号布线选项卡中,拖放总线选择器块到模型。
4.连接味精将PX4 uORB读取块输出到总线选择器块的输入端口。
5.单击Modeling > Update Model以确保传播总线信息。你可能会得到错误,在输入总线信号中找不到总线选择器块“无标题/总线选择器”中的选定信号“信号1”.这个错误是预期的,将在下一步解决。
6.双击总线选择器块。选择???signal1
和???signal2
在右侧的列表中,单击删除. 在左侧列表中选择lat、lon、alt和vel_m_s信号,然后单击选择> >.点击好啊.
的PX4 uORB读
块在每个时间步骤上输出最近接收到的主题消息。Status输出表明在上一个时间步骤中是否收到消息。对于当前任务,Status输出是不需要的,你可以终止它,如下所示:
7.在库浏览器中万博1manbetx单击Simulink > sink选项卡。拖放《终结者》块到模型。
8.将PX4 uORB Read块的Status输出连接到Terminator块的输入。
下一步将帮助您配置显示提取的lat、lon、alt和vel_m_s信号。
9.从库浏览器的Sim万博1manbetxulink>接收器选项卡中,拖放四个显示块到模型。将总线选择器块的每个输出连接到每个显示块。
你的整个模型应该是这样的:
10保存模型。
在本任务中,您将定义配置参数并运行完整的模型(通过任务2到4创建),用于信号监视和参数调优。
1.打开“配置参数”对话框,并将目标硬件设置为在硬件设置屏幕中选择的Pixhawk系列控制器。
2.输入Pixhawk系列控制器连接到主机的串行端口。单击应用和好啊.
3.在模拟选项卡,将模拟停止时间设置为inf.
4.在硬件选项卡,在模式部分中,选择机上运行然后点击监视和优化启动信号监测和参数调整。
6.在模拟运行时,更改连接到的常量块的值中高音总线分配块的字段,从37到44.你可以观察到相应的变化显示块连接中高音总线选择器块的端口。
7.请注意,基本MATLAB工作区有一个或多个名称以开头的变量px4_总线_
.这些是Simulink创建的临时总线对象,不应该修改。万博1manbetx但是,将它们从工作空间中清除是安全的,因为如果需要,它们将被重新创建。
8.在硬件选项卡上,单击停止停止模拟。
一个预先配置的模型有发布/订阅块可供参考。此模型以PX4主机目标配置为默认板。当PX4主机目标设置为硬件板时,可以执行连接的I/O模拟。在MATLAB中运行以下命令以打开预配置的模型:
开放式系统(“px4demo_uORBReadWrite”);