程序代写代做代考 graph flex Dobot Magician 机器人

Dobot Magician 机器人
实验指导书(基于 VREP) Version 2.0
武汉理工大学 自动化学院 罗璠 2020.06

目录 实验 1 正逆解计算验证及单关节控制
实验 2 平面绘图及码垛

实验 1 正逆解计算验证
一、实验目的
1、了解 Dobot Magician 机器人的组成、结构,VREP 的基本操作;
2、掌握串联机器人正、逆解的计算方法
二、需要的设备及器材
1、硬件:计算机
2、软件:CoppeliaSim Edu(即原 VREP)
三、预备知识
1、Dobot 机器人的机械结构
(1)组成及外观
Dobot Magician 机器人由底座、大臂、小臂、末端工具等组成, 外观如图 1 所示。
底座、大臂、小臂分别由三个带有编码器的步进电机驱动,末端工具可以更换。
图 1 Dobot Magician 机器人组成
(2)工作空间
工作空间是指机器人末端执行器可以到达的空间范围。Dobot Magician 机器人的工作 空间如图 2 所示。
图 2 Dobot Magician 机器人的工作空间 2、Dobot 机器人的坐标系

(1)关节坐标系
底座、大臂、小臂分别由三个带有编码器的步进电机驱动,这三个关节记为 J1、J2、J3。 末端工具可以更换,当使用带有舵机的末端工具时,舵机驱动的关节记为 J4。使用这四个关 节的角度位置(当末端工具没有舵机时只有 3 个关节)描述机器人的末端执行器位置,可以 建立机器人的关节坐标系。各关节均为旋转关节,逆时针方向记为正方向。关节坐标系如图 3 所示。
图 3 关节坐标系
●机器人的本体中心线与底座的正前方中心对应时,关节 1 处于其原点位置,旋转正方 向为俯视本体时的关节 1 的逆时针旋转方向;
●机器人大臂垂直竖立时,关节 2 处于其原点位置,旋转正方向为使大臂朝前朝下运动 的方向;
●机器人的小臂处于平行于底座平面时,关节 3 处于其原点位置,旋转正方向为使小臂 朝下运动的方向(注意:关节 3 的角度是与水平面的夹角,而不是与关节 2 的相对转角);
●关节 4 的旋转正方向是俯视本体时关节 4 的逆时针旋转方向 这四个关节的活动范围如表 1 所示。
表 1 关节活动范围
(2)笛卡尔坐标系
还可以以底座、大臂、小臂三个驱动电机的轴的交点作为坐标原点,建立如图 4 所示的 笛卡尔坐标系。
●原点是第二个关节旋转轴上的中心点;
●X 轴的方向是以原点为起点,垂直于第二关节旋转轴的朝前方向; ●Z 轴的方向是以原点为起点,垂直于第二关节旋转轴的朝上的方向; ●Y 轴的方向由右手螺旋定则确定。
关节
负限位°
正限位°
底座 J1
-125
125
大臂 J2
-5
90
小臂 J3
-15
90
末端 J4
-150
150

图 4 笛卡尔坐标系
3、尺寸及各连杆上建立的坐标系示意图
Dobot Magician 机械臂由 4 个关节,4 个连杆组成组成。其中 3 个关节是有驱动的关 节,这 4 个关节分别是底座关节 J1、大臂关节 J2、小臂关节 J3,另一个是从动的腕部关节 Jx。5 个连杆分别是底座关节 J1 到大臂关节 J2 之间的连杆 L0(长度为 0)、关节 J2 和 J3 之 间的连杆 L1(大臂)、关节 J3 到腕关节(从动关节)之间的连杆 L2(小臂)、腕关节到舵机 旋转中心相交处之间的连杆 L3(腕部)。
图 5 连杆长度及连杆上的坐标系
在各连杆长度及各连杆上建立的坐标系如图 3 所示。注意:图 5 中坐标系 oxyz0 的位 置是为了便于绘图,并未画到原点与 oxyz1 原点重合的位置,实际在 oxyz1 原点处应重 合。
4、CoppeliaSIm 的基本操作
见 CoppeliaSim 的帮助,打开帮助的方法如下: 在菜单中点“Help”,然后点“Help Topics”,会在浏览器中打开帮助文件,如图 6. 可以在左边目录树中选择需要查看的具体内容。

