通過遊戲手柄控制機器人(ROS,Twist)
阿新 • • 發佈:2019-02-02
1.適配與測試遊戲手柄
首先把手柄插入主機,一般來說可以通過檢查/dev/input檢視,裡面js#的裝置一般就是手柄了
ls /dev/input/
然後使用jstest,安裝的話sudo apt-get install就好,使用jstest的語句如下:
sudo jstest /dev/input/jsX
X為之前js#的字尾數字,根據數字不同,可以檢測不同的手柄。
最後要記得檢查一下手柄裝置的許可權,需要的許可權是讀和寫,需要新增的話命令如下:
sudo chmod a+rw /dev/input/jsX
2.安裝joy ROS包
接下來安裝ROS的joy包
啟動joy節點之前要先設定一下這個節點所讀取的手柄裝置:sudo apt-get install ros-ROS版本-joy
rosparam set joy_node/dev "/dev/input/jsX"
然後開啟joy節點
rosrun joy joy_node
如果能通過rostopic list看到joy主題,並通過echo看到內容的話就成功了3.程式碼
原作者是:Andrew Dai
從joy主題內獲取手柄的資訊,其中#!/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()
twist.linear.x = data.axes[1]
twist.angular.z = data.axes[0]
獲取了手柄搖桿的資訊,並直接填入twist資訊裡面。我這裡直接填進去了,需要的話可以對數值進行調整,以免跑的太快
data.buttons[2]
獲取了手柄上X鍵的資訊,如果按下的話就會立即停止機器人的運動
最後釋出twist資訊,將控制命令傳給機器人
4.Launch File
自己寫的一個launch檔案,為了啟動的時候方便一點
啟動命令<launch> <arg name="joy_dev" default="/dev/input/js0" /> <node pkg="joy" type="joy_node" name="joy_node"> <param name="dev" value="$(arg joy_dev)" /> <param name="deadzone" value="0.3" /> <param name="autorepeat_rate" value="20" /> </node> <node pkg="joytwist" type="joytwist.py" name="joytwist" output="screen"/> </launch>
roslaunch joyetwist joytwist.launch
然後就可以愉快的用手柄控制烏龜了,比自帶的鍵盤teleop舒服太多了最後吐個槽,編輯器好難用(╯°Д°)╯文字的格式和大小老是不對勁,行距也時常出問題。。。是不是該學習一下那個markdown,感覺挺高階的樣子呢。。。