今天我们还是实现RGBled闪烁,不同的是今天我们在libraries自建一个文件夹,通过我们自建的文件夹实现RGBled闪烁,大家能动手实践的一定动手实践,创建自定义文件的过程大同小异,不论什么版本,基本思路都是差不多的。
1.复制文件夹,修改文件夹名称
在路径libraries\AP_Notify下,复制该文件夹,并粘贴在libraries下,根据自己的喜好更换文件夹名称
我这里将其命名为:AP_My_Notify,并将其目录下对本次试验没有用的文件删除,同时将各文件进行重命名,这里在每个文件名称前面加上“My”
2.修改类名称
接下来对我们所修改的文件里面的类名称进行修改,逐个修改,所有的文件里名称都要修改,我这里是在每个类前面加一个“My_”,
所有的都需要更改,一个个的改,或者更改所有匹配项(容易分不清改动的地方),我就不一一的给大家展示了,关于这篇文章后面可能会出个视频带大家实践学习。
3.删除不需要的头文件
AP_Notify.cpp里面的头文件删除不需要的
原文件中的头文件
删除头文件后
另外My_AP_Notify.cpp和My_AP_Notify.h结尾有一个notify需要自己改个名字防止程序重定义
4.删除add_backends里面的不需要的
在My_AP_Notify.cpp中void My_AP_Notify::add_backends(void)删除里面不需要的后端
5.修改上层应用
在修改上层应用之前需要先让程序识别到我们自己定义的程序,这里需要打开ArduSub\wscript或ArduSub\make.inc,在对应的文件中添加上我们自定义的文件夹,如下所示:我用的是waf编译,所以只更改ArduSub\wscript
6.开始对顶层应用进行修改:
在头文件Sub.h中导入我们自定义的头文件#include <AP_My_Notify/My_AP_Notify.h>:
7.创建自定义类的对象:
8.在ArduSub文件夹中创建一个leds.cpp的文件,用于对底层函数的调用;
这里创建的函数要在Sub.h里面声明一下
9.将函数添加到任务列表
10.对init_ardupilot函数进行修改,将自定义的功能在这里初始化(由于这里自定义的是对RGBLed的控制,因此要将原来的AP_Notify的初始化做屏蔽处理)
11.编译看是否有错
在这过程中可能会遇到各种报错,大家逐步的更重一下吧,我在这里例举几个并说出解决办法
①检测到 #include 错误。请更新 includePath。已为此翻译单元(/home/wby/ardupilot自定义/libraries/AP_My_Notify/My_AP_Notify.cpp)禁用波形曲线。C/C++(1696) 无法打开 源 文件 "include/mavlink/v2.0/ardupilotmega/version.h" (dependency of "GCS_MAVLink/GCS_MAVLink.h")C/C++(1696)
这里会出现例如#include "My_AP_Notify.h"头文件无法识别,下面有波浪线,最后报错是下面这种情况
解决办法是在ardupilot目录下搜索version.h文件查看位置,然后更新 includePath
使用 find
命令在整个项目中搜索 version.h
文件:
在终端输入命令find . -name version.h
从 find
命令的输出结果来看,项目中存在多个 version.h
文件,但它们都位于不同的目录中。特别是,缺失的 version.h
文件应该位于以下路径:
include/mavlink/v2.0/ardupilotmega/version.h
但在输出中,只有以下路径包含 ardupilotmega/version.h
文件:
./build/fmuv3/libraries/GCS_MAVLink/include/mavlink/v2.0/ardupilotmega/version.h
这个路径是构建输出目录中的路径,而不是源代码目录中的路径。这意味着编译器在构建时可以找到这个文件,但在 IDE 或代码编辑器的 includePath
中可能没有正确配置。
解决步骤
你的 IDE 或编译器可能需要更新 includePath
配置,以确保它可以找到构建输出目录中的文件。
如果你使用的是 VSCode,可以在 .vscode/c_cpp_properties.json
文件中添加 includePath
,使其包括 build/fmuv3/libraries/GCS_MAVLink/include
路径:
可以按下shift+ctrl+p快捷键打开界面找到json文件。
这将帮助 IDE 找到构建目录中的头文件。
12.修改update程序
最后直到编译成功,自定义文件就添加成功了,后面就是在添加好的文件中My_AP_Notify.cpp等文件的操作了,和上一篇ArduSub程序学习(3)--控制RGB LED的颜色-优快云博客的步骤一样这里就不过多描述了。