APM 学习 12 --- Linux 下学习库示例

        为了方便大家深入了解飞控工作原理与编程,ArduPilot 提供了许多示例,位于 /Library 文件中,本文将以串口为例,为大家展示如何利用这些示例进一步深入开发 APM 飞控。

官方文档内容,方便大家对照查阅:https://ardupilot.org/dev/docs/learning-ardupilot-the-example-sketches.html

1,首先进入源码主目录,如何了解目前有哪里示例可以使用呢 ?通过如下指令:

./waf list | grep 'examples'

 系统将会列出可以使用的示例,随着版本的更新,示例将会越来越多。

2,我们将以 UART_test 为例,演示整个调试流程, 找到示例源码 UART_test.cpp,位于

/ardupilot/libraries/AP_HAL/examples/UART_test/UART_test.cpp

打开源代码,可以看到内容是重复输出代码编号


void loop(void)
{
    test_uart(hal.uartA, "uartA");
    test_uart(hal.uartB, "uartB");
    test_uart(hal.uartC, "uartC");
    test_uart(hal.uartD, "uartD");
    test_uart(hal.uartE, "uartE");

    // also do a raw printf() on some platforms, which prints to the
    // debug console
#if HAL_OS_POSIX_IO
    ::printf("Hello on debug console at %.3f seconds\n", (double)(AP_HAL::millis() * 0.001f));
#endif

    hal.scheduler->delay(1000);
}

3,尝试修改程序,然后编译程序并且下载

3.1,回到源码主目录

3.2,配置硬件,一般不变化不用重新配置,使用指令    ./waf configure --board px4-v2

root@ubuntu:/home/saffron/lrr/ardupilot# ./waf configure --board px4-v2
Setting top to                           : /home/saffron/lrr/ardupilot 
Setting out to                           : /home/saffron/lrr/ardupilot/build 
Autoconfiguration                        : enabled 
Setting board to                         : px4-v2 
Checking for program 'arm-none-eabi-ar'  : /opt/gcc-arm-none-eabi-6-2017-q2-update/bin/arm-none-eabi-ar 
Using toolchain                          : arm-none-eabi 
Checking for 'g++' (C++ compiler)        : /usr/lib/ccache/arm-none-eabi-g++ 
Checking for 'gcc' (C compiler)          : /usr/lib/ccache/arm-none-eabi-gcc 
Checking for c flags '-MMD'              : yes 
Checking for cxx flags '-MMD'            : yes 
Checking for HAVE_CMATH_ISFINITE         : no 
Checking for HAVE_CMATH_ISINF            : no 
Checking for HAVE_CMATH_ISNAN            : no 
Checking for NEED_CMATH_ISFINITE_STD_NAMESPACE : no 
Checking for NEED_CMATH_ISINF_STD_NAMESPACE    : no 
Checking for NEED_CMATH_ISNAN_STD_NAMESPACE    : no 
Checking for header endian.h                   : not found 
Checking for header byteswap.h                 : not found 
Checking for program 'cmake'                   : /usr/bin/cmake 
Checking cmake version                         : 3.10.2 
Checking for program 'ninja, ninja-build'      : not found 
Checking for program 'make'                    : /usr/bin/make 
Checking for program 'python'                  : /usr/bin/python 
Checking for python version >= 2.7.0           : 2.7.17 
Checking for program 'python'                  : /usr/bin/python 
Checking for python version >= 2.7.0           : 2.7.17 
Source is git repository                       : yes 
Update submodules                              : yes 
Checking for program 'git'                     : /usr/bin/git 
Gtest                                          : STM32 boards currently don't support compiling gtest 
Checking for program 'arm-none-eabi-size'      : /opt/gcc-arm-none-eabi-6-2017-q2-update/bin/arm-none-eabi-size 
Benchmarks                                     : disabled 
Unit tests                                     : disabled 
Checking for program 'rsync'                   : /usr/bin/rsync 
'configure' finished successfully (1.258s)

3.3,编译与下载指定代码,指令      ./waf build --target examples/UART_test --upload

