心心念的大疆 RoboMaster 機器人,終于以教小孩子編程的理由淘了一臺回來。大疆的 RoboMaster EP 套裝在 2023 年底停售了,而且也太貴,原價12000,于是在網上淘了一套二手的,不到3000塊。孩子玩起來還愛不釋手,還能順便學編程。
在 Rust 群里得知有一個 Dora-rs (https://dora-rs.ai/) 框架,而其作者也是用 Robomaster S1 進行的演示,所以就趁孩子睡覺的時候,開始嘗試搗鼓一下 RoboMaster SDK。
為了快速切換炮塔模式和機械臂模式,我單獨買了一個喇叭,一個攝像頭和一個 S1 的主控,安裝在炮塔上,而原來的配件安裝在機械臂和擴展支架上。
為了讓 S1 可以使用 SDK 訪問,需要 hack / root 進 S1 進行一些修改。所以如果你擁有或者買了 S1,盡量不要升級。因為大疆升級固件會進行封堵。網上能找到的破解方案在 ( https://github.com/collabnix/robomaster/ ),但是對于2023年3 月以后的固件,已經不能直接使用了。如果是較新的固件,還需要經過一些嘗試和修改方可 root。
因為大疆還在銷售 S1,目前社區傾向于不公開 root 的過程/代碼,盡量不讓大疆再針對性更新固件。修改并不難,所以還是自己嘗試一下吧。
大疆的 RoboMaster SDK ( https://github.com/dji-sdk/RoboMaster-SDK )最新更新已經是兩年前了,要求 Python 3.10 以前的版本和 FFMPEG 4.x.x 的版本。我這里使用了 Python 3.8.18 和 FFmpeg 4.4.5。如果使用其他版本組合出現問題,可以按照我的版本來安裝。
這里只描述一些包的配置安裝,但是軟件編譯還需要一些編譯器和其他庫的依賴,我自己的電腦已經安裝過了,請讀者自己按需安裝。如果本機的版本符合RoboMaster SDK對應的版本要求,也不需要單獨安裝。
假設我在某個目錄下,例如 `/home/username/` 建立一個目錄,比如 `RoboMaster`,下面我就以`ROOT` 指代這個目錄`/home/username/RoboMaster`。
我使用的 Debian 12,只提供了 Python 3.11,所以要自己編譯 Python。
從 Python.org 下載 Python 3.8.18 的源代碼包,解壓至`ROOT/`,進入 `ROOT/Python 3.8.18`,執行
# 注意這里 ROOT 要替代成你實際的路徑configure --prefix=ROOT/local --enable-optimizationsmake -j`nproc`make install
下載 FFmpeg 4.4.5 ( https://www.ffmpeg.org/releases/ffmpeg-4.4.5.tar.xz ),同樣解壓到 `ROOT/`,進入 `ROOT/ffmpeg-4.4.5`,執行
./configure--enable-shared--prefix=$(dirname$PWD)/local#這里dirname$PWD的結果應該還是ROOTmake -j`nproc`make install
注意這里一定要加 `--enable-shared`,為了使用其他的優化 FFmpeg 的配置參數,請自行添加對應參數。
環境準備好了,開始正式安裝 `RoboMaster SDK`
因為我選擇在 `ROOT/local` 下安裝了所需要的 Python 和 ffmpeg ,所以下面的執行和之后的運行都需要先設置一些環境變量。可以每次輸入也可以編輯一個 shell 腳本通過 `source` 或者 `.` 來導入環境。
ROOT=/home/username/RoboMasterexport PATH=$ROOT/local/bin:$PATHexport LD_LIBRARY_PATH=$ROOT/local/lib:$LD_LIBRARY_PATH
我使用 `pipenv` 管理我的 python 環境,你可以使用其他自己熟悉的工具
pipenv --python 3.8pipenv shell
在 `ROOT` 下執行
git clone https://github.com/dji-sdk/RoboMaster-SDK.gitcd RoboMaster-SDK/lib/libmedia_codec
編輯 `setup.py` 文件,為 `cmake_args` 增加:
'-DCMAKE_PREFIX_PATH=' + 'ROOT/local'
注意符合 Python 語法以及注意替換 ROOT 為你實際的路徑
修改`CMakeLists.txt`,為 `IF (CMAKE_SYSTEM_NAME MATCHES "Windows")` 一句的 `ELSE()` 增加:
target_include_directories(libmedia_codec PRIVATE "ROOT/local/include"))target_link_directories(libmedia_codec PUBLIC "ROOT/local/lib")
同樣注意 CMake 語法和替換 ROOT 路徑。
仍然在 `libmedia_codec` 目錄下
python setup.py buildpython setup.py bdist_wheelpython setup.py install
如果沒有出錯誤,可以使用命令
ldd build/lib.linux-x86_64-cpython-38/libmedia_codec.cpython-38-x86_64-linux-gnu.so
檢查一下鏈接的 FFmpeg 庫,比如 `libavcodec.so.58` 是否指向了我們自己編譯的版本 (比如路徑是 `ROOT/lib/libavcodec.so.58`,如果指向了系統的版本,可能會由于版本不兼容導致無法運行。
此時退回 `ROOT/RoboMaster-SDK` 目錄,執行
python setup.py install
在我的機器上,它執行 numpy 安裝失敗了,需要再手動執行
pip install numpy
再執行
python setup.py install
才能安裝成功。
如果一切安裝順序,下面可以運行 SDK 帶的 demo 為驗證一下。在 Linux 下,一般會啟動防火墻,使得主機到 S1/EP 控制器連接失敗,簡單地方式就停掉防火墻,或者只需要開啟 45678 端口的 udp及 tcp 的訪問。
之后修改 `ROOT/RoboMaster-SDK/examples/01_robot/05_sta_conn_helper.py` 中 WiFi 路由器的 SSID 及密碼,然后使用 python 運行此腳本,用機器人掃描二維碼,應該就可以正確連接了。如果執行不成功,可以考慮關閉所有防火墻再測試一下。
好了, SDK 已經可以正確執行,可以快樂的編程了。后面我會嘗試使用 `dora-rs` 框架和 `ROS2` 來控制,編程機器人。
審核編輯 黃宇
-
Linux
+關注
關注
87文章
11304瀏覽量
209476 -
SDK
+關注
關注
3文章
1036瀏覽量
45935 -
RoboMasters
+關注
關注
2文章
9瀏覽量
8972
發布評論請先 登錄
相關推薦
評論