在学习了无人机飞控固件开发教程 - 网易云课堂 (163.com)和Ardupilot固件二次开发-初级 - 网易云课堂 (163.com)后,想着跟随视频脚步写个对RGBLed
灯的控制,但所谓是“一看就会,一写就废”,作为身处飞控门外的小白,在实际编写代码的过程中还是遇到了挺多困难的;最典型的就是明明是按照视频一步
步来的,但是别人的就是可以编译通过,而自己的则一直是满江红,最后在结合了两个教学视频知识点的基础上终于完成了对RGBLed的控制。
1、在ardupilot中对RGBLed的控制是在l路径librariesAP_Notify下,复制该文件夹,并粘贴在libraries下,根据自己的喜好更换文件夹名称
我这里将其命名为:AP_My_Notify,并将其目录下对本次试验没有用的文件删除,同时将各文件进行重命名,这里在每个文件名称前面加上“My”
将文件复制并重命名好后,需要修改所使用到的类,
2、对所有的类进行重命名操作后,将所需要替换的地方全部替换掉;
3、在My_RGBLed.cpp中对void My_RGBLed::update_colours(void)进行修改,改为:
// _scheduled_update - updates _red, _green, _blue according to notify flags uint8_t _i_Step = 0; void My_RGBLed::update_colours(void) { uint8_t brightness = _led_bright; switch (_i_Step) { case 0: _red_des = brightness; _blue_des = _led_off; _green_des = _led_off; _i_Step = 1; break; case 1: _red_des = _led_off; _blue_des = brightness; _green_des = _led_off; _i_Step = 2; break; case 2: _red_des = _led_off; _blue_des = _led_off; _green_des = brightness; _i_Step = 0; break; } }
该部分程序意思为控制RGBLed灯泡红、蓝、绿,三种颜色依次点亮,并循环执行;
4、修改好底层程序后开始修改上层应用
在修改上层应用之前需要先让程序识别到我们自己定义的程序,这里需要打开ArduCopterwscript和ArduCoptermake.inc,在对应的文件中添加上我们自定义的文件夹,如下所示:
5、开始对顶层应用进行修改:
①、在头文件Copter.h中导入我们自定义的头文件#include <AP_My_Notify/My_AP_Notify.h>:
创建自定义类的对象:
创建一个leds.cpp的文件,用于对底层函数的调用;
将函数添加到任务列表
对init_ardupilot函数进行修改,将自定义的功能在这里初始化(由于这里自定义的是对RGBLed的控制,因此要将原来的AP_Notify的初始化做屏蔽处理)
此时可对程序编译,若编译通过,将固件烧录进Pixhawk上的灯会红绿蓝三色交替闪烁: