机械手

《实时控制软件设计》第一周作业

拜拜、爱过 提交于 2020-01-04 12:58:53
第一周,老师讲了实时控制系统的历史和实现方法,在做案例分析前我想先通过听课和网上的资料总结一下实时控制系统的特点: “实时系统是能够在确定的时间内执行计算或处理事务并对外部事件作出响应的计算机系统“,正好最近在学微机原理,也正好上到了中断程序那一章,咦我就在想,好像用中断程序也可以 “执行计算或处理事务并对外部事件作出响应” 不过马上又反应过来,好像在执行中断程序的时候不能响应别的中断,如果想要响应的话还要在中断服务里面再加一个中断,突然发现稍微复杂一点的控制,中断就不够用了;而且更重要的是响应的时间慢,对于那种要求很快速响应的外部事件(我记得看过一部关于某可乐公司易拉罐的生产线上面,最后踢除不合格产品的时候,就是在输送线上加一个传感器和机械手,检测到不合格的产品,机械臂立马把它“弹”出去,那输送线的速度真是飞快,要从检测到机械臂做出动作最多只能有很短的反应时间)可能就无能为力了。我就大概明白实时控制系统为什么主要用在工业控制中了。 上图是RT-Linux系统的结构,Linux运行在实时核心下,实时内核直接管理硬件中断,如果中断是实时中断,那么就直接执行实时操作,几乎没有延时,实时操作完了再运行Linux进程 “具体地说就是当有实时任务要完成时,实时操作系统运行实时内核下的任务;当没有实时任务时,实时内核调度 Linux运行。所以Linux是实时内核中优先级最低的一个任务。”

基于OpenCv的机器人手眼标定(九点标定法)

偶尔善良 提交于 2019-12-25 10:44:49
对于初学者而言,对相机的标定经常模糊不清。不知道机器坐标与相机坐标如何转换,两个坐标系又是如何建立? 我们通常是利用张氏标定法,针对于相机的畸变进行标定,利用校正得到的参数对图形进行处理后再呈现出来。这个方法网上用的人很多,资料也较为全面。这里就不做说明了。本文主要是针对机械手的手眼标定,一般而言目前相机的畸变较小,精度也较为准确,使用该方法进行标定也能得到较好的效果。 首先,对于九点标定而言。我们使用到的是OpenCv中的 estimateRigidTransform 函数。 函数定义如下: Mat estimateRigidTransform(InputArraysrc,InputArraydst,boolfullAffine) 前两个参数,可以是 :src=srcImage (变换之前的图片Mat) dst=transImage(变换之后的图片Mat) 也可以: src=array(变换之前的关键点Array) dst=array(变换之后的关键点Array) 第三个参数: 1(全仿射变换,包括:rotation, translation, scaling,shearing,reflection) 其主要原理为:如果我们有一个点变换之前是[x,y,1],变换后是[x’,y’,1] 则fullAffine表示如下: TX=Y 展开后表示 如果我们想求这【a-f】

在ROS下控制dobot(magician)机械手的IO口输出demo

匿名 (未验证) 提交于 2019-12-02 23:34:01
这里就使用IO17号口来进行输出12V #include "ros/ros.h" #include "std_msgs/String.h" #include "dobot/SetCmdTimeout.h" #include "dobot/SetQueuedCmdClear.h" #include "dobot/SetQueuedCmdStartExec.h" #include "dobot/SetQueuedCmdForceStopExec.h" #include "dobot/GetDeviceVersion.h" #include "dobot/SetEndEffectorParams.h" #include "dobot/SetPTPJointParams.h" #include "dobot/SetPTPCoordinateParams.h" #include "dobot/SetPTPJumpParams.h" #include "dobot/SetPTPCommonParams.h" #include "dobot/SetPTPCmd.h" #include "dobot/SetIODO.h" #include "dobot/GetIODO.h" #include "dobot/SetIOMultiplexing.h" #include "iostream" using