2011年7月13日水曜日

ARDroneとルンバを同時にPS3のコントローラで動かす

AR.Droneとルンバを1つのPS3のジョイパッドから同時にうごかしてみました。
ROSのPub/Subを利用した楽しい例だと思います。


前回紹介したardrone_brownノードと、昔作ったルンバ用のプログラムを組み合わせたら簡単にできました。
ルンバの掃除開始と同期してヘリが飛び立ったら面白いと思い、掃除機のモータ指令メッセージ(Bool型)をardroneのEmpty型へ変換して送信するノードを作りました。
これによりルンバへの速度指令と、掃除開始(離陸)、終了(着陸)が同時にAR.Droneに送られるようになります。

ノードとトピックは↓のような感じ。


メッセージ変換のコードは↓のような感じです。

#!/usr/bin/env python
import roslib
roslib.load_manifest('otl_msgconverter')
import rospy
from std_msgs.msg import Bool
from std_msgs.msg import Empty
class BoolMsg2EmpyMsg():
    """ convert bool msg to empy msg
    """
    def __init__(self, bool_topic, true_topic, false_topic):
        self._bool_topic = bool_topic
        self._true_topic = true_topic
        self._false_topic = false_topic
    def callback(self, bool_value):
        msg = Empty()
        if (bool_value.data):
            self._true_pub.publish(msg)
        else:
            self._false_pub.publish(msg)
    def init(self):
        self._true_pub = rospy.Publisher(self._true_topic, Empty)
        self._false_pub = rospy.Publisher(self._false_topic, Empty)
        self._sub = rospy.Subscriber(self._bool_topic, Bool, self.callback)
if __name__=='__main__':
    rospy.init_node('otl_bool2empty')
    obj = BoolMsg2EmpyMsg('input', 'true', 'false')
    obj.init()
    rospy.spin()
ヘリは迫力があっていいですね。
着陸も成功させたかった!

0 件のコメント:

コメントを投稿