GAZEBO下基于python的键盘控制小程序

代码如下

#!/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的飞行器以及汽车的键盘控制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Gazebo 是一个强大的机器人模拟平台,在机器人领域被广泛使用。借助Gazebo,您可以在计算机上创建机器人模型,并在虚拟环境中测试程序,以便在实际机器人上运行。 使用Python可以方便地与Gazebo进行通信,并在仿真中控制模型。为了实现这一目的,需要使用ROS(机器人操作系统),ROS是机器人应用程序的常用框架。本文将介绍如何使用Python文件在Gazebo中发出控制指令。 首先,需要安装ROS,具体步骤如下: 1. 安装ROS的桌面完整版: $ sudo apt-get install ros-noetic-desktop-full 2. 初始化rosdep: $ sudo rosdep init 3. 查找并安装必要的解决方案: $ rosdep update $ rosdep install --from-paths src --ignore-src -r -y 其中,“src”是存储ROS程序包的文件夹名称。 接下来,需要设置环境变量,以确保Gazebo正常运行: $ source /opt/ros/noetic/setup.bash $ source /usr/share/gazebo/setup.sh 为了在Gazebo中发出控制指令,需要编Python文件。以下是一个简单的Python代码示例,可以控制Gazebo机器人的运动: ``` #!/usr/bin/env python import rospy from geometry_msgs.msg import Twist def callback(data): print("Received Twist message: (", data.linear.x, ",", data.angular.z, ")") # do something with data def sendTwistMessage(): rospy.init_node('send_Twist_msg', anonymous=True) pub = rospy.Publisher('/cmd_vel', Twist, queue_size=10) rospy.Subscriber("/cmd_vel", Twist, callback) twist = Twist() twist.linear.x = 1.0 twist.angular.z = 0.0 pub.publish(twist) if __name__ == '__main__': try: sendTwistMessage() except rospy.ROSInterruptException: pass ``` 在代码中,首先导入rospy模块和Twist消息定义。callback函数用于处理从机器人模型接收到的Twist消息。接下来的sendTwistMessage函数初始化节点,并创建/ cmd_vel话题的发布者和订阅者。通过设置twist消息,可以控制机器人的运动。在主循环中,调用sendTwistMessage函数以发送Twist消息。 运行Python文件后,在Gazebo环境中可以看到机器人的运动。通过修改twist消息的值,可以控制机器人向前或向后运动。 总的来说,使用Python文件在Gazebo中进行控制非常简单,只需要设置ROS环境和编Python代码即可。对于机器人开发者和测试者而言,这是一个非常有用的技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值