【Ardupilot】開発環境をWindows Ubuntuに入れてみる。EKFでWind Estimationさせる方法を知りたい【メモ】

避けてましたが。。

ちょっとEKFのこともう少し知りたくて。。

Windows WSLに入れる入れ方と、

https://ardupilot.org/dev/docs/building-setup-windows.html#building-setup-windows

Ubuntuに入れる入れ方があります。

https://ardupilot.org/dev/docs/building-setup-linux.html#building-setup-linux

前に、Windowsでやってみて、しくじったので、WSLに、今回はLinuxでやってみようかと。。どっちやねんという書き方ですが、WSL2になってXwindowとかもできるようになったみたいなので。

やり方は、こちらを参考にしました。

https://qiita.com/hsgucci/items/9037835f9c25ce04c38d

とりあえず。。

WSLのUbuntuを20.04に上げるところからやりました(笑)

一応、あんまり難しいことなくできた

コンパイル

例えば、MatekH746-bdshot


っていうボードをコンパイル

tom2rd@DESKTOP-U8IGA2B:~/ardupilot$ ./waf configure --board MatekH743-bdshot
Setting top to : /home/tom2rd/ardupilot
Setting out to : /home/tom2rd/ardupilot/build
Autoconfiguration : enabled
Setting board to : MatekH743-bdshot
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
CXX Compiler : g++ 10.2.1
Checking for program 'make' : /usr/bin/make
Checking for program 'arm-none-eabi-objcopy' : /opt/gcc-arm-none-eabi-10-2020-q4-major/bin/arm-none-eabi-objcopy
Including /home/tom2rd/ardupilot/libraries/AP_HAL_ChibiOS/hwdef/MatekH743/hwdef.dat
Adding environment OPTIMIZE -Os
Removing PC7
Removing PB0
Removing PB1
Removing PA0
Removing PA1
Removing PA15
Removing PD14
Removing PD15
Removing PE5
Removing PE6
Setup for MCU STM32H743xx
Writing hwdef setup in /home/tom2rd/ardupilot/build/MatekH743-bdshot/hwdef.h
MCU Flags: cortex-m7 ['-mcpu=cortex-m7', '-mfpu=fpv5-d16', '-mfloat-abi=hard']
Writing DMA map
Generating ldscript.ld
No default parameter file found
Checking for env.py
env set OPTIMIZE=-Os
env set WITH_FATFS=1
env set PROCESS_STACK=0x1C00
env set MAIN_STACK=0x600
env set IOMCU_FW=0
env set PERIPH_FW=0
env set HAL_NUM_CAN_IFACES=1
env set HAL_CANFD_SUPPORTED=4
env set BOARD_FLASH_SIZE=2048
env set EXT_FLASH_SIZE_MB=0
env set ENABLE_CRASHDUMP=1
env set APP_RAM_START=None
env set CPU_FLAGS=['-mcpu=cortex-m7', '-mfpu=fpv5-d16', '-mfloat-abi=hard', '-DARM_MATH_CM7', '-u_printf_float']
env set CORTEX=cortex-m7
env set APJ_BOARD_ID=1013
env set APJ_BOARD_TYPE=STM32H743xx
env set USBID=0x1209/0x5740
env set BOOTLOADER_EMBED=1
env set FLASH_RESERVE_START_KB=128
env set EXT_FLASH_RESERVE_START_KB=0
env set FLASH_TOTAL=1703936
env set HAS_EXTERNAL_FLASH_SECTIONS=0
env set CHIBIOS_BUILD_FLAGS=USE_FATFS=yes CHIBIOS_STARTUP_MK=os/common/startup/ARMCMx/compilers/GCC/mk/startup_stm32h7xx.mk CHIBIOS_PLATFORM_MK=os/hal/ports/STM32/STM32H7xx/platform.mk MCU=cortex-m7 ENV_UDEFS=-DCHPRINTF_USE_FLOAT=1
Enabling ChibiOS asserts : no
Disabling Watchdog : no
Enabling malloc guard : no
Enabling ChibiOS thread statistics : no
Enabling -Werror : yes
Checking for intelhex module: : OK
Checking for HAVE_CMATH_ISFINITE : yes
Checking for HAVE_CMATH_ISINF : yes
Checking for HAVE_CMATH_ISNAN : yes
Checking for NEED_CMATH_ISFINITE_STD_NAMESPACE : yes
Checking for NEED_CMATH_ISINF_STD_NAMESPACE : yes
Checking for NEED_CMATH_ISNAN_STD_NAMESPACE : yes
Checking for header endian.h : not found
Checking for header byteswap.h : not found
Checking for HAVE_MEMRCHR : no
Configured VSCode Intellisense: : no
Checking for program 'python' : /usr/bin/python
Checking for python version >= 2.7.0 : 3.8.10
Checking for program 'python' : /usr/bin/python
Checking for python version >= 2.7.0 : 3.8.10
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-10-2020-q4-major/bin/arm-none-eabi-size
Benchmarks : disabled
Unit tests : disabled
Scripting : enabled
Scripting runtime checks : enabled
Debug build : disabled
Coverage build : disabled
SITL 32-bit build : disabled
Checking for program 'rsync' : /usr/bin/rsync
'configure' finished successfully (3.217s)

