避けてましたが。。
ちょっと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
で動くのに。。
この時も動いたり、動かなかったりするので。。やっぱり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月号の記事参照)
で。。見たいのは。。。ここじゃなかったことがわかった(笑)
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
コメントを残していただけるとありがたいです