第五天:了解越疆dobot机械臂,使用python,编写通过ros服务控制机械臂运动程序

2023-05-16

一、了解越疆dobot机械臂

详细信息可以查看用户手册和API开发手册,以及其它官方提供资料,这里我只列出我在开发过程中遇到的问题,以及需要了解的知识点。

(1)坐标系

我们可以看到这里涉及的坐标系主要是两种,一种是关节坐标系,一直是笛卡尔坐标系。我们可以通过命令获取到这两组坐标系的值,后面详细说明。
机械臂坐标系

#这里是手册里面针对两种坐标系
 关节坐标系:以各运动关节为参照确定的坐标系。
	 若Dobot Magician未安装末端套件,则包含三个关节:J1、J2、J3,且均为旋转关节,逆时针为正。
	 若Dobot Magician安装带舵机的末端套件,如吸盘和夹爪套件,则包含四个关节:J1、J2、J3和J4,均为旋转关节,逆时针为正。
 笛卡尔坐标系:以机械臂底座为参照确定的坐标系。
	 坐标系原点为大臂、小臂以及底座三个电机三轴的交点。
	 X轴方向垂直于固定底座向前。
	 Y轴方向垂直于固定底座向左。
	 Z轴符合右手定则,垂直向上为正方向。
	 R轴为末端舵机中心相对于原点的姿态,逆时针为正。当安装了带舵机的末端套件时,才存在R轴。R轴坐标为J1轴和J4轴坐标之和。

(2)运动模式

本款机械臂主要有括点动模式、点位模式(PTP)、圆弧运动模式(ARC)。PTP和ARC可总称为存点再现运动模式。 三种运动模式,
(1)点动模式即示教时移动机械臂的坐标系,使机械臂移动至某一点。Dobot Magician的坐标系可分为笛卡尔坐标系和关节坐标系,用户可单击笛卡尔坐标系按钮或关节坐标系按钮移动机械臂。

 笛卡尔坐标系模式:
	 单击“X+”、“X-”,机械臂会沿X轴正负方向移动。
	 单击“Y+”、“Y-”,机械臂会沿Y轴正负方向移动。
	 单击“Z+”、“Z-”,机械臂会沿Z轴正负方向移动。
	 单击“R+”、“R-”,机械臂末端姿态会沿R轴正负方向旋转。
 关节坐标系模式:
	 单击“J1+”、“J1-”,可控制底座电机正负方向旋转。
	 单击“J2+”、“J2-”,可控制大臂电机正负方向旋转。
	 单击“J3+”、“J3-”,可控制小臂电机正负方向移动。
	 单击“J4+”、“J4-”,可控制末端舵机正负方向旋转。

(2)点位模式即实现点到点运动,Dobot Magician的点位模式包括MOVJ、MOVL以及JUMP三种运动模式。不同的运动模式,示教后存点回放的运动轨迹不同。

 MOVJ:关节运动,由A点运动到B点,各个关节从A点对应的关节角运行至B点对应的关节角。关节运动过程中,各个关节轴的运行时间需一致,且同时到达终点,如图 3.6所示。
 MOVL:直线运动,A点到B点的路径为直线,如图 3.6所示。
 JUMP:门型轨迹,A点到B点以MOVJ运动模式移动,如图 3.7所示。
		以MOVJ运动模式上升到一定高度(Height)。
		以MOVJ运动模式平移到B点上方的高度处。
		以MOVJ运动模式下降到B点所在位置。

在这里插入图片描述
在这里插入图片描述
(3)圆弧模式即示教后存点回放的运动轨迹为圆弧。圆弧轨迹是空间的圆弧,由当前点、圆弧上任一点和圆弧结束点三点共同确定。圆弧总是从起点经过圆弧上任一点再到结束点,如图 3.8所示。
在这里插入图片描述
几种方式的运用场景:
在这里插入图片描述

API接口

官方提供的接口函数有几百个,我们可以根据需要使用,其实我们这里也就常用的有几个接口而已,可以根据需要去使用,下面我们开始正式进入机械臂控制编程。
在这里插入图片描述

二、使用python,编写通过ros服务控制机械臂运动程序

注意后面运行python脚本的时候,要先开启机械臂的服务,直接使用一下指令即可

roslaunch dobot DobotServer.launch

(1)设置机械臂的归零状态:

SetHOMECmd.py(调用SetHOMECmd服务,编写client,这里函数接口已经通过服务方式进行封装好了我们直接可以使用)

#!/usr/bin/env python
#-*- conding:utf-8 -*-

import rospy
from dobot.srv import SetHOMECmd

if __name__ == "__main__":
    rospy.init_node('testDobot')
    rospy.wait_for_service('DobotServer/SetHOMECmd')
    try:
        client = rospy.ServiceProxy('DobotServer/SetHOMECmd',SetHOMECmd)
        response = client()
    except rospy.ServiceException, e:
        print "Service call failed: %s"%e

这是我在API里找到的函数原型,我们直接使用系统的回零接口即可。
在这里插入图片描述

(2)设置机械臂末端吸取器的状态

SetEndEffectorSuctionCup.py

#!/usr/bin/env python
#-*- conding:utf-8 -*-

import rospy
from dobot.srv import SetEndEffectorSuctionCup

if __name__ == "__main__":
    rospy.init_node('testDobot')
    rospy.wait_for_service('DobotServer/SetEndEffectorSuctionCup')
    try:
        client = rospy.ServiceProxy('DobotServer/SetEndEffectorSuctionCup',SetEndEffectorSuctionCup)
        response = client(1,1,True)
        #response = client(0,0,True)
    except rospy.ServiceException, e:
        print "Service call failed: %s"%e

这里需要传递两个参数,分别表示气泵是否使能以及吹吸气状态。
在这里插入图片描述

(3)执行 PTP 指令

设置机械臂运动的目的坐标,这里一共需要传递五个参数,通过官方的API接口可以看到每一个参数的意思。

#!/usr/bin/env python
#-*- conding:utf-8 -*-

import rospy
from dobot.srv import SetPTPCmd

if __name__ == "__main__":
    rospy.init_node('testDobot')
    rospy.wait_for_service('DobotServer/SetPTPCmd')
    try:
        client = rospy.ServiceProxy('DobotServer/SetPTPCmd',SetPTPCmd)
        response = client(1,-2.2,258,121,-10)
    except rospy.ServiceException, e:
        print "Service call failed: %s"%e

可以看到,第一个代表PTP模式的设置,后面四个参数主要是描述坐标系的相关量。我们这个工程主要使用模式1,MOVJ模式和笛卡尔坐标系了,这就用到了博文开头提到的坐标系和模式介绍。
在这里插入图片描述
在这里插入图片描述

(4)整合相关接口,实现完整的一个实现流程。

首先,我们先理一下我们的思路。
我们的流程就是:建图——>导航——>识别——>抓取——>移动到目标点——>投递——>(回到第三步,反复识别抓取投递)。
今天这里研究的是抓取。我们通过识别邮件的信息和位置,然后通过机械臂去抓取。我们车导航到分拣台,但是邮件的位置是一个不知道的位置,我们首先通过摄像头去进行一个图像分割,检测到邮件出现在我们摄像头里面,就可以算出邮件的中心点相对于摄像头图像中心点的差值,我们分别返回相差的X,Y值,然后控制机械臂运动去抓取。
我们首先可以知道现在的机械臂末端位置的X,Y,Z坐标(我们使用的就是笛卡尔坐标系,可以获得当前坐标点的一个坐标)然后我们可以通过X,Y分别加上我们放回的值然后移动机械臂去抓他是吧,听着确实也好懂。
当时,我们得考虑一下临界值,就是实际上Y,Z的值分别是有第二和第三连接角进行控制的,至于X只是底盘的一个值可以不用多讨论。而我们的Y变化是和Z有关的,所以我们需要测出这个范围值。

其实在思考这里的时候,我首先想到的不是上面这个样子直接对左边进行的一个加减。我之前做垃圾桶的时候进行的分拣,那里实际上用到了计算机械臂的逆解,当时是个六自由度的机械臂,这里是四自由度的一个机械臂,相对要简单一些,不过这里四自由度逆解算法手上没有现成的,也就没有使用算逆解的方式。后面有机会在补充试试。而且这里实际上也不要那么麻烦。
我们只要在固定的高度Z测试一下范围即可。因为我们首先是在一个固定的定去识别邮件,首先记录这个点的高度,然后我们需要降到桌面去吸取邮件,这是第二个高度,我们只需要测定这两个高度Z的前提下,Y的移动范围就可以了!
下面是我写的一个简单的测试程序:

#!/usr/bin/env python
#-*- conding:utf-8 -*-

import rospy
import time
from dobot.srv import SetPTPCmd

if __name__ == "__main__":
    new_y = -250
    x = 7
    y = -17
    r = -170 
    rospy.init_node('PTP_Dobot')
    rospy.wait_for_service('DobotServer/SetPTPCmd')
    try:
        PTP_client = rospy.ServiceProxy('DobotServer/SetPTPCmd',SetPTPCmd)
	while True:
	    new_y += 2
	    response = PTP_client(1, x, new_y, z, r)
	    print("publish ok,new_y is:", new_y)
	    time.sleep(0.5)
    except rospy.ServiceException, e:
        print "Service call failed: %s"%e

这里实在Z值固定的范围下对x,y进行测试,由于x的范围很大,不会超出其范围,所以只对y进行测试即可。
这里最终机械臂会进行报错,由于是软件报错,所以可以直接使用警报清除命令:rosservice call /DobotServer/ClearAllAlarmsState就可以恢复。

这是我们测试的几组值,其实可以看到X一定的情况下,Y的范围取决于Z值高的,也不难想,机械臂越高,那么Y轴可移动空间越小,所以建议以高的为限制。

当Y=-310时,Z的范围是   -90~100
当Y=-300, Z的范围是  -100 ~120
当Y=-290时,Z的范围是   -110~135
注意,这里下方有气泵阻挡,所以Y不能大于-235
当Y=-235时,Z的范围是   -140~165


Z=85  Y的范围是    -310 ~  -190
Z=55  Y的范围是    -320 ~  -175
Z= 95  Y的范围是	  -310 ~-190
Z= -17 Y的范围是	  -328 ~ -174

