心心念的大疆 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` 来控制,编程机器人。
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !