开源机器人SmallRobotArm机器人源码解读

这篇具有很好参考价值的文章主要介绍了开源机器人SmallRobotArm机器人源码解读。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 SmallRobotArm简介

开源机器人SmallRobotArm是一个开源的6轴机械臂,都由步进电机驱动,github地址:https://github.com/SkyentificGit/SmallRobotArm

 机器人长这个样子

smallrobotarm,机器人,开源,机器人

2 欧拉角及姿态变换

由欧拉角求姿态矩阵

源码中用的欧拉角是ZYZ顺组的欧拉角。

已知世界坐标的坐标(x,y,z)和欧拉角(α,β,γ),求出对应的姿态矩阵:

smallrobotarm,机器人,开源,机器人

源码中实现这一功能的是pos2tran(float* Xpt, float* Tpt)函数。

由姿态矩阵求欧拉角

已知姿态矩阵,求对应的(x,y,z)和欧拉角(α,β,γ)为:

smallrobotarm,机器人,开源,机器人 

源码中实现这一功能的是函数void tran2pos(float* Ttp, float* Xtp)。

3 机器人D-H参数及正运动学

由源码可以看到机械臂用的是标准DH参数,参数表:

i

αi

ai

di

θi

1

-90

r1

d1

t1

2

0

r2

0

t2

3

-90

r3

d3

t3

4

90

0

d4

t4

5

-90

0

0

t5

6

0

0

d6

t6

对于标准DH参数为(α,a,d,θ)的关节,其变换矩阵为:

smallrobotarm,机器人,开源,机器人

SmallRobotArm机器人6个关节的DH参数变换矩阵分别为:

smallrobotarm,机器人,开源,机器人

smallrobotarm,机器人,开源,机器人

所以T06=T01*T12*T23*T34*T45*T56

4 逆运动学求解

SmallRobotArm源码中求逆解的函数为InverseK。它根据给出的机械臂中断的(x,y,z)坐标及欧拉角计算了6个关节角度。

设T06为:

smallrobotarm,机器人,开源,机器人

 欲求反求6个关节角t1,t2,t3,t4,t5,t6

关节角t1解算

根据等式T16=T12*T23*T34*T45*T56=inv(T01)*T06,建立等式

smallrobotarm,机器人,开源,机器人

 取T16的元素(2,2)和(2,3)构成等式:

smallrobotarm,机器人,开源,机器人

可以求出: 

 ​​​smallrobotarm,机器人,开源,机器人

 关节角t2和t3的解算

 t1计算出来后,现在T16等式的右边矩阵都是已知数。这里用aij代指右边矩阵的对应元素。

 取T16的(0,0)元素和(1,0)元素构成等式:

smallrobotarm,机器人,开源,机器人

 上式乘以s23,下式乘以c23,有:

 ​​​​​​​smallrobotarm,机器人,开源,机器人

 下式减去上式有:

smallrobotarm,机器人,开源,机器人

 取T16的(0,1)元素和(1,1)元素构成等式有:

smallrobotarm,机器人,开源,机器人

变换后可得:

smallrobotarm,机器人,开源,机器人 

取T16的(0,2)元素和(1,2)元素构成等式有:

 ​​​​​​​smallrobotarm,机器人,开源,机器人

 变换后可得:

smallrobotarm,机器人,开源,机器人

 取T16的(0,3)元素和(1,3)元素构成等式有:

smallrobotarm,机器人,开源,机器人

变换后得:

smallrobotarm,机器人,开源,机器人

将(2-1)、(2-2)和(2-3)三式相加有:

 smallrobotarm,机器人,开源,机器人

 由此式子可以解出s23/c23,进而解出t2+t3

再代入到(2-4)式中,接出t3,则t2也可求出。

关节角t4、t5和t6的解算

 先求出T03的逆矩阵

smallrobotarm,机器人,开源,机器人

由inv(T03)*T06

smallrobotarm,机器人,开源,机器人

 由T36的元素(0,2)与(1,2),可以求出t4。

t4=atan2(-T36[1][2],-T36[0][2])

由T36的元素(0,2)与(1,2)元素相加取平方和,再开根号,可以求出s5,再结合元素(2,2),可求出t5:

smallrobotarm,机器人,开源,机器人

由T36的元素(2,1)与元素(2,0),可求出t6:

t6=atan2(-T36[2][1], T36[2][0])

5 机器人运动控制

如何走一条直线

最基本的运动是如何从一个点走直线到另外一个点,源码中实现该功能的函数是