今天大概就到这里!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第五天:了解越疆dobot机械臂,使用python,编写通过ros服务控制机械臂运动程序 的相关文章

  • 【博弈论】【第一章】博弈论导论

    博弈论导论 例题 选择数字 例题 巴什博弈 例题 射手博弈博弈论的基本概念 xff1a 参与人战略行动信息支付函数 例题 分100元 课程概述 xff1a 例题 选择数字 两个参与人A和B xff0c 轮流选择 3 4 5 6 7 8 9
  • C++中的const_interator

    当我们做出如下定义时 vector lt ID gt ids vector lt ID gt const iterator iter 并进行了下面的操作 xff0c 则是正确的 for iter 61 ids begin iter 61 i
  • JAVA基本数据类型的字节与位数以及String类型的最大长度

    目录 基本数据类型的字节与位数如下 xff1a String类型的最大长度 基本数据类型的字节与位数如下 xff1a 变量名称 字节 位数byte 1 8short 2 16int 4 32long 8 64float 4 32double
  • arduino、Ms5611与1602实现气压温度高度显示

    项目场景 xff1a arduino Ms5611与1602实现气压温度高度显示 因为项目需求 xff0c 需要测试Ms5611的精度 xff0c 于是利用arduino和LED1602 xff0c 将Ms5611采集的数据采集并实时显示出
  • UART协议详解

    UART简介 通用异步收发传输器 xff08 Universal Asynchronous Receiver Transmitter xff0c 通常称作UART UART通信在工作中相当常见 xff0c 项目中需要生成uart信号 xff
  • vector的capacity新增长方式(dev c++实测)

    vector的capacity 调用返回vector中最大能够存储的元素个数 xff0c 也即在下一次需要扩充容量之前能容纳的元素个数 reserve会使容器在必要的时候增长 xff0c 以便容纳制指定数目的元素 include lt io
  • Android DNS Resolver

    DNS 解析器 xff08 DNS Resolver xff09 DNS 解析器模块可保护用户免受 DNS 拦截和配置更新攻击 xff0c 并改进了 DNS 解析的网络性能 此模块包含用于实现 DNS 桩解析器的代码 xff0c 该解析器可
  • Python量化相关

    量化实例 xff1a 可转债轮动策略 LOF 封基 ETF动量策略 小市值策略 Python xff1a Python 基础教程 菜鸟教程Python 3 教程 菜鸟教程Windows搭建python开发环境 xff0c python入门到
  • Visual Basic相关

    vb教程
  • 三极管和运放构成的几种恒流源电路分析

    如何利用三极管和运放设计一个150mA的恒流源 xff0c 求电路图 xff0c 验证过的 xff01 xff01 xff01 三极管和运放构成的几种恒流源电路分析 还不是太理解 这几种电路都可以在负载电阻RL上获得恒流输出 第一种由于RL
  • AI相关资料整理

    scikit learn中文社区
  • Android开发知识备忘

    Android Studio 上jar包 xff0c aar包 xff0c aidl xff0c aidl打成aar包的正确使用Android AIDL bindService后不能调用onServiceConnected方法 xff08
  • 【C++】struct和class的区别

    在C 43 43 中我们可以看到struct和class的区别并不是很大 xff0c 两者之间有很大的相似性 那么为什么还要保留struct 这是因为C 43 43 是向下兼容的 xff0c 因此C 43 43 中保留了很多C的东西 一 首
  • MPLAB程序中如何设置配置字

    基于MPLAB X IDE配置位设置讲解 在不同的芯片中其配置字不尽相同 xff0c 但是管家最常用到的有如下几部分 xff1a 1 芯片的振荡模式 xff0c 有内外之分 xff0c 还有三个速度的选择 2 xff0c 片内看门狗的启用
  • 直流电机驱动电路设计

    http bbs ednchina com BLOG ARTICLE 177889 HTM 一 直流电机驱动电路的设计目标 在直流电机驱动电路的设计中 xff0c 主要考虑一下几点 xff1a 功能 xff1a 电机是单向还是双向转动 xf
  • 奇偶校验码

    http blog 163 com ma youzhong blog static 42459154200821785759423 老顽童 xff08 原创 xff09 二进制数据经过传送 存取等环节 xff0c 会发生误码 xff08 1
  • 串口半双工与全双工

    怎么这么多人认为 xff14 xff18 xff15 是半双工 xff1f 大家能不能看一下具体的定义啊 xff1f xff01 不要认为我们经常使用 xff14 xff18 xff15 的半双工方式就认为 xff14 xff18 xff1
  • NPN传感器PNP传感器原理和分类

    PNP与NPN型传感器其实就是利用三极管的饱和和截止 xff0c 输出两种状态 xff0c 属于开关型传感器 但输出信号是截然相反的 xff0c 即高电平和低电平 PNP输出是高电平1 xff0c NPN输出的是低电平0 PNP与NPN型传
  • Windows系统上在vscode连接服务器http-server

    1 打开vscode xff0c 创建一个HTML文件 2 查看 gt 终端 3 Windows10的终端是powershell xff0c 点击 xff0c 在下拉栏找到默认 xff0c 更改成cmd终端 4 输入 npm install
  • 精密单点定位技术(PPP)和RTK技术有什么区别

    首先用通俗的话来说 xff0c RTK是先架设一个基站 xff0c 基站把自己的误差是多少告诉我 xff0c 我再用这个误差项去消除自己移动站的误差 而PPP不用我们自己架设基站 xff0c 已经有一些基础的基站 xff0c 通过卫星发送的

