本帖最后由 熊猫阿宝 于 2015-7-20 16:39 编辑 [size=10.5000pt]最近笔者比较忙,放下ROS一段时间,近日有点时间,就稍微整理了一下,学习在ROS下使用PS2的无线手柄。目前只写了python的,C++的有空再研究。[size=10.5000pt]在学习本文之前,请先学习以下帖子: [size=10.5000pt]链接1:ROS下如何创建一个包(Engilsh-wiki) [size=10.5000pt]链接2:ROS学习----Python下的消息发布器和订阅器 链接3:dajianli学习ROS系列之--PS无线遥控的使用 下文有关使用到上面帖子的知识将不在赘述。 按照wiki上和以上例程的方法,我们已经建立了一个catkin_ws的工作空间,并且建立了一个名为beginner_tutorials的包。在这个包里面,我们建立了scripts目录来存储python程序。在确认以上无误后,可以开始一下例程了。 Python程序如下: [Python] 纯文本查看 复制代码 #!/usr/bin/env python import rospy from std_msgs.msg import String from sensor_msgs.msg import Joy def callback(data): #display = str(data.header) rospy.loginfo("axes %s", data.axes) rospy.loginfo("buttons %s", data.buttons) #def PS2_Read(data): def listener(): # In ROS, nodes are uniquely named. If two nodes with the same # node are launched, the previous one is kicked off. The # anonymous=True flag means that rospy will choose a unique # name for our 'talker' node so that multiple talkers can # run simultaneously. rospy.init_node('listener', anonymous=True) rospy.Subscriber("joy",Joy, callback) # spin() simply keeps python from exiting until this node is stopped rospy.spin() if __name__ == '__main__': listener() 这段程序中: [AppleScript] 纯文本查看 复制代码 from sensor_msgs.msg import Joy #导入PS2手柄的所需的模块 PS2手柄的消息数据是在sensor_msgs/Joy.msg中。 [Python] 纯文本查看 复制代码 rospy.init_node('listener', anonymous=True) 初始化节点。 [Python] 纯文本查看 复制代码 rospy.Subscriber("joy",Joy, callback) 这是节点的订阅函数。 “joy”是节点名称。 Joy是消息类型,是from sensor_msgs.msg import Joy 导入 Callback指向回调函数,每当PS2遥控按键后执行一次。 [] 纯文本查看 复制代码 节点结束。 而关于节点的消息类型,笔者在网上找遍了例程也没有找到,最后在wiki的ps2-ROS的的说明中看的这样的内容: 依此猜测到消息类型是from sensor_msgs.msg import Joy 。 从上图可以看出,Joy有三个变量: 1.header:计算时间的,可忽略 2.axes:模拟按键,float_32型数组 3.buttons:int_32型数组 然后在回调函数中,显示内容 [Python] 纯文本查看 复制代码 rospy.loginfo("axes %s", data.axes) rospy.loginfo("buttons %s", data.buttons) 如果需要特定按键,axes[0]是数组第1个数,依次类推。 下面是整个步骤: 1.把代码放入之前建立的scripts目录下,执行chmod +x ps2_test.py.(ps2_test.py是程序名) 2.进入/catkin_ws 目录下,source devel/setup.bash。 以下在任意目录下进行 3.执行roscore 4.执行rosrun joy joy_node,运行joy节点5.执行rosrun beginner_tutorials ps2_test.py,运行ps2_test.py节点 运行结果如下:
|