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