ちゃんとコンパイルできるんですね。。。

まぁ、当たり前ですが(笑)

間違った ボード名を入れると。。

Invalid board 'MatekH7': choices are aero, airbotf4, AIRLink, ARK_GPS, bbbmini, BeastF7, BeastF7v2, BeastH7, BeastH7v2, bebop, bhat, BirdCANdy, blue, CarbonixF405, CarbonixL496, crazyflie2, CUAV-Nora, CUAV-X7, CUAV-X7-bdshot, CUAV_GPS, CUAVv5, CUAVv5-bdshot, CUAVv5Nano, CUAVv5Nano-bdshot, CubeBlack, CubeBlack+, CubeBlack-periph, CubeGreen-solo, CubeOrange, CubeOrange-bdshot, CubeOrange-joey, CubeOrange-periph, CubeOrange-periph-heavy, CubeOrange-SimOnHardWare, CubeOrangePlus, CubePurple, CubeSolo, CubeYellow, CubeYellow-bdshot, dark, DevEBoxH7v2, disco, DrotekP3Pro, Durandal, Durandal-bdshot, edge, erleboard, erlebrain2, esp32buzz, esp32diy, f103-ADSB, f103-Airspeed, f103-GPS, f103-HWESC, f103-QiotekPeriph, f103-RangeFinder, f103-Trigger, f303-GPS, f303-HWESC, f303-M10025, f303-M10070, f303-MatekGPS, f303-PWM, f303-Universal, F35Lightning, f405-MatekAirspeed, f405-MatekGPS, F4BY, FlywooF745, FlywooF745Nano, fmuv2, fmuv3, fmuv3-bdshot, fmuv5, FreeflyRTK, G4-ESC, H757I_EVAL, H757I_EVAL_intf, HereID, HerePro, Hitec-Airspeed, HitecMosaic, HolybroG4_GPS, HolybroGPS, iomcf103_8MHu, iomcu_z, JHEMCU-GSF405A, JHEMCU-GSF405A-RX2, KakuteF4, KakuteF4Mini, KakuteF7, KakuteF7-bdshot, KakuteF7Mini, KakuteH7, KakuteH7-bdshot, KakuteH7Mini, linux, luminousbee4, luminousbee5, MambaF405US-I2C, MambaF405v2, MatekF405, MatekF405-bdshot, MatekF405-CAN, MatekF405-STD, MatekF405-TE, MatekF405-Wing, MatekF765-SE, MatekF765-Wing, MatekF765-Wing-bdshot, MatekH743, MatekH743-bdshot, MatekH743-periph, MatekL431-Airspeed, MatekL431-Periph, MazzyStarDrone, mindpx-v2, mini-pix, modalai_fc-v1, mRo-M10095, mRoControlZeroClassic, mRoControlZeroF7, mRoControlZeroH7, mRoControlZeroH7-bdshot, mRoControlZeroOEMH7, mRoNexus, mRoPixracerPro, mRoPixracerPro-bdshot, mRoX21, mRoX21-777, navigator, navio, navio2, Nucleo-G491, Nucleo-L476, Nucleo-L496, NucleoH743, obal, ocpoc_zynq, omnibusf4, omnibusf4pro, omnibusf4pro-bdshot, omnibusf4pro-one, omnibusf4v6, OMNIBUSF7V2, OMNIBUSF7V2-bdshot, OmnibusNanoV6, OmnibusNanoV6-bdshot, PH4-mini, Pix32v5, PixC4-Jetson, Pixhawk1, Pixhawk1-1M, Pixhawk1-1M-bdshot, Pixhawk4, Pixhawk4-bdshot, Pixhawk5X, Pixracer, Pixracer-bdshot, Pixracer-periph, pocket, pxf, pxfmini, QioTekZealotF427, QioTekZealotH743, R9Pilot, revo-mini, revo-mini-bdshot, revo-mini-i2c, revo-mini-i2c-bdshot, revo-mini-sd, rst_zynq, Sierra-F405, Sierra-F412, Sierra-F9P, Sierra-L431, sitl, SITL_arm_linux_gnueabihf, sitl_periph_gps, SITL_static, SITL_x86_64_linux_gnu, skyviper-f412-rev1, skyviper-journey, skyviper-v2450, sparky2, speedybeef4, SPRacingH7, SuccexF4, Swan-K1, TBS-Colibri-F7, vnav, VRBrain-v51, VRBrain-v52, VRBrain-v54, VRCore-v10, VRUBrain-v51, ZubaxGNSS, zynq

