# OpenMCT 開發筆記 ###### tags: `飛控` `地面站` ## 開發環境 ### node.js (使用14.19.1版)  ### git bash  ### 使用vs code編輯  ### 安裝虛擬PX4 - [安裝教學](https://docs.px4.io/master/en/dev_setup/dev_env_windows_cygwin.html) 依照網頁內的步驟安裝 1. Download the latest version of the ready-to-use MSI installer from [Github](https://github.com/PX4/PX4-windows-toolchain/releases) - 最新版(v1.0)還沒有MSI檔,所以使用v0.9版  2. Run it, choose your desired installation location, let it install:  ### Python  安裝時,記得要安裝環境 --- --- ## 架設OpenMCT - https://gitlab.lrz.de/lls/vis-frame.git - https://gitlab.lrz.de/lls/vis-frame/-/wikis/home 1. 打開cmd,輸入"cd 要存取的資料夾" 2. 輸入git clone 網址(網址複製如下圖)  3. 下載完後,輸入cd vis-frame 4. 輸入cd openmct 5. 輸入npm install,開始下載 6. 在下載同時可以開另一個cmd,切換到OpenMCT_Telemetry_server(如下圖)  7. 輸入npm install開始下載,下載完成後可以將cmd視窗關閉 8. 回到openmct的cmd視窗,下載完成後輸入npm start  9. 前往 http://localhost:8080  --- --- ## 建立自己的Aircraft ### 1.製作Telemetry_Object  1. 至vis-frame\python_scripts\Telemetry_Object_Generator 2. 編輯Telemetry_Object_Generater.py 3. 將telemetry_object_name改成飛行器的名字 4. 將UDP_PORT改成自己要傳給openmct的port 5. 除了generate_pythonScripts皆改為true ```#python generate_Dictionary = True generate_OpenMCT_object = True generate_server_object = True generate_pythonScripts = False ``` ### 2.下載另一個傳輸腳本 預設產生的傳輸腳本需經過misson planner [MavSDK ver2.0 連結](https://hackmd.io/q80yrkPCTuitar3Rv8Uf2w) ### 3.執行Telemetry_Object_Generater.py  位置在vis-frame/python_scripts/Telemetry_Object_Generator 將會產生幾個不同的檔案 在openmct/example/飛行器的名字中會有兩個檔案 #### Plugin.js - Plugin的種類分為三種  更多資訊可以看 [Open MCT Integration Tutorials](https://hackmd.io/@isaPv93jQuix8iD4DT34kQ/Hy9jHYxru) 官方文件: [Github](https://github.com/nasa/openmct-tutorial) #### dictionary.json name是在openmct上所顯示的名稱 format是變數的型態 key是在傳輸腳本所用到的變數名稱,因此在選擇變數名稱後須將他寫入python腳本中 如下圖  --- --- ## 定義plugin.js 編輯openmct/src/plugin/plugin.js 這個檔案定義了所有openmct要使用的plugin ### 1.檔案位置 在define後輸入plugin的檔案位置  ### 2.函式名稱 在function後輸入plugin名稱  ### 3.定義函式 ```#javasripts plugins.Aircraft_YEEPlugin = Aircraft_YEEPlugin; ``` 將Aircraft_YEE改成自己飛行器的名字  ### 4. 將plugin安裝至openmct 編輯openmct/index.html 在程式碼後面添加 ```javascript openmct.install(function install(openmctAPI) {'//......'}); ``` eg: ```javascript openmct.install(openmct.plugins.Aircraft_01Plugin()); openmct.install(openmct.plugins.HistoricalTelemetryPlugin('Aircraft_01.telemetry', '/Aircraft01History/', 'localhost')); openmct.install(openmct.plugins.RealtimeTelemetryPlugin('Aircraft_01.telemetry', '/Aircraft01Realtime/', 'localhost')); ``` /Aircraft01History/ 為歷史資料 /Aircraft01Realtine/ 為即時資料  ### 5. 編輯OpenMCT_Telemetry_Server #### import由腳本所添加的檔案 到OpenMCT_Telemetry_Server/server.js 傳入檔案 ```#javasripts var Aircraft_YEE = require('./Aircraft_YEE'); ```  #### 新增一個變數: ```#javasripts var aircraftYEE = new Aircraft_YEE; ``` #### 添加連接: ```#javascripts app.use('/AircraftYEERealtime', realtimeServerAircraftYEE); app.use('/AircraftYEEHistory', historyServerAircraftYEE); ```  --- --- ## 開始測試 ### 開啟模擬器(JMavSim) 1. 到PX4的資料夾中開啟run-console  ``` cd Firmware make px4_sitl jmavsim ```  - terminal畫面  - 模擬器畫面  ### 連接mavsdk - 模擬器terminal介面  - MAVSDK程式執行  ### 實際測試結果 ``` commander takeoff ```  ``` commander land ```  --- --- ## 使用Mavproxy連接 - 到Mavproxy官網下載 https://ardupilot.org/mavproxy/ - 不要用mavproxy的GUI介面,用cmd輸入指令 ``` mavproxy --master=udp:127.0.0.1:14550 --out=udp:127.0.0.1:15550 --out=udp:127.0.0.1:16550 ```  --- --- ## 數傳 ### 下載MAVSDK source code ``` git clone https://github.com/mavlink/MAVSDK.git cd MAVSDK git checkout v1.0.7 git submodule update --init --recursive ``` - 將 checkout與submodule update對調後  ### 根據自己的系統(linux or window)安裝Library [官網連結](https://mavsdk.mavlink.io/main/en/cpp/guide/build.html) #### Debug ``` cmake -DCMAKE_BUILD_TYPE=Debug -Bbuild/default -H. cmake --build build/default -j8 ``` ##### 安裝問題一(已解決):   看起來像submodulus沒載到,試試看手動下載[這個](https://github.com/mavlink/c_library_v2/tree/49ce44c4e4dcda330141f714c9ad978c5e48974d)丟進去 p.s. 要把下載後c_library_v2資料夾內的東西丟回到v2.0資料夾中 --- ##### 安裝問題二(已解決): ``` D:\MAVSDK\src\mavsdk\core\mavsdk_impl.cpp : warning C4819: 檔案含有無法在目前字碼頁 (950) 中表示的字元。請以 Unicode 格式儲存檔案以防止資料遺失 [D:\MAVSD K\build\default\src\mavsdk\mavsdk.vcxproj] ``` - 解決方法: 至mavsdk_impl.cpp中,將102行At least for now後面的表情符號刪掉  --- ##### 安裝問題三(已解決):  - 解決方法: 在出現錯誤的檔案中增加header檔 ``` #include <atomic> ``` ##### 安裝問題四(已解決):  - 解決方法: 問題一中,下載的檔案需要切換版本 ``` cd c_library_v2 git checkout 49ce44c4e4 ```  ##### 安裝問題五(已解決):  https://github.com/mavlink/MAVSDK/issues/1679 解決方法: [照著裡面做](https://github.com/mavlink/MAVSDK/pull/1686/files#diff-9682ac5948df4bfb222920e2b1b94e629eb95f1f70c166ed1228bf8233265480) #### Release ``` cmake -Bbuild/default -H. -DCMAKE_BUILD_TYPE=Release cmake --build build/default -j8 --config Release ``` --- #### System-wide Install ``` cmake --build build/default --target install ```  build砍了重裝  不可行 [解決方法1](https://mavsdk.mavlink.io/main/en/cpp/guide/installation.html)   需要注意的地方: ``` cmake -Bbuild -DCMAKE_PREFIX_PATH="上面下載資料夾的位址"/mavsdk_extracted ``` 解決方法2: 更換版本(v1.2.0)  - System-wide Install可以順利 --- #### 測試 [example](https://mavsdk.mavlink.io/main/en/cpp/examples/) ``` cd examples/takeoff_and_land/ cmake -Bbuild -H. cmake --build build -j4 ```  - 可以順利編譯  - 打開檔案Debug的位置(ex:takeoff_and_land\build\Debug) - 把mavsdk.dll檔丟入Debug中(預設位置:Program Files (x86)\mavsdk_superbuild\bin) - 用cmd打開Debug資料夾,執行exe檔(ex:takeoff_and_land.exe)  --- #### 寫code時間 [測試](https://github.com/ncku-uav/mavsdk-telemetry-cpp) #### 編譯code 再寫完的.cpp檔資料夾中,加一個CMakeLists.txt,裡面的內容長 ``` cmake_minimum_required(VERSION 3.10.2) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) project(telemetry) add_executable(telemetry telemetry.cpp ) find_package(MAVSDK REQUIRED) target_link_libraries(telemetry MAVSDK::mavsdk ) if(NOT MSVC) add_compile_options(telemetry PRIVATE -Wall -Wextra) else() add_compile_options(telemetry PRIVATE -WX -W2) endif() ``` ##### 編譯要使用幾個指令 ``` cd 檔案所在的位址 cmake -Bbuild -H. cmake --build build -j4 ``` Problem 1:   - 74行中,[]中間要加& Problem 2:  - 確定每個to_string前面有 std::  Problem 3:  --- ##### 連接上jmavsim測試  用cmd打開Debug資料夾 ``` build\Debug>檔案名稱.exe udp://:模擬器port ```  - 可以成功連接上模擬器並傳送資料  --- ## 更新OpenMCT版本 [教學](https://gitlab.lrz.de/lls/vis-frame/-/wikis/Home/How%20to%20Install%20and%20Update%20OpenMCT)   - 卡在空白畫面,不知道是否正確。 ---  - 只執行openmct(new)可以跑出新的介面。 ---  - 出現未知錯誤 ---  --- [111學年上 地面站進度規劃](https://hackmd.io/spy_A3g0SuqrZhYo1RRw8A)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up