作為一個使用pixhawk的使用者來說,需要執行較為複雜的動作時,需要透過遠端或是有線連結小型電腦作為判斷偵測值之資料以及轉送mavlink封包使用,但是攜帶上載具的小型電腦通常不具備超強的運算能力。因此若要使用轉傳封包功能,又要透過dronekit等需要大量運算資源的東西操作pixhawk時,mavproxy就會不敷使用了。
cmavnode 是一款可以轉送mavlink封包的工具,可以接收來自TCP UDP 或是Serial的mavlink封包,並轉換為TCP UDP 等網路封包傳出,,但cmavnode 並沒辦法接受多個輸入,只能單個輸入,多個輸出
首先安裝git
sudo apt-get install git
接著clone 這個repository
git clone https://github.com/MonashUAS/cmavnode/
再更新 submodules
git submodule update --init
再安裝相關軟體
Ubuntu 14.04: sudo apt-get install libboost-all-dev cmake libconfig++ libreadline-dev
Ubuntu 16.04: sudo apt-get install libboost-all-dev cmake libconfig++-dev libreadline-dev
Debian Stretch: sudo apt-get install libboost-all-dev cmake libconfig++-dev libreadline-dev
接著build這個軟體
mkdir build && cd build
cmake ..
make
sudo make install
這樣就得到這個軟體了
./cmavnode -f <pathtoconfigfile>
這一套與mavproxy不同的點在於,mavproxy使用 argument的指定連接方式,而cmavnode使用檔案的方式,類似windows裡面的ini 組態設定檔,其設定方式如下
[aseriallink]
type=serial
port=/dev/ttyUSB0
baud=57600
[audplink]
type=udp
targetip=127.0.0.1
targetport=14559
localport=14550
sim_enable=true
sim_packet_loss=25
packet_drop_enable=true
[audplink2]
type=udp
targetip=127.0.0.1
targetport=14555
localport=14556
這是從cmavnode的官網擷取下來的設定檔,可以看到他使用了兩個UDP output 以及一個serial 輸入,此時cmavnode就會把接收到的mavlink封包傳送至兩個UDP port,第一個UDP模擬了一個25%的封包丟失率,也就是每4個封包中,有一個會丟失,可供模擬器模擬封包丟失時的狀態。
透過上述方式可使得pi zero 在轉送mavlink封包時不會耗費太多效能,也可以作為dronekit的控制器之使用。