こんな感じで、対応しているボード名が表示されました(^^;

Octave(Matlab互換)を入れてみる

AP-NavEKFは、MatlabからCコードを生成するようになっているらしく、その元になるMatlabコード(.m)も入ってるようです。Windows10にもOctave入れてあるんですが。。こちらで

sudo apt -y install octave

と入れて。。

pip install sympy=1.5.1

とやってみたが。。

https://wiki.octave.org/wiki/index.php?title=Building_on_Microsoft_Windows&mobileaction=toggle_view_desktop

ではWSL2とVcXsrvでと、動くって書いてあったけど。。xeyesとかは、

export DISPLAY=:0.0

で動くのに。。

【Windows10】WSL のUbuntuにX環境を入れてみる VcXsrv Proxy設定など【忘備録】

この時も動いたり、動かなかったりするので。。やっぱりWindows 11かなぁ??

ということで、WSLのUbuntuのOctaveのGUIが、うまく動かないようなので。。

追記 2022/04/14 —–

WSLをUbuntu 20.04に上げ、PowerShellからwslとうち、

WindowsでXlaunch(VcXsrv)を立ち上げておいて

export DISPLAY=:0.0

とすると、Octave GUIもX-windowで表示されました。

ここまで

諦め。。Windows版のOctaveを動かし。。たら。。もうVerが7.1.0なのね(笑)

https://www.gnu.org/software/octave/download.html#ms-windows

入れ直しw

ちなみに、EKFのモデルは、Windowsからアクセルする場合は、こちらのディレクトリ

\\wsl$\Ubuntu-20.04\home\ユーザー名\ardupilot\libraries\AP_NavEKF\Models

をOctaveから見えるところにコピー

CommonのファイルをExampleのあるところにコピーして動かすと。。動きました。

(Interface 2022年4月号の記事参照)

created by Rinker
¥2,236 (2024/09/19 11:04:09時点 Amazon調べ-詳細)

で。。見たいのは。。。ここじゃなかったことがわかった(笑)

https://ardupilot.org/dev/docs/ekf2-estimation-system.html

これのWind Velcityの計算方法が知りたかったんですが。。

https://ardupilot.org/copter/docs/airspeed-estimation.html

そっか。。

横方向の抗力と、プロペラの抗力を入れないと計算できないのか。。。なるほど!(笑)

EK3_DRAG_BCOEF_X
EK3_DRAG_BCOEF_Y
EK3_DRAG_MCOEF

これか。。

かなりの遠回り(笑)

OpenFOAMで計算したのとの違いも一回見てみたいな。。

 


Wind Estimationで、BAROの補正も

https://ardupilot.org/copter/docs/airspeed-estimation.html?fbclid=IwAR2mrV84JYXf-wv8LhmGNlZ606I89TIKNKy6RDv6AJkVNnU7H95czwQr4Ls

投稿者 tom2rd

コメントを残していただけるとありがたいです

Loading Facebook Comments ...

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください