Ardupilot例程之UART_test

编译UART_test例程并下载

  • 1. APM例程测试--UART_test
    • 1.1. UART_test(board: px4-v3 )
      • 1.1.1. 编译程序
      • 1.1.2. 串口监视器结果
    • 1.2. UART_test(board:fmuv3)
      • 1.2.1. 设置编译板:
      • 1.2.2. 串口输出

1. APM例程测试–UART_test

最近在学飞控ardupilot,按照官网的教程开始学习。Learning the ArduPilot Codebase为教程官网。想要跑一下Library Example Sketches,就是想看看程序执行的效果。哪知折腾了几个星期,都没有从pixhawk的串口看到输出信息。于是向博士师兄请教,说可能是代码版本的问题,硬件抽象层肯有区别。于是查看了代码结构。
从Github下克隆下来的master分支是最新的版本。ardupilot源码。
查看硬件抽象层,在Libraries库下,查看与HAL相关的,如图:

Ardupilot例程之UART_test_第1张图片
AP_HAL-master

发现,HAL只支持CHibiOS,Empty,Linux,SITL.这个版本的代码将Nuttx支持移除了。我们可以对比一下,查看以往的版本,比如Copter 3.6.
Ardupilot例程之UART_test_第2张图片

AP_HAL-Copter3.6

我们发现,它的HAL文件要多很多,比如PX4就是很重要的。

最新版本的APM取消了Nuttx支持,改为了ChibiOS.故单板例程测试失败。 需将版本回退至3.6版。

于是,进入ardupilot目录,切换至Copter3.6版本。
命令如下:

git status    //查看git状态
git fetch origin Copter-3.6   //从远程库中抓取Copter-3.6
git checkout -b Copter-3.6 origin/Copter-3.6 //在本地库中创建Copter-3.6分支
git submodule update --init --recursive //更新子模块

进入modules目录,更新子模块内容。

cd modules
git submodule update --init --recursive

在原master分支下,modules的内容如下:
Ardupilot例程之UART_test_第3张图片
modules-master

在Copter3.6分支下。modules的内容如下:
Ardupilot例程之UART_test_第4张图片

modules

至此,我们将代码切换至Copter3.6分支。可以开始我们的单板例程测试了。

所使用的飞控板如下所示:
Ardupilot例程之UART_test_第5张图片pixhack V3x

1.1. UART_test(board: px4-v3 )

1.1.1. 编译程序

  1. 设置编译板:
cd ardupilot
./waf  distclean  //清除编译信息,包括初始化配置的板
./waf configure --board px4-v3  //设置板为px4-v3
./waf --targets examples/UART_test

Ardupilot例程之UART_test_第6张图片
编译过程
Ardupilot例程之UART_test_第7张图片

编译结果
Ardupilot例程之UART_test_第8张图片

UART_test.cpp部分程序

我们查看UART_test.cpp程序,可以看到,它将从串口和debug console输出数据。将UART_test.px4下载到飞控板上,连接串口,通过串口监视器查看输出。

下面是硬件电路图
Ardupilot例程之UART_test_第9张图片
硬件电路图

下面是硬件连接图,连接了Debug串口,即串口4,通过USB线连接了UARTA。
Ardupilot例程之UART_test_第10张图片

实物连接

1.1.2. 串口监视器结果

Ardupilot例程之UART_test_第11张图片
串口输出

如图所示,我们观察到了两个串口输出的情况。

1.2. UART_test(board:fmuv3)

1.2.1. 设置编译板:

cd ardupilot
./waf  distclean  //清除编译信息,包括初始化配置的板
./waf configure --board fmuv3  //设置板为fmuv3
./waf --targets examples/UART_test

Ardupilot例程之UART_test_第12张图片
编译过程
Ardupilot例程之UART_test_第13张图片

编译结果

1.2.2. 串口输出

Ardupilot例程之UART_test_第14张图片
串口输出

我们发现,另外一个串口监视器根本没有输出,这是怎么回事呢?
还是得去看代码,查看源码UART_test.cpp,我们看这里,这里有个if判断,只有当HAL_OS_POSIX_IO为真时,才会有debug console输出。
Ardupilot例程之UART_test_第15张图片
loop函数

我们跳转到它的定义发现它的值在fmuv3板下被定义为0,在px4-v3板下定义为1。所以它没有输出。那我们可以将该判断条件注释掉,那就应该会有输出了,还可以对代码进行一点点改动。
OS_POSIX_IO

OS_POSIX_IO

改动后的部分如下:
Ardupilot例程之UART_test_第16张图片
修改后的cpp.

然后重新编译:
Ardupilot例程之UART_test_第17张图片
编译

下载程序到飞控板,查看串口输出:
Ardupilot例程之UART_test_第18张图片
输出

我们发现,另一个监视器还是没有输出。但是应该要打印的数据都从USB连接的那个串口输出来了,无论是UARTA还是debug console。这个应该是初始化板的时候,所选择的板类型不同,相关定义也不同。所以,当我们选择fmuv3时,可以不用接另一根线。接线图如下:
Ardupilot例程之UART_test_第19张图片
USB连接

至此,我们实现了UART输出信息,完成了UART_test示例程序的学习。

你可能感兴趣的:(Ardupilot)