RoboMaster S1/EP SDK 在 Linux 下安装及使用

心心念的大疆 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 的过程/代码,尽量不让大疆再针对性更新固件。修改并不难,所以还是自己尝试一下吧。

wKgZoWcy13uAWjajAAJA0SdmBFg791.png

大疆的 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` 来控制,编程机器人。

审核编辑 黄宇

推荐阅读:

券商晨会精华:京沪房价止跌传递积极信号,有望加速房地产市场预期的修复

20城上榜 “车路云一体化”首批试点名单出炉!资金出手这些概念股

IPO罕见!不更新财务资料,终止!

中信建投:关注医药行业五条投资主线

SNEC盘点|近七成展商秀出210+N 700W+组件,TOPCon独揽半壁江山

总投资高达78.07亿!国华金光伏玻璃项目投产

您可以还会对下面的文章感兴趣:

暂无相关文章

使用微信扫描二维码后

点击右上角发送给好友