Ardupilot例程之UART_test

1. APM例程測試–UART_test

最近在學飛控ardupilot,按照官網的教程開始學習。Learning the ArduPilot Codebase爲教程官網。想要跑一下Library Example Sketches,就是想看看程序執行的效果。哪知折騰了幾個星期,都沒有從pixhawk的串口看到輸出信息。於是向博士師兄請教,說可能是代碼版本的問題,硬件抽象層肯有區別。於是查看了代碼結構。
從Github下克隆下來的master分支是最新的版本。ardupilot源碼
查看硬件抽象層,在Libraries庫下,查看與HAL相關的,如圖:

AP_HAL-master
AP_HAL-master

發現,HAL只支持CHibiOS,Empty,Linux,SITL.這個版本的代碼將Nuttx支持移除了。我們可以對比一下,查看以往的版本,比如Copter 3.6.
AP_HAL-Copter

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的內容如下:
modules-master
modules-master

在Copter3.6分支下。modules的內容如下:
modules

modules

至此,我們將代碼切換至Copter3.6分支。可以開始我們的單板例程測試了。

所使用的飛控板如下所示:
pixhack V3xpixhack 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

build1
編譯過程
編譯結果

編譯結果
UART_test.cpp

UART_test.cpp部分程序

我們查看UART_test.cpp程序,可以看到,它將從串口和debug console輸出數據。將UART_test.px4下載到飛控板上,連接串口,通過串口監視器查看輸出。

下面是硬件電路圖
硬件電路
硬件電路圖

下面是硬件連接圖,連接了Debug串口,即串口4,通過USB線連接了UARTA。
硬件連接圖

實物連接

1.1.2. 串口監視器結果

串口輸出
串口輸出

如圖所示,我們觀察到了兩個串口輸出的情況。

1.2. UART_test(board:fmuv3)

1.2.1. 設置編譯板:

cd ardupilot
./waf  distclean  //清除編譯信息,包括初始化配置的板
./waf configure --board fmuv3  //設置板爲fmuv3
./waf --targets examples/UART_test

編譯
編譯過程
編譯結果

編譯結果

1.2.2. 串口輸出

串口輸出
串口輸出

我們發現,另外一個串口監視器根本沒有輸出,這是怎麼回事呢?
還是得去看代碼,查看源碼UART_test.cpp,我們看這裏,這裏有個if判斷,只有當HAL_OS_POSIX_IO爲真時,纔會有debug console輸出。
loop
loop函數

我們跳轉到它的定義發現它的值在fmuv3板下被定義爲0,在px4-v3板下定義爲1。所以它沒有輸出。那我們可以將該判斷條件註釋掉,那就應該會有輸出了,還可以對代碼進行一點點改動。
OS_POSIX_IO

OS_POSIX_IO

改動後的部分如下:
hello
修改後的cpp.

然後重新編譯:
build
編譯

下載程序到飛控板,查看串口輸出:
輸出
輸出

我們發現,另一個監視器還是沒有輸出。但是應該要打印的數據都從USB連接的那個串口輸出來了,無論是UARTA還是debug console。這個應該是初始化板的時候,所選擇的板類型不同,相關定義也不同。所以,當我們選擇fmuv3時,可以不用接另一根線。接線圖如下:
USB
USB連接

至此,我們實現了UART輸出信息,完成了UART_test示例程序的學習。

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