就这样一年半了,项目断断续续仍在进行,期间我混了个毕业,相信大家也经历了很多吧。最近上海疫情,毕业后的我哪里也去不了,只能在寝室等学校的投喂,那么正好,让我们项目继续。

本节主要完整介绍这个机械臂的开源项目,首先介绍该项目的整体概述,之后介绍机械臂的硬件连接,最后带大家初步过一遍项目下位机的代码,并能够对项目如何部署有一个大致的印象。

一. 项目概述

1.1 背景介绍

本项目是一个开源的六轴机械臂项目,项目名称为 arduino-sainsmart。sainsmart是一个美国创客品牌,公司的官网地址为

https://www.sainsmart.com/

他们公司主要业务为开源硬件设计和创客社群运营,所以本项目是他们研发的产品,但是从公司的产品页面可以看到本项目已经不在继续,产品页面地址为

https://www.sainsmart.com/products/6-axis-desktop-robotic-arm-assembled

不过这并不阻碍我们自己动手搭建一个性价比极高的机械臂。

1.2 项目获取

感谢sainsmart公司将该款机械臂的控制系统的下位机代码开源到了github,让我们能够获取。github项目地址为

https://github.com/wedesoft/arduino-sainsmart

由于国内访问的不稳定性,我们也可以从国内镜像网站gitcode上获得,网站为

https://gitcode.net/mirrors/wedesoft/arduino-sainsmart

熟悉git操作的可以直接使用git clone ,不熟悉git的朋友可以直接在克隆按钮的下来框中选择zip下载。项目介绍都是英文,有点头疼。不要怕,接下来我们一起过一下。

在这里插入图片描述

总之完成下载并解压后你会得到一个叫arduino-sainsmart项目文件夹,文件夹中结构为

arduino-sainsmart
├── arduino
│   ├── Makefile
│   └── sainsmart.ino
├── etc
│   └── dem
├── spec
│   └── .rb
├── controllerbase.hh
├── path.hh
├── profile.hh
├── calibration.hh.default
├── README.md
├── TODO.md
├── 一些介绍图片
└── 5个.rb文件,可以不管

项目文件中包含了5个C++文件(.hh),5个ruby文件(.rb),1个arduino文件(.ino)和许多介绍图片(.jpg),通过图片我们可以对项目有一个大致的了解,README.md文件中包含了项目的描述以及后续需要发送的串口指令。

项目整体使用arduino调用C++文件的形式,所有的ruby文件都用于使用xbox控制机械臂,但我没有xbox,所以并不打算使用这一功能,因此暂时可以不看ruby文件。

二. 硬件连接

2.1 硬件元件介绍

打开项目文件夹扫一遍图片就可以看到本项目的机械外观和硬件元件,这些也可以参考本系列的前两篇文章,这里默认大家1.已经在心中有了机械臂的模型,2.已经购买了所需要的电气元件。

项目使用的控制板为arduino UNO,这是一款热门的diy板子,推荐购买DFROBOT的板子,外加拓展板,共140元。拓展板插到UNO上后使用外接5V电源对拓展板进行供电。使用串口线连接UNO和电脑进行烧录调试。

在这里插入图片描述

六轴机械臂共有六个关节,加上头部外加夹爪总共需要7个舵机,也可不用夹爪总共六个舵机。1234轴使用MG995舵机,56轴及外加轴使用9g舵机。舵机总共有三根导线,分别为橙黄线、红线、棕线,其中棕色为接地线(重要),红色为+5v,橙黄色为信号。

在这里插入图片描述

我们简单对舵机转动的原理进行介绍,舵机使用PWM波控制角度,PWM波是指周期脉冲方波,其中1表示接通,0表示断开,波形如下图所示。PWM波由无数个周期波形组成,每个周期中包含一段高电位和一段低电位。舵机的脉冲周期为20ms,其中每一周期中的高电位时间可在0.5ms与2.5ms之间调节。如果以垂直舵机方向为0度,那么脉冲高电位时间与舵机角度的关系如下图所示。我们控制舵机的角度其实是在控制输入舵机PWM波脉冲中高电位所占的时间。这一部分可以参考孙老师的视频 https://www.bilibili.com/video/BV15X4y157ay

在这里插入图片描述

2.2 连接示意图

好,了解完各个元件后我们将他们连在一起,依次将舵机接在拓展板的接口上,如图为示意图,请保证棕线接在GND上,默认

