查看: 659|回复: 1

最近想要好好学一下px4开源飞控代码,应该怎么入手,从哪里 ...

[复制链接]

22

主题

610

帖子

1216

积分

金牌飞友

Rank: 6Rank: 6

积分
1216
飞币
591
注册时间
2017-8-18
发表于 2022-10-25 22:03:30 | 显示全部楼层 |阅读模式
px4开源飞控代码学习

22

主题

691

帖子

1365

积分

金牌飞友

Rank: 6Rank: 6

积分
1365
飞币
672
注册时间
2017-8-30
发表于 2022-10-25 22:15:05 | 显示全部楼层
无人机开发调试,飞控日志是非常关键的部分。
有一个笑话,说没有什么问题是一个日志不能解决的,如果有,那就再来一个。
虽然是笑话,不过确是反映了飞控日志的重要性,那么这一篇我们来聊一下PX4的日志库。
我们分两部分来讲

  • PX4日志库的实现原理
  • PX4常用的日志消息
实现原理

PX4的日志库实现做得非常好,用户可以仅增加一行代码即可将自己需要的数据增加到日志中。
因而这一部分对于大部分同学的作用不大,毕竟大多数开发者都是基于PX4的框架开发应用层或者算法层,底层大多情况不需要过于关心。
PX4的日志库是基于uORB消息机制实现的,简单而言就是监听需要记录日志的消息,有数据更新则copy写入SD卡中,原理非常简单。
这样的设计的好处是用户使用非常简单,仅需要将需要记录的消息添加到日志监听列表中 add_topic()。
如果同学使用APM开源飞控,添加飞控日志,会发现比PX4要复杂一些,需要手动修改不少地方,如果多人同时修改日志容易引起冲突,比如日志id的定义冲突。
下图简要梳理一下日志系统工作的原理


最近想要好好学一下px4开源飞控代码,应该怎么入手,从哪里 ...-1.jpg

由图可以知道,日志的记录主要由:

  • 初始化添加需要记录的日志列表
  • 日志监听线程 Logger::run()
  • 日志写入线程 LogWriterFile::run()
日志监听和日志写入为什么分为两个线程,感兴趣的同学可以研究一下,这里就不深入讨论了。
PX4常用的日志消息

我们在飞控开发和使用中主要需要关注哪些数据呢。我们可以将日志数据大致分为一下几类:

  • 传感器数据:陀螺仪、加速度计、罗盘、gps等等
  • 控制指令:遥控器输入、地面站指令、航点任务指令
  • 输出指令:控制信号的输出
  • 飞行状态信息:飞行姿态、飞行模式、解锁状态等
  • 控制状态信息:位置、速度、姿态、角速度等控制指令
  • ekf信息:传感器融合状态
所有的日志消息都可以在 /msg 路径下找到。
传感器数据

传感器数据消息包括:

  • sensor_gyro:陀螺仪数据
  • sensor_accel:加速度计数据
  • sensor_mag:罗盘数据
  • sensor_baro:气压计数据
  • sensor_gps:gps数据
很多的飞行问题都是由于传感器异常引起的,通过传感器的状态即可定位故障原因。
比较容易出现问题的有罗盘和gps,引起飞机跑飞炸鸡的概率比较高一些。
其它传感器出问题的概率会稍微低一些,如果你比较幸运也会发现一些奇怪的现象,比如陀螺仪或者加速度计某个轴的数据异常,可以通过对比多个传感器数据发现。
控制指令

控制指令消息包括:

  • rc_channels:遥控器输入
  • navigator_mission_item:航点任务指令
  • vehicle_command:地面站/nsh等终端发送的控制指令
输出指令

执行机构的故障也是飞行炸鸡的主要问题之一,通过分析飞控的控制输出可以大致定位是否是执行机构的问题。

  • actuator_outputs:飞控输出的控制信号
飞行状态信息


  • vehicle_local_position:位置与速度信息
  • vehicle_attitude:飞行姿态数据
  • vehicle_status:飞行状态数据,包括解锁、起飞、失控等状态数据
  • commander_state:飞行模式
控制状态信息

由控制状态信息可以分析飞行的性能,比如分析稳定性,控制精度、响应速度等等。

  • vehicle_local_position_setpoint:位置与速度控制指令
  • vehicle_attitude_setpoint:姿态控制指令
  • vehicle_rates_setpoint:角速率控制指令
ekf信息

ekf信息是飞控的传感器融合状态数据,包括观测量、协方差、融合状态、异常标志等。
PX4的ekf状态机还是满复杂的,这里不深入讨论,后面讲到px4的ekf2模块时再详细讲吧。

PX4还有很多其它的日志记录,也反应了很多的飞行状态信息,比如cpuload记录了飞控cpu和内存的占用率,radio_status记录了遥控器信号质量等等,感兴趣的同学可以大致浏览一下/msg文件夹。
当然PX4现有的日志消息也不能反映飞控的所有状态信息,在遇到特定的异常时不妨增加一些自己的调试信息,有助于分析问题。

往期分享:
AcmeGCS-12-地图与任务规划优化
再见2021,你好2022
PX4-10-系统启动流程

这里会不定期更新一些我整理的无人机相关知识,欢迎关注分享。
您需要登录后才可以回帖 登录 | 加入联盟

本版积分规则

快速回复 返回顶部 返回列表