在撰写本文时,该产品的最终估计成本约为70,000卢布。如果您有3D打印机,则可以从其中安全扣除20,000卢布。如果没有打印机,则其外观将是令人愉悦的。我将假设我们只有钱就描述所有费用。
结果是什么样的:
还需要注意的是,要进行编程,我们需要一台装有Linux OS(我使用Ubuntu 18.04)和ROS框架(我使用Melodic)的计算机。
问题可能会出现:“为什么70K卢布便宜?”
我回答。最初,我不想打扰创建机械臂,而是想购买简单但功能足以组装的东西。
可以在评论中讨论功能性标准和对我来说可接受的最低简易性的标准(即,为什么不适合使用速卖通的操纵器),以免加重明显和/或不感兴趣的人的负担。
市场竞争解决方案
不过,我将简要介绍一下我在市场上所考虑的示例:
1)top3dshop.ru/robots/manipulators/dobot-magician-basic.html
176,000卢布。您不仅可以在这家商店购买DOBOT,而且通常价格甚至更高。当然有机会在更便宜的地方找到它,但它仍然会比70,000卢布贵得多。
2)robotbaza.ru/product/robot-manipulyator-widowx-robotic-arm-mark-ii
280,000卢布。甚至更贵。通常,直接由制造商提供的TossenRobotics操纵器会花费很多钱。但是无法订购从他们的商店到俄罗斯(和我当时在这里)的货物。
向前走一点,我会说我们将复制由TossenRobotics生产的PhantomX Pincher机器人手臂套件Mark II。
总共,我们看到70,000卢布根本不那么贵。
我们需要买什么?
我引用了撰写本文时(2020年7月)的所有价格:
1)
我以7200卢布的价格购买了1台6台DYNAMIXEL AX-12A电动机,但如果您确实想要的话,似乎可以找到6000卢比。让我们假设您很不幸,您也将以7200的
价格购买。总成本:43,200卢布
2)3D打印机
只要做一个简单的事情,您就可以保留20,000卢布。
3)Arduino Uno +电源屏蔽板
成本:〜4,000卢布
4)可选(但我强烈建议):实验室电源
成本:〜3500卢布
部件
优秀的!我们购买了所需的一切(可能是等待交付马达的最长时间,它们被运到我那里超过一个月)。
下一步是什么?
1)让我们在3D打印机上打印机械手的零件。从此处
下载STL文件 2)将其与电动机放在一起。程序集应该没有问题,但是如果它们突然出现,则可以使用此说明。
制作3D模型
类!我们有一只手,但是需要以某种方式进行控制。我想充分利用人类的成就,所以让我们自己安装ROS。
为了在ROS中完全使用操纵器,您需要使其成为URDF模型。为了使用MoveIT软件包控制机械臂,我们将需要它!
在撰写本文时,最新的稳定版本可用于Melodic / Ubuntu 18.04,这在本文开头解释了我对系统和框架版本的选择。
建立URDF模型是该项目中相当费力(也是我认为最无聊)的部分。必须先完成一些组件模型的stl文件,然后将它们连接到XML形状的文件中,并手动选择零件相对于彼此的正确位移系数。
谁想要可以做自己的工作,我要拯救其他人的神经,只给一个链接到我的成品文件:
github.com/vladmiron85/armbot/blob/master/catkin_ws/src/armbot_description/urdf/base.urdf
这种模式尚不令人兴奋但是,直到捕获现实世界中的物体的那一刻,我们仍然相距甚远。对于其他任务,此模型已绰绰有余。
该模型如下所示:
从生成的URDF文件中,我们将创建MoveIT!Config,这将使我们能够模拟操纵器的运动并将控制命令发送到真实的机械臂。
有一个用于创建配置的出色教程(链接),
在这里我可以再次节省时间并提供配置。它位于这里:
github.com/vladmiron85/armbot/tree/master/catkin_ws/src/armbot_moveit_config
您可以从github下载配置并使用以下命令运行它:
roslaunch armbot_moveit_config demo.launch
当我们将其连接到ROS时,可以 通过rviz来控制真正的机器人手:
那真正的手呢?
让我们从3D模型的世界过渡到严酷的现实。我们有一个以前组装好的机械手。我想以某种方式动他。让我们使用Arduino UNO和Power Shield进行此操作。 让我们
将操纵器的第一个电动机(如下所示)连接到Power Shield和电源上,如下所示:
是的,我们将电动机的数据引脚直接连接到Arduino的3和4引脚。对Dynamixel手册(在这里是他)的一个好奇的读者会立即注意到,与电机外部环境的通信是根据Half Duplex Asynchronous Serial Communication进行的,这意味着该数据引脚立即用于接收命令和响应。
默认情况下,在硬件级别,Arduino仅可与全双工UART一起使用。可以通过使用软件串行库来解决此问题。半双工模式的使用说明了电机数据引脚同时连接至屏蔽的3和4引脚的方式。
除了半双工通信之外,通过Arduino与Dynamixel的工作还具有一些有趣的观点,这些观点从一开始就可能并不十分明显。让我们将它们放在一起。
如何移动我们的机械手?
1)首先,下载所需的库。它被称为ardyno,可以通过Arduino库管理器获得,或在此处(链接)
2)默认情况下,Dynamixel AX-12A希望以1000000的波特率工作。但是,软件串行接口将不支持该速度,因此波特率应降至57600。因此,程序中文件的开头将如下所示:
#include "DynamixelMotor.h"
// communication baudrate
const long unsigned int baudrate = 57600;
SoftwareDynamixelInterface interface(3, 4);
3)我们所有的电机都是串联的。因此,为了解决每个问题,您需要知道其ID吗?确实是这种情况,DynamixelMotor对象在初始化期间接收两个参数:interface(每个人都相同,我们在上一段中对其进行了设置)和id(每个人必须具有不同的属性,否则操纵器的行为将非常奇怪)。
DynamixelMotor motor(interface, id);
每个电动机的ID必须手动设置。似乎是串联连接的,他们本可以使用1到6的数字来计算自己的,但没有提供。因此,您需要将每个电机分别连接到Arduino(与其他设备断开连接)并执行以下程序:
#include "DynamixelMotor.h"
// communication baudrate
const long unsigned int baudrate = 57600;
// id of the motor
const uint8_t id=1;
SoftwareDynamixelInterface interface(3, 4);
DynamixelMotor motor(interface, id);
void setup()
{
interface.begin(baudrate);
delay(100);
// check if we can communicate with the motor
// if not, we turn the led on and stop here
uint8_t status=motor.init();
if(status!=DYN_STATUS_OK)
{
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
while(1);
}
motor.changeId(NEW_ID);
}
void loop()
{}
最初,所有电动机的id = 1,这就是为什么我们在顶部指示
const uint8_t id=1;
每个电动机的NEW_ID必须替换为1到6之间的数字(是的,可以,第一个电动机可以单独放置)。我们从下到上按顺序编号。
万岁!我们有一个可以移动的成熟操纵器,也有一个3D模型。您可以使用ROS并编写任何有趣的东西。但这已经是一篇单独文章的故事了(而不是一篇)。这个故事已经结束了,感谢您的关注!