GAZEBO下基于python的键盘控制小程序
2020-01-14 18:10
489 查看
代码如下
#!/usr/bin/env python import roslib; roslib.load_manifest('teleop_twist_keyboard') import rospy from geometry_msgs.msg import Twist import sys, select, termios, tty msg = """ Reading from the keyboard and Publishing to Twist! --------------------------- Moving around: u d o j k l m s . For Holonomic mode (strafing), hold down the shift key: --------------------------- U I O w K a M < > t : up (+z) b : down (-z) anything else : stop t/g : increase/decrease max speeds by 10% r/f : increase/decrease only linear speed by 10% y/h : increase/decrease only angular speed by 10% CTRL-C to quit """ moveBindings = { 'd':(1,0,0,0), 'o':(1,0,0,-1), 'j':(0,0,0,1), 'l':(0,0,0,-1), 'u':(1,0,0,1), 'a':(-1,0,0,0), '.':(-1,0,0,1), 'm':(-1,0,0,-1), 'O':(1,-1,0,0), 'I':(1,0,0,0), 'w':(0,1,0,0), 's':(0,-1,0,0), 'U':(1,1,0,0), '<':(-1,0,0,0), '>':(-1,-1,0,0), 'M':(-1,1,0,0), 'v':(0,0,1,0), 'b':(0,0,-1,0), } speedBindings={ 't':(1.1,1.1), 'g':(.9,.9), 'r':(1.1,1), 'f':(.9,1), 'y':(1,1.1), 'h':(1,.9), } def getKey(): tty.setraw(sys.stdin.fileno()) select.select([sys.stdin], [], [], 0) key = sys.stdin.read(1) termios.tcsetattr(sys.stdin, termios.TCSADRAIN, settings) return key def vels(speed,turn): return "currently:\tspeed %s\tturn %s " % (speed,turn) if __name__=="__main__": settings = termios.tcgetattr(sys.stdin) pub = rospy.Publisher('cmd_vel', Twist, queue_size = 100) rospy.init_node('teleop_twist_keyboard') speed = rospy.get_param("~speed", 0.5) turn = rospy.get_param("~turn", 1.0) x = 0 y = 0 z = 0 th = 0 status = 0 try: print msg print vels(speed,turn) while(1): key = getKey() if key in moveBindings.keys(): x = moveBindings[key][0] y = moveBindings[key][1] z = moveBindings[key][2] th = moveBindings[key][3] elif key in speedBindings.keys(): speed = speed * speedBindings[key][0] turn = turn * speedBindings[key][1] print vels(speed,turn) if (status == 14): print msg status = (status + 1) % 15 else: x = 0 y = 0 z = 0 th = 0 if (key == '\x03'): break twist = Twist() ##twist.header.stamp = rospy.Time.now(); twist.linear.x = x*speed; twist.linear.y = y*speed; twist.linear.z = z*speed; twist.angular.x = 0; twist.angular.y = 0; twist.angular.z = th*turn pub.publish(twist) except: print e finally: twist = Twist() twist.header.stamp = rospy.Time.now(); twist.linear.x = 0; twist.linear.y = 0; twist.linear.z = 0 twist.angular.x = 0; twist.angular.y = 0; twist.angular.z = 0 pub.publish(twist) termios.tcsetattr(sys.stdin, termios.TCSADRAIN, settings)
该代码经过适当修改,可应用于GAZEBO的飞行器以及汽车的键盘控制
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- Python游戏开发-04-键盘方向键控制精灵移动和翻转(基于Python游戏开发-01)
- python初级学习之基于收发邮件的远程控制程序
- python初级学习之基于收发邮件的远程控制程序
- 基于python实现聊天室程序
- 实验与作业(Python)-05 程序的控制结构
- 基于python的字符串转整数小程序(手写int()内置函数实现细节)
- 计算机图形学作业 - 运用Python-OpenGL设计一个带键盘控制的三维模型
- 巧用 python 脚本控制你的C程序(首发在我的博客园)
- 基于 SailingEase WinForm Framework 开发客户端程序(3:实现菜单/工具栏按钮的解耦及状态控制)
- python 通过js控制滚动条拉取全文 通过psutil获取pid窗口句柄,通过win32gui使程序窗口前置 通过autopy实现右键菜单和另存为操作
- MoinMoin是一个基于Python环境的wiki引擎程序
- 3 Python - 程序结构与控制流
- python程序的控制结构练习题——100以内素数之和
- Python学习笔记(十七)——用GUI自动化控制键盘鼠标
- 树莓派用python写几个简单程序2_GPIO控制
- python 基于itchat详解微信防撤回程序
- 用键盘控制鼠标移动的Python脚本
- 基于python的双色球程序
- 基于ROS平台的移动机器人-4-通过ROS利用键盘控制小车移动