void goStrightLine(float* xfi, float* xff, float vel0, float acc0, float velini, float velfin)。其中xfi是出发点关节角度数组,xff是目的点关节角度数组,vel0是巡航速度,acc0是加速度,velini是初速度,velfin是结束速度。

void goStrightLine(float* xfi, float* xff, float vel0, float acc0, float velini, float velfin){
  //
  float lmax = max(abs(xff[0]-xfi[0]),abs(xff[1]-xfi[1]));
  lmax = max(lmax,abs(xff[2]-xfi[2]));
  lmax = max(lmax,abs(xff[3]-xfi[3]));
  lmax = max(lmax,abs(xff[4]-xfi[4]));
  lmax = max(lmax,abs(xff[5]-xfi[5]));
  unsigned long preMil = micros();
  double l = 0.0;
  vel0 = min(vel0,sqrt(lmax*acc0+0.5*velini*velini+0.5*velfin*velfin));
  unsigned long curMil = micros();
  unsigned long t = 0;
  double tap = vel0/acc0-velini/acc0;
  double lap = velini*tap+acc0*tap*tap/2.0;
  double lcsp = lmax-(vel0*vel0/2.0/acc0-velfin*velfin/2.0/acc0);
  double tcsp = (lcsp-lap)/vel0+tap;
  double tfin = vel0/acc0-velfin/acc0+tcsp;
  while (curMil-preMil<=tfin){
    t = curMil-preMil;
    //acceleration phase
    if (t<=tap) {
      l = velini*t+acc0*t*t/2.0;
    }
    //contant maximum speed phase
    if (t>tap && t<=tcsp) {
      l = lap+vel0*(t-tap);
    }
    //deceleration phase
    if (t>tcsp) {
      l = lcsp+vel0*(t-tcsp)-acc0*(t-tcsp)*(t-tcsp)/2.0;
    }
  
    //trajectory x and y as a function of l
    float Xx[6];
    Xx[0]=xfi[0]+(xff[0]-xfi[0])/lmax*l;
    Xx[1]=xfi[1]+(xff[1]-xfi[1])/lmax*l;
    Xx[2]=xfi[2]+(xff[2]-xfi[2])/lmax*l;
    Xx[3]=xfi[3]+(xff[3]-xfi[3])/lmax*l;
    Xx[4]=xfi[4]+(xff[4]-xfi[4])/lmax*l;
    Xx[5]=xfi[5]+(xff[5]-xfi[5])/lmax*l;
    
    goTrajectory(Xx);
    curMil = micros();
  }
}

 速度规划

 goStrightLine函数中用的是梯形速度规划算法。如下图左图所示,对于初速度为V0,为Ve,巡航速度为Vm,运动距离为S的直线运动

smallrobotarm,机器人,开源,机器人 则加速阶段走过的距离Sa和减速段走过的距离Sd为:

 ​​​​​​​smallrobotarm,机器人,开源,机器人

 此时Vm为:

smallrobotarm,机器人,开源,机器人

若有匀速段,则Vm<=Vmm;若没有匀速段,则最大速度只能到Vmm,所以goStrightLine中取最大速度为Vmm和Vel0的较小值,将其重新赋给vel0。

已知最,高速度vel0,可以求出加速时间:

double tap = vel0/acc0-velini/acc0;

进而求出加速段总距离 

double lap = velini*tap+acc0*tap*tap/2.0;

进而求出匀速段距离

double lcsp = lmax-(vel0*vel0/2.0/acc0-velfin*velfin/2.0/acc0);

从而求出匀速段时间

double tcsp = (lcsp-lap)/vel0+tap;

 再求出减速度时间

double tcsp = (lcsp-lap)/vel0+tap;
  double tfin = vel0/acc0-velfin/acc0+tcsp;

 对于当前的时间t,通过判断t所在的区间,可以求出当前的距离,进而求出每个关节角度xx,再调用

电机执行函数goTrajectory(Xx)函数走到目的姿态去。

电机执行

电机执行函数执行函数很简单,就是根据当前电机的角度,若当前角度小于目标角度电机就发一个脉冲正走一步,若大于当前角度电机就发一个脉冲反走一步。其中dl1~dl6参数就是电机走一步对应的角度。文章来源地址https://www.toymoban.com/news/detail-592606.html