5、本次实验用到的 Lua 函数
sim.getObjectHandle sim.getObjectMatrix sim.getObjectOrientation sim.getJointPosition sim.setJointTargetPosition sim.addStatusbarMessage string.format
图 6 帮助文件
simUI.create
simUI.getEditValue
simUI.setLabelText
math.atan2
math.acos
math.sqrt
math.cos
以上函数的功能、参数、返回值参考 CoppeliaSim 的帮助文件的“Writing code in and
around CoppeliaSim”部分。
四、实验项目及要求
1、正解计算及验证
根据 D-H 模型推导出 Dobot Magician 的位姿变换矩阵01T、12T、23T、34T、45T、以及
总的变换矩阵,并编写 Lua 脚本程序,实现以下功能:
(1)通过 sim.getJointPosition 函数读取 Dobot Magician 的各关节角,并利用
sim.addStatusbarMessage 函数打印关节角信息;
(2)通过 sim.getObjectMatrix 函数读取 Dobot Magician 的执行器末端位姿信息,,并
利用 sim.addStatusbarMessage 函数打印位姿信息; (3)以第(1)步中读取到的各关节变量为输入,利用位姿变换矩阵计算出末端执行器
位姿信息,并利用 sim.addStatusbarMessage 函数打印输出,比较计算出的位姿和 sim.getObjectMatrix 函数读取到的位姿;
(3)通过 Dobot Control Pannel 改变 Dobot Magician 的关节角,从而改变末端位姿,

使末端分别位于笛卡尔坐标系的 8 个象限中,重复上述过程,验证推导的位姿变换矩阵的正 确性。
要求:
(1)写出推导过程和 5 个变换矩阵;
(2)提供 Lua 脚本(含注释)及其程序流程图
(3)提供对应的 Dobot Control Pannel 截图、脚本打印出的数据截图、dobot 机械臂
画面截图,并将数据整理成实验记录表格,进行误差分析。
2. 逆解计算及验证
推导出 Dobot Magician 机械臂的逆解计算公式,并编写 Lua 脚本实现以下功能: (1)通过 sim.getObjectMatrix 函数读取 Dobot Magician 的末端位姿信息,并利用
sim.addStatusbarMessage 函数打印位姿信息; (2)以第(1)步中读取到的笛卡尔坐标为输入,计算各关节变量的值,并利用
sim.addStatusbarMessage 函数打印输出,比较计算出的关节变量和 sim.getJointPosition 函 数读取到的关节变量;
(3)通过 Dobot Control Pannel 改变 Dobot Magician 的关节角,从而改变末端位姿, 使末端分别位于笛卡尔坐标系的 8 个象限中,重复上述过程,验证推导的逆解计算公式的正 确性。
(4)编写脚本,实现通过 Dobot Control Pannel 在笛卡尔坐标系中对 dobot 的控制。 即单独改变 x、y、z、r 的值,机械臂执行相应的运动。
要求:
(1)写出推导过程和最终的逆解计算公式;
(2)提供 Lua 脚本(含注释)及其程序流程图
(3)提供对应的 Dobot Control Pannel 截图、脚本打印出的数据截图、dobot 机械臂
画面截图,并将数据整理成实验记录表格,进行误差分析。 提示:逆解公式的推导可采用几何关系推导,也可以通过逆矩阵求解。
五、思考题
1. 正变换计算的结果为什么和 sim.getObjectMatrix 获取到的位姿有偏差?
2. 正变换中总的变换矩阵中各元素的含义是什么?
3. 计算串联机器人逆变换的方法有哪些,你在本实验中采用的哪种方法,为什么?

一、实验目的
实验 2 平面绘图及码垛
1、进一步掌握 CoppeliaSim 中使用脚本进行仿真控制的方法;
2、 掌握 Dobot Magician 机器人的单关节运动控制、多关节运动控制
二、需要的设备及器材
1、硬件:计算机
2、软件:CoppeliaSim Edu(即原 VREP)
三、预备知识
1、CoppeliaSim 中脚本的分类及其执行方式
CoppeliaSim 使用的脚本语言是 Lua,除了支持 Lua 的官方命令之外,还对其进行了扩 展,添加了一些 CoppeliaSim 的专用命令,这些专用命令以 sim 或 simUI 作为前缀,例如 sim.handleCollision,simUI.getEditValue。
图 1 脚本的分类
CoppeliaSim 的脚本分类如图 1 所示。其中仿真脚本 simulation scripts 和自定义脚本
custom scripts 统称为嵌入式脚本 embedded scripts。所谓嵌入式脚本是指脚本被嵌入到一 个场景或者一个模型中,可以和场景或模型一起被保存和加载。
仿真脚本仅在仿真过程中才执行,用于自定义仿真或者自定义一个仿真模型。它又可以 分为主脚本 main scrip 和子脚本 child scripts.。主脚本处理仿真的主循环,调用其他的脚本, 一般不建议修改主脚本。子脚本控制模型或者机器人。自定义脚本在仿真没有运行时也可以 执行,被用来自定义仿真场景或仿真器本身。
具体介绍可以参考: (1)https://blog.csdn.net/DanielDingshengli/article/details/80547400

