【Jetson nano 控制DOBOT Magician机器人手臂】

小型机器人手臂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 上不能很好地工作。 它需要编辑,如下面的红色部分所示。

截至 2022 年 1 月 24 日,已确认此更改适用于x86_64环境。

以前

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. 结论

如果您偶然发现了到目前为止的任何步骤有问题,请通过下面评论区进行讨论

猜你喜欢

转载自blog.csdn.net/weixin_44355653/article/details/132056108