通过游戏手柄控制机器人(ROS,Twist)

1.适配与测试游戏手柄

首先把手柄插入主机,一般来说可以通过检查/dev/input查看,里面js#的设备一般就是手柄了
ls /dev/input/
然后使用jstest,安装的话sudo apt-get install就好,使用jstest的语句如下:
sudo jstest /dev/input/jsXX为之前js#的后缀数字,根据数字不同,可以检测不同的手柄。
最后要记得检查一下手柄设备的权限,需要的权限是读和写,需要添加的话命令如下:
sudo chmod a+rw /dev/input/jsX
2.安装joy ROS包

接下来安装ROS的joy包
sudo apt-get install ros-ROS版本-joy启动joy节点之前要先设定一下这个节点所读取的手柄设备:
rosparam set joy_node/dev "/dev/input/jsX"然后开启joy节点
rosrun joy joy_node如果能通过rostopic list看到joy主题,并通过echo看到内容的话就成功了3.代码
原作者是:Andrew Dai
#!/usr/bin/env python
import rospy
from geometry_msgs.msg import Twist
from sensor_msgs.msg import Joy

def callback(data):
    twist = Twist()
    twist.linear.x = data.axes[1]
    twist.angular.z = data.axes[0]
        print('speed: %.2f, turn: %.2f'%(twist.linear.x,twist.angular.z))
        if data.buttons[2]==1:
             twist.linear.x = 0
             twist.angular.z = 0
             print("STOP!!")
    pub.publish(twist)

# Intializes everything
def start():
    # publishing to "cmd_vel" to control turtle1
    global pub
    pub = rospy.Publisher('cmd_vel', Twist)
    # subscribed to joystick inputs on topic "joy"
    rospy.Subscriber("joy", Joy, callback)
    # starts the node
    rospy.init_node('Joy2Turtle')
    rospy.spin()

if __name__ == '__main__':
    start()从joy主题内获取手柄的信息,其中
twist.linear.x = data.axes[1]
twist.angular.z = data.axes[0]获取了手柄摇杆的信息,并直接填入twist信息里面。我这里直接填进去了,需要的话可以对数值进行调整,以免跑的太快
data.buttons[2]获取了手柄上X键的信息,如果按下的话就会立即停止机器人的运动
最后发布twist信息,将控制命令传给机器人

4.Launch File
自己写的一个launch文件,为了启动的时候方便一点

 

 
   
   
   
 

 

启动命令roslaunch joyetwist joytwist.launch然后就可以愉快的用手柄控制乌龟了,比自带的键盘teleop舒服太多了

原文:https://blog.csdn.net/seeseeatre/article/details/79188095 
版权声明:本文为博主原创文章,转载请附上博文链接!

你可能感兴趣的:(ROS)