随机推荐

  • ubuntu network manager 网络需要手工重启解决

    乌班图的无线和网络需要手工 sudo service network manager restart才可以搜索到 其实主要是我手工编辑了 etc network interface 修改的方法就是在 etc NetworkManager N
  • C#垃圾回收GC机制

    https www cnblogs com yzl050819 p 6245463 html 可以参考这篇文章的内容 程序员不能控制解构器何时将被执行因为这是由垃圾收集器决定的 垃圾收集器检查不在被应用程序使用的对象 它认为这些条件是符合清
  • 编译xlslib 测试写入中文

    1下载xlslib库 https sourceforge net projects xlslib source 61 directory 我下载的是 xlslib package 2 5 0 zip 解压 在xlslib xlslib bu
  • 电商API:拍立淘图片搜索

    item search img 按图搜索淘宝商品 xff08 拍立淘 xff09 查看演示 onebound taobao item search img 请求参数 xff1a imgid 61 http g search3 alicdn
  • Qt的UI布局以及控件间隔(Spacing)边距(Margins)

    替一个Widget设置布局有两种方法 1layout 构造函数传递QWidget QVBoxLayout MainQVboxLayout 61 new QVBoxLayout MainWidget 2layout构造函数传递NULL xff
  • 让Qt自定义窗口边界可以拉伸

    qt去掉外边框以后 边界不能拉伸 第一 根据mouseevent事件到达边界的时候自己处理 通过resize 来设置 这种需要写的代码较多 windows平台上有更简版的方法 处理winevent里面的 WM NCHITTEST switc
  • 最新uboot的Kbuild系统 3 .config的生成

    前面的工作产生了一个conf 关键点是由conf产生 config的过程 最后是通过执行 scripts kconfig conf defconfig 61 arch configs rpi defconfig Kconfig 生成的 Kc
  • linux下IDA安装使用

    http www hexblog com p 61 958 sudo dpkg add architecture i386 sudo apt get update sudo apt get install libc6 i686 i386 l
  • RK3288的几种USB模式

    RK3288启动后有三种模式 xff0c 可以分别进行操作 一种是normal也就是正常的启动模式 这个模式无法刷固件 一般板子通电就是这个模式 第二种是loader模式 就是刷固件模式 这个模式可以刷各种image 按住recover按键
  • (导数)微分与积分的概念

    1导数定义 2微分 微分可以看作 y在自变量增量x 处在一个极小值deta x下的变化值的线性主部 微分指的是dy dy和deta Y有一个极小的增量也就是图5 9中的Q Q 39 xff0c 这一部分可以忽略不计 所以是微分 dy 是de
  • android sdk license问题

    You have not accepted the license agreements of the following SDK components Checking the license for package CMake 3 6
  • git还原某个文件到特定的版本

    转载自 https www cnblogs com qianxinxu p 7159739 html 场景 xff1a 对于某个Git控制下的文件进行了修改 xff0c 但是改的不满意 xff0c 想退回到改之前的版本 假定该文件为 src
  • frida初探1

    frida包括客户端和服务 服务运行在windows上面 通过Pip install frida安装 安装比较慢的话 直接下载frida 12 6 13 tar 执行 python setup py install 然后会要继续下载 fri
  • 常见PCB封装图解

    常用集成电路芯片封装图 doc文档可能在WAP端浏览体验不佳 建议您优先选择TXT xff0c 或下载源文件到本机查看 PCB 元件库命名规则 2 1 集成电路 xff08 直插 xff09 用 DIP 引脚数量 43 尾缀来表示双列直插封
  • visual studio 里面解决方案资源管理器界面不见了,应该如何显示出来?并且如何将其从右边更改到左边

    1 打开visual studio 软件 出现的界面没有 解决方案资源管理器界面 xff0c 如下图所示 xff1a 2 点击顶部的 视图 菜单 xff0c 如下图所示 xff1a 3 打开 视图 后 xff0c 会出现 解决方案资源管理器
  • 雾化器工作原理

    水位控制和偏置电路 电路中的超声换能器 xff34 xff24 xff08 又称雾化头 xff09 和其上 安装的两根水位控制触针 xff0c 他们是浸没在浅水水溶液中工作的 若长期雾化 xff0c 一旦液面降低而使雾化头的水位控制触针露出
  • 数据库复习笔记(全覆盖,包括往年部分真题)

    PS xff1a 大学开始写博客 xff0c 写了三年了 xff0c 虽然大二太忙了 xff0c 专业知识学的潦草 xff0c 也没写太多博客 大三开始写专业课的复习笔记 xff0c 没想到这一篇博文浏览和点赞这么高 xff0c 心里还是挺
  • 马原复习笔记(老师勾画的重点以及相应的习题练习)

    天呐 xff0c 我竟然会来复习马原 xff1f 那必须的 xff01 一心向党 xff0c 争做社会主义好青年 xff0c 当然了 xff0c 这玩意和思修 近代史不一样 xff0c 不记点东西编都不好编是吧 xff0c 加上和之前毛概不
  • zigbee通讯技术复习笔记

    这门课对于我一个学嵌入式的来说 xff0c 还是比较重要的 xff0c 所以我还是以老师给出的大纲为主体 xff0c 好好复习一下 xff01 题型 xff1a 选择题24x1 5 判断10x1 填空15x1 简答4x5 程序1x5 另外一
  • 第五天:了解越疆dobot机械臂,使用python,编写通过ros服务控制机械臂运动程序

    一 了解越疆dobot机械臂 详细信息可以查看用户手册和API开发手册 xff0c 以及其它官方提供资料 xff0c 这里我只列出我在开发过程中遇到的问题 xff0c 以及需要了解的知识点 xff08 1 xff09 坐标系 我们可以看到这