稚晖君超迷你机械臂机器人
Go to file
peng-zhihui 52c8328f51 [Fw] Add Dummy controller firmware.
Add description of Firmware.
2021-10-27 11:17:37 +08:00
0.SubModules Add Peak as submodule. 2021-10-10 19:48:36 +08:00
1.Hardware [Fw] Add Dummy controller firmware. 2021-10-27 11:17:37 +08:00
2.Firmware/REF-STM32F4-fw [Fw] Add Dummy controller firmware. 2021-10-27 11:17:37 +08:00
3.Software/DummyStudio [Sw] Add DummyStudio. 2021-10-13 22:13:15 +08:00
4.Model [Hw] Add REF PCB. 2021-10-12 01:10:53 +08:00
5.Docs/1.Images [Fw] Add Dummy controller firmware. 2021-10-27 11:17:37 +08:00
.gitmodules Add Peak as submodule. 2021-10-10 19:48:36 +08:00
README.md [Fw] Add Dummy controller firmware. 2021-10-27 11:17:37 +08:00

Dummy-Robot

我的超迷你机械臂机器人项目。

资料待整理

  • 已添加3D模型设计源文件。
  • 已添加夹爪硬件设计文件和LED灯环PCB
  • 已添加无线空间定位控制器PCB文件
  • 已添加无线示教器Peak软硬件工程作为submodule
  • 已添加REF的硬件设计文件
  • 已添加DummyStudio上位机
  • 已添加Dummy核心控制器的固件代码使用说明见后文

关于结构设计

我视频中原版设计使用的步进电机+harmonic的谐波减速模组其中后者成本较高我买的二手大搞600元一个因此为了能让大家尽量复现本项目我希望后期能添加一个同步轮轮减速+3D打印或者行星减速+3D打印其实行星减速也不便宜而且从背隙的角度来看还不如同步轮的方案如果有同学有结构设计能力的也欢迎自行设计提交pull request~

关于电路模块

电路为了实现主要的机械臂运动控制功能其实核心就4块板子

  • REF核心板
  • REF底板也就是机械臂底座里面的控制器电路板
  • 步进电机驱动
  • Peak示教器

其中前两者我都开源了,步进驱动设计的时候参考了: https://github.com/unlir/XDrive 这个项目这是我一个朋友开源的闭环驱动基于STM32。该驱动分为开源版和闭源版闭源版基于分立MOSFET性能极其强劲且功能很完善开源版用的ADC+斩波驱动芯片具备基础功能不带CAN协议。需要的话大家可以自行研究另外他家有淘宝店可以直接买闭源成品非常推荐

当然另一种方式是大家也可以自行使用GRBL类的驱动器改装用来驱动本机械臂。

Peak的话我已经软硬件都开源了可以去SubModules文件夹里面看那边的README说明。

关于固件

这个机械臂的固件核心就是运动学姿态解算,这块我还在整理,后面会封装得更完善一些进行开源已开源,现在写死的很多参数会设计成可配置的,方便大家用本项目学习完后迁移到自己设计的机械臂中

REF的固件使用说明

固件主要包括几大功能模块:

  • BSP驱动板载的各种硬件驱动比如OLED、IMU、LED、蜂鸣器、非易失储存等等
  • 3rdParty库包括U8G2的图形库和Fibre的序列化/反序列化库
  • CoreST官方的HAL库
  • DriverARM的CMSIS驱动
  • MidwaresFreeRTOS支持包
  • Robot核心机器人库包括各种算法和驱动代码
  • UserApp上层应用可以基于我提供的API接口自行开发其他应用
  • 其中OLED使用Arduino的U8G2库移植而来可以方便地现实各种调试和系统信息另外由于STM32的硬件I2C又BUG这里使用了软件I2C驱动屏幕实测帧率比硬件I2C更高。

DummyRobot类是Dummy的完整定义所在初始化的时候需要设置好步进电机驱动的信息以及自身的DH参数

其中驱动器信息包含CAN节点ID、是否反向、减速器的减速比、运动限制范围

而DH参数的含义如下

机械臂的构型需要满足Pieper判据机器人的三个相邻关节轴交于一点或三轴线平行才能得出解析解所以大家可以根据Dummy的结构进行修改然后自己替换DH参数即可以移植我的代码。

关于位置的记忆,和上电零点校准:

由于绝对值编码器的位置只在一圈内有效工业机械臂经过减速后为了获取绝对位置一般是做输出端编码但是这样精度就降低了30倍减速比所以更合理的是做双编码器而我这个项目中双编码器影响结构紧凑设计所以用了更巧妙的方式利用电机驱动的电流环控制上电后进行低力矩的无零点定向运动碰到机械臂限位之后确认粗零点无限位开关归零然后根据单圈绝对值编码器的位置精调零点。这个方式的零点是没有误差的而且几乎不受加工精度影响因为在12度360/30内都是绝对值编码器的有效精度范围。

Peak的固件说明

Peak基于X-Track项目大家可以去Peak仓库查看。

关于上位机

视频中的软件仿真基于RoboDK我在视频中开发了连接Dummy的Driver驱动部分官方document有介绍的原版是基于TCP网络接口我修改成了串口并兼容dummy的协议。不过由于这个软件是收费的因此我也基于Unity3D开发了自己的上位机已经发布在仓库。

上位机目前暂时没有计划开源因为还有很多功能要添加我也是希望最后能做成一个类似RoboDK的通用软件大家以后自己做机械臂也能用上当然软件肯定会是免费的。

关于控制算法

首先运动学部分是已经实现了的正逆解都是传统DH参数计算的正解关节角求末端位姿是唯一解比较好办逆解末端位姿求关节角的话会涉及多解一般是8个我这里使用的算法是求解上一姿态和目标姿态中6个关节变化最大角里面最小的那一组作为逆解采用的config。这样可以保证机械臂始终以最小转角进行姿态切换。

然后关节角到电机驱动器输入信号的转换这一块我使用的是梯形加减速曲线进行速度位置规划。举个例子在MoveJ指令中当收到一个关节角运动指令控制器会进行运动角度差分计算得到6个运动差分角度然后取6个差分角中最大的角θ同时根据设置的JointSpeed参数计算运动θ角需要的时间考虑上加减速把这一时间作为其余5个电机的运动参数计算各自的加减速度&最高速度然后6个电机根据计算的参数同步运动就可以保证其同步性和流畅性了。

最后,动力学部分还在开发中,这块暂时没有完全实现。上述的运动学和动力学算法都强烈建议去看一下《机器人学导论》这本书,里面写得非常详细。


感谢以下项目作者: