Python ROS键盘控制机械臂

机械臂定义所有的全局变量,给他们一个初始值

import rospy
import os
import sys, select, termios, tty
import math
GRIPPER_CLOSE = 700
GRIPPER_OPEN = 200
GRIPPER_DEFAULT =500
i=500
j=250
k=660
l=300
m=500

加入按键,这里用的是幻耳机械臂姿态三。

  global  i,j,k,l,mflag=0fd=sys.stdin.fileno()old_settings=termios.tcgetattr(fd)try:tty.setraw(fd)ch=sys.stdin.read(1)finally:termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)

数字1,2控制夹爪

        if  ch=='1':self.xArmGripperTxData(GRIPPER_OPEN)elif ch=='2':self.xArmGripperTxData(GRIPPER_CLOSE)

小车机械臂一共有6个舵机,数字‘3’,‘4’控制舵机2转动

 elif ch=='3':flag=1i=i+50while flag==1:self.xArmTrajectoryTxData(i,j,k,l,m)if i>1000:i=0rospy.loginfo("%d",i)flag=0elif ch=='4':flag=1i=i-50while flag==1:self.xArmTrajectoryTxData(i,j,k,l,m)if i<0:i=1000flag=0

按照这样的逻辑,分别用按键控制小车机械臂,可以实现相要的功能。

 elif ch=='5':flag=1j=j+30while flag==1:self.xArmTrajectoryTxData(i,j,k,l,m)if j>1000:j=0rospy.loginfo("%d",j)flag=0
elif ch=='6':flag=1j=j-30while flag==1:self.xArmTrajectoryTxData(i,j,k,l,m)if j<0:j=1000rospy.loginfo("%d",j)flag=0
elif ch=='7':flag=1k=k+50while flag==1:self.xArmTrajectoryTxData(i,j,k,l,m)if k>1000:k=0rospy.loginfo("%d",k)flag=0
elif ch=='8':flag=1k=k-50while flag==1:self.xArmTrajectoryTxData(i,j,k,l,m)if k<0:k=1000rospy.loginfo("%d",k)flag=0
elif ch=='9':flag=1l=l+50while flag==1:self.xArmTrajectoryTxData(i,j,k,l,m)if l>1000:l=0rospy.loginfo("%d",l)flag=0
elif ch=='0':flag=1l=l-50while flag==1:self.xArmTrajectoryTxData(i,j,k,l,m)if l<0:l=1000rospy.loginfo("%d",l)flag=0
elif ch=='-':flag=1m=m+50while flag==1:self.xArmTrajectoryTxData(i,j,k,l,m)if m>1000:m=0rospy.loginfo("%d",m)flag=0
elif ch=='=':flag=1m=m-50while flag==1:self.xArmTrajectoryTxData(i,j,k,l,m)if m<0:m=1000rospy.loginfo("%d",m)flag=0
  • 定义机械臂的三个姿态:
def xArmPoseTxData(self, x, y, z, rotary=90):xArmPose = {"RikibotxArmCmd": 1,"Pose": {"x": x, "y": y, "z": z, "rotary": rotary},"time": self.speed}self.xArmCtrl.SerialWriteData(json.dumps(xArmPose))def xArmGripperTxData(self, gripper_step):xArmGripper = {"RikibotxArmCmd": 2, "Gripper": gripper_step, "time": self.speed }self.xArmCtrl.SerialWriteData(json.dumps(xArmGripper))def xArmTrajectoryTxData(self,id2,id3,id4,id5,id6):xArmTrajectory = {"RikibotxArmCmd": 3,"Trajectory":{"id2": id2,"id3": id3,"id4": id4,"id5": id5,"id6": id6},"time":self.speed }self.xArmCtrl.SerialWriteData(json.dumps(xArmTrajectory))

键盘控制机械臂的升级版2.0

#!/usr/bin/env python3
import serial
import json
import timeclass armctl:def __init__(self,Port):self._Port=Portself._baud=115200self._ready={"RikibotxArmCmd": 3, "Trajectory": { "id2": 310,"id3":200,"id4":200,"id5":250,"id6":500}, "time": 2000}self._close={"RikibotxArmCmd": 3, "Trajectory": { "id2": 500,"id3":120,"id4":900,"id5":500,"id6":500}, "time": 2000}self._paws={"RikibotxArmCmd": 2, "Gripper": 300, "time": 1000}self._Ser1 = serial.Serial(self._Port, self._baud, timeout=0)self._Ser1.bytesize = 8self._Ser1.parity = serial.PARITY_NONEself._Ser1.stopbits = 1def ArmSerial(self,commands):if self._Ser1.isOpen():self._Ser1.write(bytes(json.dumps(commands),encoding="utf-8"))else:print("error")def ArmStatus(self):if self._Ser1.isOpen():return Trueelse:return Falsedef ArmSerialClose(self):self._Ser1.close()def ArmOpen(self):if self._Ser1.isOpen():return Trueelse:self._Ser1.open()return True    def ArmReady(self):self.ArmSerial(self._ready)time.sleep(self._ready["time"]/1000)return self._readydef ArmClose(self):self.ArmSerial(self._close)time.sleep(self._close["time"]/1000)return self._readydef ArmUp(self,op,commands):if op["up"]:if commands["Trajectory"]["id4"]>650 and commands["Trajectory"]["id4"]<=750:if commands["Trajectory"]["id3"]>= 100 and commands["Trajectory"]["id3"]<=700:commands["Trajectory"]["id3"] +=10commands["Trajectory"]["id4"] -=3if commands["Trajectory"]["id4"]<=650 and commands["Trajectory"]["id4"]>=120:commands["Trajectory"]["id3"] -=10if commands["Trajectory"]["id3"]<150:commands["Trajectory"]["id3"]=150commands["Trajectory"]["id4"] -=15if commands["Trajectory"]["id4"]<120:commands["Trajectory"]["id4"]=120if op["right"] and not op["left"]:commands["Trajectory"]["id6"]-=10if commands["Trajectory"]["id6"]<280:commands["Trajectory"]["id6"]=280if op["left"] and not op["right"]:commands["Trajectory"]["id6"]+=10if commands["Trajectory"]["id6"]>770:commands["Trajectory"]["id6"]=770self.ArmSerial(commands)time.sleep((commands["time"]+1)/1000)return commandsdef ArmDown(self,op,commands):if op["down"]:status=1if (commands["Trajectory"]["id6"]<=720 and commands["Trajectory"]["id6"]>=250):if commands["Trajectory"]["id4"]<=680:commands["Trajectory"]["id3"] +=15commands["Trajectory"]["id4"] +=20status=0if commands["Trajectory"]["id4"]>680 and commands["Trajectory"]["id4"]<=720:if commands["Trajectory"]["id3"]>=150:commands["Trajectory"]["id3"] -=10if status!=0:if commands["Trajectory"]["id3"] < 305:commands["Trajectory"]["id4"] =690else:commands["Trajectory"]["id4"] +=5if commands["Trajectory"]["id3"]<120:commands["Trajectory"]["id3"]=120if commands["Trajectory"]["id2"]<120:commands["Trajectory"]["id2"]=120if commands["Trajectory"]["id4"]>720:commands["Trajectory"]["id4"]=720if commands["Trajectory"]["id5"]<=180:commands["Trajectory"]["id5"]=180if op["right"] and not op["left"]:commands["Trajectory"]["id6"]-=10if commands["Trajectory"]["id6"]<280:commands["Trajectory"]["id6"]=280if op["left"] and not op["right"]:commands["Trajectory"]["id6"]+=10if commands["Trajectory"]["id6"]>770:commands["Trajectory"]["id6"]=770self.ArmSerial(commands)time.sleep((commands["time"]+1)/1000)return commandsdef ArmPaws(self,num):self._paws["Gripper"]=numself.ArmSerial(self._paws)time.sleep(self._paws["time"]/1000)return self._pawsdef ArmClear(self):op={"up":False,"down":False,"left":False,"right":False}return op

源代码ROS工作区地址:
链接:https://pan.baidu.com/s/1Ss_7OHxIIkULp3jbZnDOBw
提取码:ttpq
复制这段内容后打开百度网盘手机App,操作更方便哦
源代码在src->rikibot_project->rikibot_xarm->nodes->4.py文件中,可以参考一下。

Python ROS键盘控制机械臂相关推荐

  1. v-rep仿真之键盘控制机械臂末端移动

    v-rep仿真之键盘控制机械臂末端移动 键盘控制机械臂末端移动原理为,设置机械臂逆运动学target,机械臂末端跟随target运动,然后通过改变target的值,从而达到控制机械臂末端移动的原理. ...

  2. ROS中控制机械臂抓取目标例程

    在上一个博文中介绍了一个简单的目标识别的例子,在这篇博客中,例如是别的结果,完成机械臂的抓取控制,主要进行程序的分析和学习. 包含的头文件: #include <ros/ros.h> #i ...

  3. 基于arduino、ros手柄控制机械臂

    arduino端代码 #if (ARDUINO >= 100)#include <Arduino.h> #else#include <WProgram.h> #endif ...

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

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

  5. python控制机械臂6轴_基于Firmata协议的ROS Moveit六轴机械臂设计

    ROS(Robot Operating System,开源机器人操作系统)是目前较为火热的一个一个机器人开发者平台.依赖于强大的资源库和开发者社区,ROS可以说是风靡全球. 在机器人开发的领域,机械臂 ...

  6. V-REP仿真Python控制机械臂和rg2夹爪

    V-REP仿真Python控制机械臂和rg2夹爪 本论文转自(作者:lanlande): V-rep机器人仿真(Win10):UR5+RG2+Kinect+YOLOV3+DDPG+Pytorch(第三 ...

  7. python代码控制机械臂_ros平台下python脚本控制机械臂运动

    在使用moveit_setup_assistant生成机械臂的配置文件后可以使用roslaunch demo.launch启动demo,在rviz中可以通过拖动机械臂进行运动学正逆解/轨迹规划等仿真运 ...

  8. python 机械臂控制_从零开始的ROS四轴机械臂控制-gazebo仿真控制

    这是一个四轴器械臂练手项目,定为arm0.1版本,使用MG90s舵机来搭建一个四轴机械臂.arm0.1版本的目标是对带颜色的方块进行识别并在Gazebo中模拟出来. 以下是这个ROS四轴机械臂控制的目 ...

  9. 实际的机械臂控制(9)Moveit单独控制机械臂末端在XYZ三个轴的平移和旋转(基于python)

    0. 序言 在moveit中,控制机械臂的末端执行器运动的API有两个,分别是: shift_pose_target set_pose_target 第一个API:shift_pose_target ...

最新文章

  1. 【MediaPipe】(4) AI视觉,远程手势调节电脑音量,附python完整代码
  2. java swf转pdf_doc转pdf和pdf转swf
  3. linux中怎么给用户设置不同的权限,linux怎么将一个文件设置为多个人拥有或者同一组内只让某两个用户有删除权限?...
  4. 创建QT项目只有一个pro文件
  5. CSS3 选择器(Selector)
  6. 二维码批量生成下载工具
  7. Jenkins持续集成环境, 如何自定义 maven 仓库
  8. 2021-0316:梦中明白在作梦
  9. 1.2 数列和收敛数列
  10. 三星note10 android q,【极光ROM】-【三星NOTE10/NOTE10+/5G N97XX-855 国行/港行/美版】-【V10.0 Android-Q-TK1】...
  11. CorelDRAW弄什么封面都是很简单的事呢
  12. 有关网页没有显示数据库的值的问题
  13. 华三路由交换配置命令_华三华为交换机-路由器配置常用命令汇总
  14. 福建地区市场份额最大的调查研究咨询公司
  15. Linux下设置MTU值到9000
  16. 报错:org.springframework.cloud.gateway.support.NotFoundException: Unable to find instance for localhos
  17. chrome控制台设置网页自动刷新
  18. Java异常继承层次图
  19. Chrome 113 发布,默认启用 WebGPU
  20. i.mx6 android4.4.3 recovery时不删除内部SD卡上的导航地图和媒体文件等

热门文章

  1. webpy中session的使用
  2. 全球及中国PTA(纯对苯二甲酸)市场竞争力及投资可行性分析报告2022~2028年
  3. 同期对比图_Excel展示两组同期数据,这种左右对比图真好看,只需六步搞定
  4. 正(斜)交平行投影变换矩阵
  5. Linux下最常用的10个文件压缩工具
  6. 文件操作(IO技术)
  7. 22 个鲜为人知的 CSS 高招让你技高一筹
  8. android开发游记:图片的上传下载-使用七牛云存储管理图片
  9. 访问管理未来的四大趋势
  10. 微博视频处理系统的云原生之路