熊猫阿宝

小心翼翼
  • 主题:19
  • 回复:49
  • 金钱:315
  • 积分:374
本帖最后由 熊猫阿宝 于 2015-7-20 16:39 编辑

[size=10.5000pt]最近笔者比较忙,放下ROS一段时间,近日有点时间,就稍微整理了一下,学习在ROS下使用PS2的无线手柄。目前只写了python的,C++的有空再研究。[size=10.5000pt]在学习本文之前,请先学习以下帖子:
[size=10.5000pt]链接1ROS下如何创建一个包(Engilsh-wiki)
[size=10.5000pt]链接2ROS学习----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遥控按键后执行一次。
[] 纯文本查看 复制代码
节点结束。
而关于节点的消息类型,笔者在网上找遍了例程也没有找到,最后在wikips2-ROS的的说明中看的这样的内容:
ros-joy.jpg
依此猜测到消息类型是from sensor_msgs.msg import Joy 。
从上图可以看出,Joy有三个变量:
1.header:计算时间的,可忽略
2.axes:模拟按键,float_32型数组
3.buttonsint_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节点
运行结果如下:
1.jpg