Dummy-Robot my super mini robot arm robot items

Overview

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的序列化/反序列化库
  • Core:ST官方的HAL库
  • Driver:ARM的CMSIS驱动
  • Midwares:FreeRTOS支持包
  • 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个电机根据计算的参数同步运动,就可以保证其同步性和流畅性了。

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


感谢以下项目作者:

Comments
  • 电机驱动进入使能模式问题

    电机驱动进入使能模式问题

    稚晖君您好,在复刻42电机驱动板的时候我遇到了一点问题,期望您能答复: 驱动板现在可以进入编码器校准模式,电机正反转一圈后使能,阻力很大。但是key1和key2无反应,疑似死机现象。使用Stlink utility连接后阻力消失,key1和key2依然无反应。 检查驱动板焊接时测量了MT6816引脚的电压值,大致如下图所示。 校准完之后的数据似乎也没写入Flash中,在程序里看到MT6816的地址是0x08017C00,但当电机进入上述使能后,用utility看该地址的flash是空的。 后来试图烧录您的hex程序进驱动板,地址是有数据的,但是key1和key2摁下后仍然无反应。

    图1(mt6816及其电压值) LV9SCEZ6@O9Z3}IF564)ASF 图二(mt6816地址) )V 2DSW8HT3J4A`M2YN6AE 4 YJ1MQBR6{OL0N~MUWB4)M

    opened by Scoulson986 5
  • 关于步进电机驱动代码中数字的疑惑

    关于步进电机驱动代码中数字的疑惑

    作者你好,最近在看步进电机的驱动代码,但是在类似表示FOC控制的函数中存在疑惑若有空希望能帮忙解惑 1.如下面的将dac_reg*5083,这个5083该如何理解 2.同时想咨询一下,步进电机的软件细分有类似的文章能推荐一下吗,原理不了解,代码理解起来比较困难 非常感谢 _void TB67H450Base::SetFocCurrentVector(uint32_t _directionInCount, int32_t _current_mA) { phaseB.sinMapPtr = (_directionInCount) & (0x000003FF); phaseA.sinMapPtr = (phaseB.sinMapPtr + (256)) & (0x000003FF); phaseA.sinMapData = sin_pi_m2[phaseA.sinMapPtr]; phaseB.sinMapData = sin_pi_m2[phaseB.sinMapPtr]; //dac_reg uint32_t dac_reg = abs(current_mA); dac_reg = (uint32_t) (dac_reg * 5083) >> 12; dac_reg = dac_reg & (0x00000FFF);

    opened by mailonghua 4
  • 请教一下,步进如何能像BLDC机械臂一样通过电流环路的控制进而对力进行控制,当前步进电机如何实现这样的效果?

    请教一下,步进如何能像BLDC机械臂一样通过电流环路的控制进而对力进行控制,当前步进电机如何实现这样的效果?

    请教一下,步进如何能像BLDC机械臂一样通过电流环路的控制进而对力进行控制,当前步进电机如何实现这样的效果? 多谢

    Originally posted by @mailonghua in https://github.com/peng-zhihui/Dummy-Robot/issues/77#issuecomment-989757449

    opened by mailonghua 3
  • 关于DCE控制疑问

    关于DCE控制疑问

    稚晖君您好,您的驱动程序里位置控制部分使用了“DCE”方法,代码里面的公式好像是这样的 u(k)=kpep(k)+∑(kiep(m)+kvev(m))+kdev (k) 看起来和一般串级结构不太一样,像是使用了两个PI控制器求和输出到矢量控制中,而在速度控制中采用了独自的PID控制器。 想知道其中的控制设计原理,谢谢大佬!!

    控制结构

    opened by tangul 2
  • 请教一下作者关于机械臂的修改

    请教一下作者关于机械臂的修改

    你好,我觉得dummy是一套十分精巧且美观的机械臂 因为现在作者用的这款减速器已经不容易购买,所以想使用行星减速器替换 但是看了提供step文件当中不包含草图,所以不知道如何下手来修改机械结构以适配行星减速器 ,我能想到用过自建草图再原有的实体上进行填充\会盲切,但这样好像很麻烦 所以请教一下,该如何进行,希望能得到回复

    多谢

    opened by mailonghua 2
  • 咨询zhihui兄,从事这些DIY平时的资金投入情况

    咨询zhihui兄,从事这些DIY平时的资金投入情况

    很久之前,几乎是从zhihui君在大学时候作寻线机器人开始,就一直关注zhihui兄的DIY,也深受启发。

    我最大的问题是,其实zhihui兄之前也曾透露过花过不少钱,但是一直没有一个具体的数量级。

    所以,还是希望zhihui兄能否大概给出个从入门到平时开发的大体的资金投入,个人想得以参考:

    1. 原材料的费用,小的电子元器件估计费用不大,但是一些CPU等重要芯片和制作PCB板子,和作废板子等费用应该投入不小(每次小几百,小一千,累积多了也不少费用估计),能否具体说说?
    2. 这个机械臂成品费用一万元左右,但是从开发到设计,debug,作废等考虑进去,总计会投入多少?
    3. 由此,针对一般的DIY的开发,资金投入分布大概什么样子呢?比如作废板子大概占6,7成总费用等。能否给出个资金占比?当然详单更好。
    4. 除了这些,那些工具一次性的投入,估计还好。不管是焊台,还是3D打印机基本上都是一次性投入,这部分也能出个大概的清单吗?
    5. 总而言之,想知道zhihui兄,平时维持这个DIY爱好,资金投入的大体情况,以供参考。

    不知道这个是不是敏感话题,之前在给您的个人邮箱[email protected] 发过邮件咨询类似问题。如果不方便在issue里公开回答,是否可以邮件给我: [email protected]一些指导和答复?

    谢谢! Johnny

    opened by jpixy 2
  • 步进电机校准失败

    步进电机校准失败

    稚晖君,你好: 我调试电机驱动板的时候发现,校准老是失败。我在OnUartCmd中添加控制校准的代码。上电后通过串口发送'C' 校准电机。当电机正转两圈反转两圈后,检查校准数据失败,CalibrationDataCheck的返回值是CALI_ERROR_AVERAGE_DIR。请问下有可能是什么原因导致的呢? image

    驱动板和电机的连接是这样的: IMG_20220409_140326

    opened by jzijin 1
  • STM32F4 openocd开发,运行正常,但是debug过不去systemclock-config()函数

    STM32F4 openocd开发,运行正常,但是debug过不去systemclock-config()函数

    稚晖君你好,我最近使用stm32f405rgt6开发项目,使用stlink,clion,openocd调试。发现debug模式无法通过systemclock-config函数,会卡在锁相环初始化这里。只有参考这个网址修改了系统生成的systemclock-config函数才可以正常调试。但是修改系统生成的函数,每次cubemx更新都会覆盖掉,非常不方便,不知道你是怎么解决这个问题的? 我的同学使用stm32cubeide调试,就没有这个问题。 我注意到你在瀚文键盘里的调试器已经改用了cmsis-dap,有没有这方面的考虑?

    opened by sytnocui 3
  • STM32 Cube IDE 編譯問題 (undefined reference to)

    STM32 Cube IDE 編譯問題 (undefined reference to)

    我使用 Cube IDE 開啟專案後,編譯時發現無法找到 Userapp/common_inc.h image 將它加入 compiler include 的 PATH 後,變成 common_inc.h 裡面的 function 無法引用 (undefined reference to) image 想請問是 C 和 C++ 混編造成的問題嗎? 謝謝!

    opened by Kevin75311 2
  • 调试工具reftool的使用存在问题

    调试工具reftool的使用存在问题

    连接ref板的usb,运行项目文件夹3.software/cli-tool/run.bat,在终端可以看到“Connected to Dummy-Robot 326133493531 as dummy0”的反馈,但过几秒会显示“Oh no dummy0 disappeared”,终端输入dummy0按tab可以显示提示,下级按tab就没有属性提示了,请问我是哪里没做对吗? image

    opened by zslswlw 0
Owner
稚晖
野生钢铁侠本侠。
稚晖
Dummy code for using an ESP32 as a lightbulb in Apples HomeKit.

ESP32 HomeKit Lightbulb A dummy implementation of a HomeKit lightbulb using the ESP HomeKit SDK by Espressif for the ESP32. Prerequisites PlatformIO U

Louis Meyer 2 Apr 27, 2022
D2R mod generator. Provide quick tool to generate .txt files to change game balance: increase drop, monster density or even randomize items.

Diablo 2 mod generator Generator is inspired by d2modmaker. It provides fast and easy way to create mod without any modding knowledge. Features includ

Smirnov Vladimir 31 Dec 22, 2022
This package contains the common algorithms in robotic arm, and I have developed it based on universal robot. It will be continuously updateing.

Robotic_Arm_Algorithms It contains the common algorithms in robotic arm, and will be recording the development as soon as I have completed the any one

Mingshan-Beal 98 Dec 21, 2022
WIP: ESP32 powered robot dog, quadruped robot. This is just code, hardware in the other repositories

Small Robot dog (quadruped) Hardware ESP32 IMU (not implemented) 12 servos TowerPro mg90d (hope it will work) Two 18650 Software Arduino IDE compatibl

Gleb Devyatkin 74 Dec 22, 2022
A place to collaborate on code for the Embedded.fm book club. Currently reading "STM32 ARM Programming for Embedded Systems".

Welcome to the Book Club Code site! This is a place for the Embedded.fm book club to collaborate and learn together. Repo Structure Guide Top-level fo

Peter Griffin 11 Jul 21, 2022
A lightweight ARM reverse engineering tool.

eydis A lightweight (basic and slow) ARM reverse engineering tool. I. Requierements macOS/Linux, Basics compiling tools, The SQLite3 + readline framew

Yui Aioi 18 Aug 15, 2022
Prometheus exporter for ARM® Hardware components using HWCPipe.

ARM® HWCPipe Exporter ARM® HWCPipe Exporter is a Prometheus exporter written in Java and C++ that retrieves metrics from Android devices running on AR

Jinesi Yelizati 4 Oct 5, 2022
An experimental operating system for x86 and ARM

Odyssey - an experimental operating system for x86 and ARM

Anuradha Weeraman 39 Dec 28, 2022
ARM DevSummit workshop with Portenta H7

ARM DevSummit 2021 - Edge Impulse Portenta workshop Edge Impulse enables developers to create the next generation of intelligent device solutions with

Edge Impulse 8 Oct 19, 2021
Kernel with ARM/KVM for SM-A600G (Samsung Galaxy A6) with Exynos7870 SoC

Kernel source for SM-A600G (Samsung Galaxy A6 with exynos7870) with KVM support. Warning: Super long text ahead, be careful not to mess up your brain

@raspiduino 6 Sep 20, 2022
An articulating arm in OpenGL for coms336

Theodore Davis tcdavis Sean Griffen griffens opengl-articulating-arm Articulating Arm in OpenGL for ComS 336 Project Description The scene will defaul

Sean Griffen 1 Nov 16, 2021
A small RTOS for ARM Cortex-M3/M4 based Microcontrollers.

A tiny RTOS for ARM Cortex-M3/M4 based Microcontrollers. Explore the docs » View Demo · Report Bug · Request Feature Table of Contents About The Proje

Puranjay Mohan 34 Dec 31, 2022
Control of 4 DOF robotic arm using Bluetooth HC-05 Sensor

SERV-E -> "At your Service" Problem Statement With the current boom of technology where the whole world is running towards digitisation and automation

Swarup Tripathy 2 Apr 27, 2022
PHP Encoder, protect PHP scripts in PHP 8 and PHP 7, High Performance, Compitable with X86_64, MIPS, ARM platform and Ubuntu/Centos/OpenWRT system.

What's FRICC2? FRICC2 is a PHP Script encryption tool. When you are developing a commercial software using PHP, the script can be distributed as encry

Hoowa Sun 43 Dec 12, 2022
minimal bootloader + app example for ARM Cortex-M

cortex-m-bootloader-sample Based on https://github.com/noahp/pico-c-cortex-m , this project shows a simple bootloader+application configuration for an

Noah Pendleton 5 Jan 9, 2022
Unicorn CPU emulator framework (ARM, AArch64, M68K, Mips, Sparc, PowerPC, RiscV, X86)

Unicorn Engine Unicorn is a lightweight, multi-platform, multi-architecture CPU emulator framework based on QEMU. Unicorn offers some unparalleled fea

Unicorn Engine 6k Jan 3, 2023
A collection of command line tools for ARM devices with Allwinner SoCs.

sunxi-tools Copyright (C) 2012 Alejandro Mery [email protected] For a full list of contributors, see this link or use the command git shortlog -se --no-m

Free/Open Source Software for Allwinner SoCs (A10/A13/A10s/A20/A31/...) 467 Jan 2, 2023
A LVGL porting for Cortex-M55 running on an Arm official FPGA prototyping development board called MPS3 (AN547)

A LVGL porting for Cortex-M55 running on an Arm official FPGA prototyping development board called MPS3 (AN547), see Figure 1. It is also possible to run the project template on an emulator called Corstone-300-FVP, which is free.

Gabriel Wang 7 Dec 7, 2022
Repo for the DSA Mini-project Directory Manager

Directory Manager Repo for the DSA Mini-project Directory Manager Installation and Setup To setup the program on your desktop, do the following. git c

Pramod Rao Budramane 5 Oct 16, 2021