PX4之常用函数解读

PX4Firmware

        经常有人将Pixhawk、PX4、APM还有ArduPilot弄混。这里首先还是简要说明一下:

        Pixhawk是飞控硬件平台,PX4和ArduPilot都是开源的可以烧写到Pixhawk飞控中的自驾仪软件,PX4称为原生固件,专为Pixhawk打造。APM(Ardupilot Mega)早期也是一款自驾仪硬件,到APM3.0版本,这款基于Arduino Mega的自驾仪已经走到了它的终点。ArduPilot早期是APM自驾仪的固件,Pixhawk作为APM的升级版,也兼容ArduPilot固件,APM自驾仪卒了之后,ArduPilot现在全面支持Pixhawk,现在大家亲切的称ArduPilot固件为APM。

        PX4固件主要是用C++语言编写,使用了NuttX实时操作系统,整体软件架构不可谓不庞大。

        不知道如何开头,复述一个人工智能和机器人领域著名的莫拉维克悖论:和传统假设不同,对计算机而言,实现逻辑推理等人类高级智慧只需要相对很少的计算能力,而实现感知、运动等低等级智慧却需要巨大的计算资源。

且从系统说起吧。
 

RTFSC

Pixhawk整体逻辑大致为:

commander和navigator产生期望位置

position_estimator估计当前位置

通过pos_ctrl产生期望姿态

attitude_estimator估计当前姿态

通过att_ctrl产生期望力矩

最后通过mixer和motor_driver控制电机

一直都还只是停留在底层,什么时候能感受一下ETHz这帮人的成果呢,这才是pixhawk啊。
 

启动函数

        Pixhawk是没有main函数的,飞控上电后,会自动执行Firmware/ROMFS/px4fmu_common/init.d文件夹下的rcS 启动脚本(startup script)。这个脚本位于被编译到固件中的 ROM文件系统中。这个脚本检测可用的硬件, 加载硬件驱动,并且根据你的设置启动系统正常运行所需的有 app(任务软件 ,包括位置和姿态估计,控制遥测等)。所有属于自启动程序的脚本文件可以在init.d文件夹中找到。

        uORB是Pixhawk系统中非常重要且关键的一个模块,它肩负了整数据传输任务,所有的感器、 数据传输任务、 GPS、PPM信号等都要从芯片获取后通过uORB进行传输到各个模块进行计算处理。

        uORB 的入口点是 uorb_main函数,在这里它检查 uORB的启动参数来完成对应的功能, uORB支持 start/test/status这 3条启动参数,在 PX4的rcS启动脚本中,使用start参数来进行初始化,其他 2个参数分别用来进行uORB功能的自检和列出 uORB的当前状态。
        在rcS中使用 start参数启动uORB后uORB会创建并初始化它的设备实例,其中的实现大部分都在CDev基类完成。

rcS启动顺序

extern “C” __EXPORT int main(int agrc, char *agrv[ ]);

        argc和argv是main函数的形参,它们是程序的“命令行参数”。agrc(argument count的缩写,意思是参数个数),argv(argument vector的缩写,意思是参数向量),它是一个*char指针数组,数组中每一个元素指向命令行中的一个字符串。
        main函数是操作系统调用的,实参只能由操作系统给出。在操作命令状态下,实参是和执行文件的命令一起给出的。例如在DOS、UNIX或Linux等系统的操作命令状态下,在命令行中包括了命令名和需要传给main函数的参数。

命令行的一般形式为:

命令名 参数1 参数2 …… 参数n

命令名和各参数之间用空格分隔。命令名是可执行文件名(此文件包含main函数)。

        在rcS执行的时候,比如attitude_estimator_q_main start
        那么agrc就等于2,agrv[0]就是attitude_estimator_q_main这个字符串,argv[1]就是start。
        所以要判断agrv[1]是start还是stop。
        就像你在dos命令行里输入attitude_estimator_q start,自然就给agrc和agrv[]赋值。NuttX系统下的模块的主函数名字都是以”_main”开始的,但是调用的时候不加“_main”。

(25条消息) Pixhawk原生固件PX4之常用函数解读_FantasyJXF的博客-CSDN博客_px4是用什么语言

你可能感兴趣的:(PX4,java,开发语言)