root@ubuntu:/home/saffron/lrr/ardupilot#  ./waf build --target examples/UART_test --upload
Waf: Entering directory `/home/saffron/lrr/ardupilot/build/px4-v2'
[ 8/15] CMake Configure px4
-- nuttx-px4fmu-v2-apm
-- could not find gdbtui
-- could not find ddd
-- could not find gdbtui
-- could not find ddd
-- The ASM compiler identification is GNU
-- Found assembler: /usr/lib/ccache/arm-none-eabi-gcc
-- Found PythonInterp: /usr/bin/python (found version "2.7.17") 
-- GIT_DESC = 1e7ed30b1710b55f8a7509800187d51e63bb2143
-- Configuring done
-- Generating done
-- Build files have been written to: /home/saffron/lrr/ardupilot/build/px4-v2/modules/PX4Firmware
INCLUDE_DIRS=/home/saffron/lrr/ardupilot/modules/PX4Firmware/src;/home/saffron/lrr/ardupilot/build/px4-v2/modules/PX4Firmware;/home/saffron/lrr/ardupilot/build/px4-v2/modules/PX4Firmware/src;/home/saffron/lrr/ardupilot/modules/PX4Firmware/src/modules;/home/saffron/lrr/ardupilot/modules/PX4Firmware/src/include;/home/saffron/lrr/ardupilot/modules/PX4Firmware/src/lib;/home/saffron/lrr/ardupilot/modules/PX4Firmware/src/platforms;/home/saffron/lrr/ardupilot/modules/PX4Firmware/src/drivers/boards/px4fmu-v2;/home/saffron/lrr/ardupilot/build/px4-v2/modules/PX4Firmware;/home/saffron/lrr/ardupilot/build/px4-v2/modules/PX4Firmware/src/modules/px4_messages;/home/saffron/lrr/ardupilot/build/px4-v2/modules/PX4Firmware/src/modules;/home/saffron/lrr/ardupilot/modules/PX4Firmware/mavlink/include/mavlink;/home/saffron/lrr/ardupilot/modules/PX4Firmware/src/lib/DriverFramework/framework/include;src/lib/matrix;/home/saffron/lrr/ardupilot/build/px4-v2/modules/PX4Firmware/px4fmu-v2/NuttX/nuttx-export/include;/home/saffron/lrr/ardupilot/build/px4-v2/modules/PX4Firmware/px4fmu-v2/NuttX/nuttx-export/include/cxx;/home/saffron/lrr/ardupilot/build/px4-v2/modules/PX4Firmware/px4fmu-v2/NuttX/nuttx-export/arch/chip;/home/saffron/lrr/ardupilot/build/px4-v2/modules/PX4Firmware/px4fmu-v2/NuttX/nuttx-export/arch/common
ADDING DRIVERS

[14/15] CMake Build px4 msg_gen
Scanning dependencies of target git_genmsg
[  0%] Built target git_genmsg
Scanning dependencies of target git_gencpp
[ 33%] Built target git_gencpp
Scanning dependencies of target msg_gen
[100%] Built target msg_gen
[15/15] CMake Build px4 prebuild_targets
Scanning dependencies of target __nuttx_patch_px4fmu-v2
[  0%] Built target __nuttx_patch_px4fmu-v2
Scanning dependencies of target __nuttx_copy_px4fmu-v2
[  0%] Built target __nuttx_copy_px4fmu-v2
Scanning dependencies of target nuttx_export_px4fmu-v2
[100%] Built target nuttx_export_px4fmu-v2
Scanning dependencies of target prebuild_targets
[100%] Built target prebuild_targets
[470/479] Compiling libraries/AP_HAL/examples/UART_test/UART_test.cpp
[471/479] CMake Configure px4
-- nuttx-px4fmu-v2-apm
-- could not find gdbtui
-- could not find ddd
-- could not find gdbtui
-- could not find ddd
-- The ASM compiler identification is GNU
-- Found assembler: /usr/lib/ccache/arm-none-eabi-gcc
-- Found PythonInterp: /usr/bin/python (found version "2.7.17") 
-- GIT_DESC = 1e7ed30b1710b55f8a7509800187d51e63bb2143
-- Configuring done
-- Generating done
[472/479] Linking build/px4-v2/lib/examples/libUART_test.a
-- Build files have been written to: /home/saffron/lrr/ardupilot/build/px4-v2/modules/PX4Firmware
INCLUDE_DIRS=/home/saffron/lrr/ardupilot/modules/PX4Firmware/src;/home/saffron/lrr/ardupilot/build/px4-v2/modules/PX4Firmware;/home/saffron/lrr/ardupilot/build/px4-v2/modules/PX4Firmware/src;/home/saffron/lrr/ardupilot/modules/PX4Firmware/src/modules;/home/saffron/lrr/ardupilot/modules/PX4Firmware/src/include;/home/saffron/lrr/ardupilot/modules/PX4Firmware/src/lib;/home/saffron/lrr/ardupilot/modules/PX4Firmware/src/platforms;/home/saffron/lrr/ardupilot/modules/PX4Firmware/src/drivers/boards/px4fmu-v2;/home/saffron/lrr/ardupilot/build/px4-v2/modules/PX4Firmware;/home/saffron/lrr/ardupilot/build/px4-v2/modules/PX4Firmware/src/modules/px4_messages;/home/saffron/lrr/ardupilot/build/px4-v2/modules/PX4Firmware/src/modules;/home/saffron/lrr/ardupilot/modules/PX4Firmware/mavlink/include/mavlink;/home/saffron/lrr/ardupilot/modules/PX4Firmware/src/lib/DriverFramework/framework/include;src/lib/matrix;/home/saffron/lrr/ardupilot/build/px4-v2/modules/PX4Firmware/px4fmu-v2/NuttX/nuttx-export/include;/home/saffron/lrr/ardupilot/build/px4-v2/modules/PX4Firmware/px4fmu-v2/NuttX/nuttx-export/include/cxx;/home/saffron/lrr/ardupilot/build/px4-v2/modules/PX4Firmware/px4fmu-v2/NuttX/nuttx-export/arch/chip;/home/saffron/lrr/ardupilot/build/px4-v2/modules/PX4Firmware/px4fmu-v2/NuttX/nuttx-export/arch/common
ADDING DRIVERS

[473/479] CMake Build px4 fw_io
Loaded firmware for 9,0, size: 289632 bytes, waiting for the bootloader...
If the board does not respond within 1-2 seconds, unplug and re-plug the USB connector.
Found board 9,0 bootloader rev 4 on /dev/serial/by-id/usb-3D_Robotics_PX4_BL_FMU_v2.x_0-if00
50583400 00ac2600 00100000 00ffffff ffffffff ffffffff ffffffff ffffffff 66ed47ff ff73cc15 c8ad940c dbc59f39 d6c20e06 f953d3ef f3073019 d035ab0d 3f60334e 10dda9f8 cdb0cbbd 42cdc6b6 3ba305f7 81532581 84ee3da6 23bc6340 8321be68 edd356c9 1e3b8f5c 5e07decc 9c6be5a2 458a1513 4bbbbc21 eda35ce5 a8b840a5 ef019ca5 c89bb183 bb00f0c0 06db1a26 7375ff57 1ca41d94 24aa662e ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff type: PX4
idtype: =00
vid: 000026ac
pid: 00000010
coa: Zu1H//9zzBXIrZQM28WfOdbCDgb5U9Pv8wcwGdA1qw0/YDNOEN2p+M2wy71Czca2O6MF94FTJYGE7j2mI7xjQIMhvmjt01bJHjuPXF4H3syca+WiRYoVE0u7vCHto1zlqLhApe8BnKXIm7GDuwDwwAbbGiZzdf9XHKQdlCSqZi4=

sn: 0038001f3432470d31323533

Erase  : [====================] 100.0%
Program: [====================] 100.0%
Verify : [====================] 100.0%
Rebooting.

[100%] Built target upload
Attempting reboot on /dev/serial/by-id/usb-3D_Robotics_PX4_FMU_v2.x_0-if00 with baudrate=57600...
If the board does not respond, unplug and re-plug the USB connector.

Waf: Leaving directory `/home/saffron/lrr/ardupilot/build/px4-v2'

BUILD SUMMARY
Build directory: /home/saffron/lrr/ardupilot/build/px4-v2
Target              Text    Data  BSS    Total 
-----------------------------------------------
examples/UART_test  286872  2760  39356  328988

PX4
The ELF files are pointed by the path in the "Target" column. The .px4 files are in
the same directory of their corresponding ELF files.

PX4IO
Binary                 Text   Data  BSS   Total
-----------------------------------------------
px4-extra-files/px4io  39604   600  3134  43338

Build commands will be stored in build/px4-v2/compile_commands.json
'build' finished successfully (35.825s)

 4,下载成功后,查看代码运行结果,通过串口调试助手查看

 可以看出调试代码已经可以正常运行了。

本文章通过串口调试示例,引导大家深入学习 APM 编程。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章