关节1(BASE)接11引脚

关节2(SHOULDER)接10引脚

关节3(ELBOW)接9引脚

关节4(ROLL)接8引脚

关节5(PITCH)接7引脚

关节6(WRIST)接6引脚

外加关节(GRIPPER)接5引脚

在这里插入图片描述

如果你已经搭建好了机械结构,并连接好了所有的舵机,将拓展板进行了外接5v电源,那么恭喜你,你已经有了一台六轴机械臂的本体。关于系列(二)中的建模其实存在很多问题,我决定对机械臂重新建模,重新建模后的机械臂采用3d打印件作为所有杆件,方便淘宝订购,同时大大减少了零件的数量,机械臂的末端三轴位于同一点,满足机器人逆解要求。

三. 软件烧录及使用说明

3.1 控制器及控制软件

本项目使用的控制器为arduino UNO,相信喜欢DIY的朋友都对他十分熟悉,通过上传固件即可实现对输出IO口的控制。arduino的控制程序编写和上传可以使用arduino IDE,下载地址为

https://www.arduino.cc/en/software

根据上文介绍的舵机PWM波控制原理,可以知道整个控制系统即为将我们想要的机器人位姿转换为6个多级对应的PWM脉冲宽度。让我们再过一下项目文件夹中的文件

arduino-sainsmart
├── arduino
│   ├── Makefile
│   └── sainsmart.ino
├── etc
│   └── dem
├── spec
│   └── .rb
├── controllerbase.hh
├── path.hh
├── profile.hh
├── calibration.hh.default
├── README.md
├── TODO.md
├── 一些介绍图片
└── 5个.rb文件,可以不管

请重点关注我们需要的文件

arduino-sainsmart
├── arduino
│   └── sainsmart.ino
├── controllerbase.hh
├── path.hh
├── profile.hh
├── calibration.hh.default
└── README.md

简单介绍一些各个文件的功能

  1. sainsmart.ino:arduino控制固件软件,是一个arduino系统的入口

  2. profile.hh:每个关节舵机的 速度控制类,使用S加减速曲线

  3. path.hh:每个关节舵机的 运动控制类,控制舵机的转动

  4. controllerbase.hh:项目运动控制基类,会在sainsmart.ino中继承,是本项目的主要控制类

  5. calibration.hh.default:项目设置类,包括设置各个关节多级连接控制器的端口、哥哥关节的最大最小角度、关节初始角度、关节运动速度等参数,需要在使用前更改名字,删去default

3.2 固件部署步骤

  1. calibration.hh.default更改名称为calibration.hh

  2. 新建一个文件夹,将sainsmart.inocalibration.hhprofile.hhcontrollerbase.hhpath.hh复制到该文件夹中

  3. 由于arduino IDE串口调试最后一定会包括\n这个字符,我们需要在controllerbase.hh的输入函数parseChar(char c)中加入一个case,10是’\n’的字符编码,即跳过IDE默认的尾部字符。如果你使用的串口发送器指令最后不会自动加字符就可以不管这一条。

    case 10:
    	break;
    
  4. 使用IDE打开sainsmart.ino,可以看到项目使用的串口波特率为115200,连接控制板,编译上传固件

  5. 保证控制板与PC连接状态,打开IDE 工具—串口监视器,将右下波特率调为115200

  6. 在输入处输入字母o,显示1即实现了部署

3.3 手动运动控制

机械臂的串口控制代码位于项目的README.md文件中,在开源分享网站中也可以看到,这里截取部分控制指令,具体的会在本系列的第四篇文章中对项目软件进行详细解读

在这里插入图片描述

o:检查是否准备好程序

t:获取当前时间戳

b:获取基轴base的舵机角度

打开IDE的串口监视器,发送o,返回‘1’表示软件已准备,发送其他指令可以获得不同的效果。通过指令可以设定各个舵机的角度,可以保存设定示教点的位置,可以实现对机械臂的控制。

本文介绍了该开源项目的技术细节,通过背景介绍,硬件连接,软件介绍对项目进行分析,最后实现了串口对机器人的指令控制。到此我们就拥有了一个六轴机器人的控制器,后续只要通过上位机软件解析机器人位姿并通过串口发送到下位机就可以让机器人按照我们的想法运动。

Logo

鸿蒙生态一站式服务平台。

更多推荐