到了这里,关于开源机器人SmallRobotArm机器人源码解读的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器人制作开源方案 | 扫地机器人

         扫地机器人是现代家庭清洁的得力助手,能够自主规划清扫路径,避开障碍物,有效覆盖整个清洁区域。扫地机器人的出现极大地减轻了家庭清洁的负担,节省了时间和精力,它可以定期清理地面,确保家居环境的整洁和卫生,让家里变得更加舒适、无尘和宜居。 本文

    2024年02月05日
    浏览(52)
  • 机器人制作开源方案 | 送餐机器人

    作者: 赖志彩、曹柳洲、王恩开、李雪儿、杨玉凯 单位: 华北科技学院 指导老师: 张伟杰、罗建国 1.1 项目目的       近年来,全国多地疫情频发,且其传染性极高,食品接触是传播途径之一。疫情防控需要大量人员投入,常常出现人力紧张的情况,物资配送已经成为一

    2024年02月12日
    浏览(32)
  • 深度解读:返利机器人自动赚佣金是怎么回事?

    大家好,我是微赚淘客系统的小编。在数字时代,返利机器人已经成为了省钱购物的热门选择。那么,返利机器人自动赚佣金是怎么回事呢?今天,我将为大家深度解读返利机器人的赚钱原理和实现方式。 首先,我们要了解返利机器人的赚钱方式。返利机器人的赚钱原理主要

    2024年01月21日
    浏览(31)
  • 论文解读 | 机器人路径跟踪的受控纯追踪法

     原创 | 文 BFT机器人 01  摘要 这篇文章是关于机器人路径跟踪的受控纯追踪算法的研究。文章介绍了传统的纯追踪算法以及相关变体,并提出了受控纯追踪算法作为本文的主要贡献。该算法旨在适应实际环境中的服务和工业移动机器人,提供方法来调整机器人的平移速度以适

    2024年02月08日
    浏览(82)
  • java呼叫中心-java语音机器人-java电销机器人源码-javaAI语音机器人源码-语音识别-ai机器人源码,语音机器人源码,电话机器人源码,电销机器人源码,ai电销机器人,语音机器人部署

    ai机器人源码,语音机器人源码,电话机器人源码,电销机器人源码,ai电销机器人,语音机器人部署,电话机器人系统部署,AI语音机器人,电销机器人部署,电销机器人系统部署,smartivr   沟通交流的老铁,可以点击该链接添加沟通:戳我戳我戳我 ·节点名称及AI话术     

    2024年04月15日
    浏览(50)
  • 机器人制作开源方案 | 自主消毒防疫机器人

    作者:陈毅豪 张植铜 罗郡 马鑫龙 王丹晶 单位:西安外事学院 指导老师:陈小虎 杜喜 1. 1 目的及意义       消毒是疫情防控工作中的重要一环,传统的消毒方式需要人工操作消毒设备,不仅工作量大,且一些消毒剂会对人体造成伤害,消毒机器人便成了代替人工的不二之

    2024年02月02日
    浏览(56)
  • 机器人制作开源方案 | 智能落叶清扫机器人

    作者:李聪赛 马嘉骏 李佳豪 邵一鸣 池宏伟 单位:唐山学院 指导老师:袁娜       近年来,随着人工智能科学和计算机技术人工智能科学的飞速发展,智能机器人技术已成为当代机器人研究领域的热门话题。其中服务机器人开辟了机器人应用的新领域,服务机器人的出现有

    2024年02月04日
    浏览(36)
  • 机器人制作开源方案 | 核酸检测辅助机器人

    作者: 周文亚、胡冲、王晓强、张娟 单位:北方民族大学 指导老师: 马行、穆春阳       新型冠状病毒肺炎全球流行已近三年,其变异毒株不断增强的传播力同时其症状不断变轻,其中无症状(怎么确认是否被感染)导致人们产生放轻松“躺平”还是严控疑虑的心理交织

    2024年02月02日
    浏览(40)
  • 机器人制作开源方案 | AI校园服务机器人

    作者:李强、李振宁、毛维雷、李文文、张奥 单位:山西能源学院 指导老师:姚志广、程晟       在这个科技飞速发展的时代,在工业智造、人工智能的飞速发展中,出现了越来越多的智能化机械装置,也有许多创新类的比赛,本作品基于探索者创新套件设计平台设计出一

    2024年01月20日
    浏览(42)
  • 机器人制作开源方案 | 乒乓球自动拾取机器人

    作者:刘众森、王森、王绘东、崔岳震、宋维鑫 单位:山东农业工程学院 指导老师:潘莹月、廖希杰       我们小组选择项目的任务方向乒乓球的捡取与存放,针对此问题我们研发了一款乒乓球自动拾取机器人。众所周知,乒乓球是一种世界流行的球类体育项目,而我国是

    2024年02月01日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包