学习记录(5)

1、命令响应与状态切换
 在PX4中负责状态切换的模块为commander,其主要的功能如下所述:
(1)启动/停止/查看进程(start/stop/status):
 当执行commander start后,系统调用Commnader::run()函数,并为此函数创建一个叫做commander的进程,同时Commnader::run()函数中创建了一个叫做commander_low_prio的低优先级线程。
 当执行commander stop会终止commander进程和commander_low_prio线程。
 当执行commander status时,显示当前飞控的相关内容。其中显示飞控的运动类型(type)、安全开关状态(safety)、电源状态(power state valid)、起飞点坐标(home position)全局坐标系和本地坐标系、数传状态(datalink)、主状态(main state)、导航状态(nav state)、锁定状态(arming)等。
(2)传感器校准(calibrate):
 传感器进行校准,校准选项有4个,分别为accel、gyro、mag、level、airspeed。可以分别执行下面命令来对加速计、陀螺仪、磁罗盘、水平仪和空速计做校准,在校准方式与使用地面站对传感器校准的过程是一致的。
(3)行前检查(check):
 针对飞控当前的状态来进行行前检查,并显示当前飞控的状态是否达到飞行的条件。
(4)锁定/解锁/起降/模态切换命令(arm/disarm/takeoff/land/transition):
 一些功能在执行之前需要有前提条件,在前提条件达到之后才能实现状态的切换。例如在航前检查未通过时是禁止直接用commander arm对飞控解锁的。
(5)主状态模式(mode)
 mode选项中有13个选项,这13个选项就是飞控的13个飞行模式如下:
 manual:MAIN_STATE_MANUAL:手动模式
 altctl:MAIN_STATE_ALTCTL:定高模式
 posctl:MAIN_STATE_POSCTL:位置模式
 auto:mission:MAIN_STATE_AUTO_MISSION:任务模式
 auto:loiter:MAIN_STATE_AUTO_LOITER:悬停模式
 auto:rtl:MAIN_STATE_AUTO_RTL:返航模式
 acro:MAIN_STATE_ACRO:特级模式
 offboard::MAIN_STATE_OFFBOARD:离线模式
 stabilized:MAIN_STATE_STAB:增稳模式
 rattitude:MAIN_STATE_RATTITUDE:姿态特级模式
 auto:takeoff:MAIN_STATE_AUTO_TAKEOFF:自动起飞
 auto:land:MAIN_STATE_AUTO_LAND:自动降落
 flowtarget:MAIN_STATE_FLOW_TARGET:跟随模式
(6)主要逻辑:
 Commander::run()函数中定义了一个while循环结构,这个循环结构在commander启动后就一直在运行,直到commander停止后才结束。主要功能
就是根据当前状态来为飞控做状态切换。
在这里插入图片描述
(7)三种重要飞行状态的处理过程
1)arming_state解锁/锁定状态
 表示无人机在整个飞行过程中可能出现的基本状态。六种基本状态之间可以进行互相转换,但是转化具有一定的约束条件。主要有如下状态:
在这里插入图片描述
2)main_state主状态
 主状态即无人机的飞行模式。切换主状态就是切换飞行模式,使无人机进入不同的飞行控制逻辑当中。飞控的主状态不可以任意切换,切换到不同的主状态需要不同的前提条件。具体状态如下:
在这里插入图片描述
3)导航状态nav_state
 无人机会根据当前状态与不同的条件对导航状态进行降级评估,也就是说如果当前飞行模式的必要条件如果不满足,则会切入到一个较为安全的导航状态。在正常情况下,导航状态值会被保持与主状态一致
在这里插入图片描述

2、Mavlink服务
 Mavlink为无人机与外部通信的接口。
 mavlink文件夹中的内容是mavlink协议所要用的头文件内容,实际上就是mavlink各类协议的定义部分和公共调用函数部分,不是飞控与地面站通信的功能实现。
 Mavlink服务是无人机与外部系统通信的数据总线源代码位置在src/modules/mavlink中。主要包括发送和接收两个大的方向:在发送功能中飞控程序将无人机当前的主状态、导航状态、姿态、速度、位置等信息发送给地面站程序,以便地面站程序能够实时了解无人机的状态。于此同时,地面站程序可以向飞机发送特定的指令和飞行航线,例如:对飞控锁定/解锁、切换飞行状态、上传飞行任务航迹点等。数据在飞控和地面站交互数据的过程都是通过Malvink协议来完成的。
MavlinkStream是所有周期下发消息类的基类,它定义了整个周期下发消息统一格式,包括消息ID、消息名称、消息大小、发送频率、最近发送时间、实际发送函数等等。其它实际消息都继承了MavlinkStream类。在实际消息发送时使用MavlinkStream的指针对象指向每一个实际的子类对象,然后通过这个指针来统一发送消息。
MavlinkReceiver负责Malvink消息的接收,解析和处理工作。从底层链路读取数据;解析Mavlink消息数据;处理一般消息和命令;处理任务相关消息;处理参数相关消息;处理文件传输协议等相关内容。在消息接收过程中,MavlinkReceiver并没有将消息转换为具体的不同类型的消息,而是直接将消息交给不同的业务功能自行处理。
MavlinkMissionManager主要用于地面站与飞控之间传输任务之间相关数据,包括航迹点、电子围栏点、集结点等相关内容。主要实现接收地面站请求任务数据,向地面站发送任务数据,将任务数据保存到SDCard当中,或从SDCard中读取任务数据三部分任务。
MavlinkParametersManager主要负责处理地面站向飞控发送参数读写的相关功能。主要分为3个部分:处理参数请求列表、设置参数、读取参数。
MavlinkFTP是一个文件传输服务,负责处理所有地面站向飞控传输的文件相关操作,包括文件夹的创建,删除,显示列表和文件的创建,读写,删除等等一系列功能。

3、自动飞行Navigator
 该部分代码在PX4的Firmware/src/modules/navigator模块当中,此模块名为Navigator,即航线规划和自动飞行。
 导航状态在Navigator都会做出响应的处理。在Navigator中定义了一个NavigatorMode类,同时定义了很多用于处理不同模式的子类,这些子类继承了NavigatorMode,根据不同状态来执行不同模式下的处理函数。
 整个导航模块的主功能函数在Navigator::run()中执行,主要负责订阅并获取相关的uORB内容,包括全局坐标系(vehicle_global_position)和本地坐标系(vehicle_local_position)的位置数据、GPS导航(vehicle_gps_position)位置数据和无人机状态(vehicle_status)等相关数据。在主循环中接收无人机命令(vehicle_command)这个uORB的相关指令并做出响应的响应。然后在根据最终的导航状态(vehicle_status中的nav_state)完成导航系统。
1)自动飞行任务模式Mission
 Mission类的核心功能概括为以下三点:
 1.设定当前飞行的目标航迹点。
 2.判断无人机是否已经到达目标航迹点。
 3.到达目标点后执行指定动作,并设定下一个目标航迹点。
&emso;核心如上所述,其他的功能就是在这些核心功能的基础上做了很多扩展功能,来提高程序的稳定性、扩展性等。
 mission_item_to_position_setpoint()函数用于设定一个任务点作为飞行的目标点和is_mission_item_reached()函数用于判断无人机的当前位置是否已经到达了目标点。这两个函数是自动飞行最为关键的两个函数。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值