小型机器人手臂DOBOT Magician 可以通过 USB 连接从 PC 或 SBC 进行控制。 由于用于控制机器人手臂的API是作为共享库(DLL或共享对象)准备的,因此可以在C++或Python中选择编程语言,从而扩大了使用范围。
但是,DOBOT提供的共享库只是类似Intel的CPU的共享库。 为了在类似ARM的CPU上控制DOBOT Magician(通常在SBC中发现),有必要从源代码进行编译。
在这里,我们将以 Jetson Nano 为例,总结如何准备环境来控制来自 Python 的 DOBOT Magician 。
目录
1. 安装所需的软件包
安装构建 DOBOT API 共享库所需的基础软件包。
$ sudo apt-get update
$ sudo apt-get upgrade -y
$ sudo apt-get install -y libqt5serialport5 libqt5serialport5-dev \
python3-serial
$ sudo apt-get install -y qt5-default qt4-dev-tools
注:所需软件包因 SBC 和操作系统而异。
2. 获取DOBOT API的源代码
DOBOT API的源代码包含在DOBOT演示V2.0中,该版本可在DOBOT官网下载页面上找到。
DobotDemo V2.0 是从各种语言和处理器/微控制器控制 DOBOT Magician 的简单示例的集合,包括编译的 DOBOT API 共享库和源代码。 请注意,编译的共享库仅是英特尔 CPU 的共享库。
要针对ARM处理器进行编译,请在Jetson Nano上创建一个工作目录,然后下载并提取DobotDemo v2.0压缩包。
$ mkdir dobot
$ cd dobot
$ wget https://download.dobot.cc/development-protocol/dobot-magician/win7-win10/Demo/DobotDemoV2.0/EN/DobotDemoV2.0.zip
$ unzip DobotDemoV2.0.zip
将目录移动到源代码所在的层次结构。 源代码所在的目录在目录名称中包含空格,在 Linux 上很难处理,所以让我们将其更改为目录名 src。
$ cd DobotDemoV2.0/DobotDll/
$ mv DobotDll\ source\ code src
$ cd src
3. 创建DOBOT API共享库
在源代码所在的目录中,放置了一个文件(.pro 文件),该文件用作生成生成文件的模板。 使用 qmake 生成一个生成文件,然后制作它。
$ qmake -o makefile DobotDll.pro
$ make
然后,将在提取DobotDemo V2.0的目录旁边创建一个名为DobotDllOutput的目录。 您创建的共享库以名称 libDobotDll.so 的文件存储在其中。
$ cd ~/dobot/DobotDllOutput/
$ ls
libDobotDll.so libDobotDll.so.1 libDobotDll.so.1.0 libDobotDll.so.1.0.0
$
4. 从 Python 调用 API 的包装函数
共享库的DOBOT API是一个C++函数,所以从Python调用它有点麻烦。 DobotDemo V2.0 中提供了一个包装器,以便更容易地作为 Python 函数调用,因此让我们将其复制到与共享库相同的目录中,以便可以轻松导入。
$ cp ../DobotDemoV2.0/DobotDemoForPython/*.py ./
上面,我们复制了包装器文件 DobotDllType.py 以及示例程序 DobotControl.py 来检查操作。
此包装器文件中编码的共享文件加载函数在基于 ARM 的 Linux 上不能很好地工作。 它需要编辑,如下面的红色部分所示。
以前
456 ################## API func ##################
457
458 def load():
459 if platform.system() == "Windows":
460 return CDLL("DobotDll.dll", RTLD_GLOBAL)
461 elif platform.system() == "Darwin" :
462 return CDLL("libDobotDll.dylib", RTLD_GLOBAL)
463 else:
464 return cdll.loadLibrary("libDobotDll.so")
465
现在
456 ################## API func ##################
457
458 def load():
459 if platform.system() == "Windows":
460 return CDLL("DobotDll.dll", RTLD_GLOBAL)
461 elif platform.system() == "Darwin" :
462 return CDLL("libDobotDll.dylib", RTLD_GLOBAL)
463 else:
464 return CDLL("./libDobotDll.so")
465
5. 更改DOBOT魔术师通信端口访问权限
DOBOT Magician 通过串行端口从 SBC 进行通信。 串行端口在Linux/Unix的早期被用作登录路由。 即使是现在,如果您将其用于特殊目的,例如不连接显示器又想控制,则可能会通过串行通信登录。
在类 Linux 操作系统中,为了保证安全性,默认限制从外部获取登录的路由。 因此,DOBOT Magician 需要 root 权限才能通过串行端口进行通信。 换句话说,你需要用 sudo 运行 Python,比如 sudo python3 xxx.py。
由于这并不容易使用,因此让我们使用称为 udev 的即插即用机制来自动更改配置,以允许以一般用户权限访问串行端口。
为此,请为 udev 创建一个规则文件。
在 /etc/udev/rules.d/ 下,创建一个文件名为 50-udev-default.rules 和以下单行规则的规则文件:
KERNEL=="ttyUSB[0-9]*", GROUP="$USER", MODE="0666"
当然,/etc/ 下的文件只能由 root 编辑。 启动文本编辑器时,请使用 sudo 启动它。
$ sudo vi /etc/udev/rules.d/50-udev-default.rules
或者
$ sudo gedit /etc/udev/rules.d/50-udev-default.rules
例如,如果您不熟悉文本编辑器,则可以像这样运行它。
$ echo 'KERNEL=="ttyUSB[0-9]*", GROUP="$USER", MODE="0666"' > 50-udev-default.rules
$ sudo mv 50-udev-default.rules /etc/udev/rules.d/
$ sudo chown root /etc/udev/rules.d/50-udev-default.rules
$ sudo chgrp root /etc/udev/rules.d/50-udev-default.rules
6. 设置环境变量
在执行 Python 程序时,需要设置一个环境变量来告诉你 DOBOT API 的共享库在哪里(在哪里可以找到它)。
$ export LD_LIBRARY_PATH="."
$ sudo ldconfig
7. 让我们运行示例程序!
准备就绪后,让我们运行在步骤 4 中复制的示例程序。
通过USB将DOBOT魔术师连接到Jetson Nano,并打开DOBOT魔术师的电源SW。
在下一行中,机械臂重复上下移动的运动几次,停止并结束程序。
$ python3 DobotControl.py
运行是否正常有效?
8. 结论
如果您偶然发现了到目前为止的任何步骤有问题,请通过下面评论区进行讨论