(2)coppeliaSim 自带的帮助文件。 本次实验采用在线程化子脚本中编程控制 dobot。
2、CoppeliaSim 中的关节的位置的控制方法
CoppeliaSim 中对关节的位置进行设置的 API 函数有以下几个: (1)sim.setJointPosition() :当关节不处于 force/torque 模式时(例如处于 inverse
kinematic 模式),对单个关节的位置进行设定。
(2)sim.setJointTargetPosition() :当关节处于force/torque模式,并且它的电机(motor)
和控制环(control loop)都处于使能状态时,对单个关节的位置进行设定。 (3)sim.rmlMoveToJoinyPositions():使用 Reflexxes Motion Library type II 或 IV 使几个
关节同时运动到指定的位置。这个函数只能在线程子脚本中调用。 上述函数的具体使用方法见 CoppeliaSim 的帮助文件。 可以在场景树形结构图中双击关节以显示关节的属性对话框,从中查看或设置关节模式,
如图 2 所示。
图 2 查看关节模式
点击图 2 中的 show dynamic properties dialog 可以查看和更改电机属性和控制属性,
如图 3 所示。

图 3 关节动力学属性
本实验中关节的设置如图 2、图 3 所示,因此应使用 sim.setJointTargetPosition() 设置 关节的位置,或者使用 sim.rmlMoveToJoinyPositions()设置关节的位置。
3、本实验中用到的 Dobot 机器人 API 函数
dType.GetPose(api)
dType.SetPTPCmd(api, ptpMode, x, y, z, rHead, isQueued=0) dType.SetARCCmd(api, cirPoint, toPoint, isQueued=0) dType.SetWAITCmd(api, waitTime, isQueued=0) dType.SetEndEffectorSuctionCup(api, enableCtrl, on, isQueued=0) dType.SetPTPJumpParams(api, jumpHeight, zLimit, isQueued=0) 各函数用法,请查看《Dobot Magician API 接口说明》。
四、实验项目及要求
1. 单关节控制
编写 Lua 脚本,通过单关节控制实现物品搬运,具体功能如下: (1)以当前位置为起点,通过 sim.getObjectMatrix 函数获取当前位置; (2)自己设定一个终点位置和若干个中间点,以这些点的笛卡尔坐标为逆解计算的输
入,计算出其对应的关节变量;
(3)利用 sim.setJointTargetPosition 函数在关节空间中,每次修改一个关节变量,中间
插入等待函数 sim.wait(2),以三次单关节运动的方式完成到下一个目标点的移动。 (4)使用 suctionCupCmd(”on”)打开吸盘吸取物体,使用 suctionCupCmd(”off”)
关闭吸盘

(4)重复(3)完成把物品从起点搬移到终点。
(5)将第(3)步中的函数替换为 sim.rmlMoveToJoinyPositions(),同时改变三个关节 的角度,使其同时到达目标位置,完成物品搬运。
要求:
(1)提供 Lua 脚本(含注释)及程序流程图 (2)列出起点、中间点、终点的笛卡尔坐标及其对应的关节变量 (3)提供搬运过程中的若干张截图,要比较好的反应搬运的过程(可以采用视频截图) (4)对比分析单关节操作和多关节同时操作的区别。
2、平面绘图操作
在吸盘末端添加 graph 显示末端运动轨迹以模拟末端执行器为水笔的情形,通过 Lua 脚
本控制机器人进行平面绘图,要求:
(1)编写如下函数:
1绘制直线函数
功能:从当前位置开始绘制指定长度的直线,直线方向与机器人 x 轴正方向夹角为指定
角度(逆时针旋转为正)
输入参数:直线长度、直线与 x 轴正方向夹角
2绘制圆弧函数 功能:以当前点为起点,绘制以指定点为圆心、圆弧角度为指定值(逆时针为正)的圆

输入参数:圆心的 x 坐标和 y 坐标、圆弧角度
4绘制圆形函数
功能:以当前点为起点,绘制以指定点为圆心的圆形
输入参数:圆心的 x 坐标和 y 坐标
(2)编写 Lua 脚本,调用以上函数,分别使用多边形、圆弧、圆形绘制类似如图 4 所
示的由多个相同元素重复构成的图形。
图 4 绘制图形的要求 要求:提交编写的脚本,并绘制脚本的程序流程图,提交绘制的图形轨迹截图。
4. 码垛
末端执行器使用吸盘,将叠在一起的 5 个长方体从桌面上的位置 A 越过中间的障碍物 搬运到位置 B。
要求:
(1)要求搬运完成后长方体的方向绕竖直方向旋转 90°。
(2)使用 Lua 脚本完成控制
(3)记录完成搬运所用的时间、AB 两点之间的平面距离、障碍物的高度。

(4)提交 Lua 脚本、脚本程序流程图、能反应搬运过程的视频及照片若干(可以采用 先录像后截屏的方法)。
五、思考题
1. Dobot Magician 机器人有几个自由度(末端安装舵机时)?它与 6 自由度串联机器 人相比,由于少了 2 个自由度,带来的影响是什么(或者说运动上有什么特点或局限)?
2. 你是如何尽量缩短搬运硬币所用的时间的?