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()
ヘリは迫力があっていいですね。
着陸も成功させたかった!

ARDroneをROSで動かす

ARDroneというヘリがあります。
3万弱でカメラ2つついていて、iPhoneで動かせちゃうすごいヘリです。
しかもSDKがついていてPCやiPhone, Android等で自由にプログラミングできます。

これがROSから簡単に使えるようになっているので紹介します。

http://code.google.com/p/brown-ros-pkg/wiki/ardrone_brown

前回紹介したbrown-ros-pkgです。
ただしまだaptでは入れられないのでソースからです。

【インストール】
$ svn checkout http://brown-ros-pkg.googlecode.com/svn/trunk/experimental/ardrone_brown
$ cd ardrone_brown
$ ./build_sdk.sh
$ rosmake
$ cmake .
$ make
(Makefileのcommit忘れかな?)

【実行】
$ rosrun ardrone_brown ardrone_driver

【離陸】

$ rostopic pub /ardrone/takeoff std_msgs/Empty

【着陸】

$ rostopic pub /ardrone/land std_msgs/Empty

あとは/cmd_velに速度を入力すれば思い通りに動きます。

【カメラ画像の表示】もできますよ。
$ rosrun image_view image_view image:=/ardrone/image_raw


ドキュメントにないけど、
$ rostopic pub /ardrone/togglecam std_msgs/Empty
すると、フロントカメラと、下向きかめらとフロントの合成、との切り替えができます。

という感じでいつものROSっぽく動かすことができます。

2011年7月11日月曜日

ROSリポジトリドメイン変更

Kenさんからメーリスに以下のようなメールがきていました。

要するに、Ubuntuユーザはaptラインにcode.ros.orgの代わりにpakcages.ros.org/ros/ubuntuを使ってね。ということ見たいです。
今はcode.ros.orgも使えるけど、
diamondbackの次のリリース(Electric)からはもう使えないからね。
ってことみたいです。

要チェックです。

For Diamondback, we switched our main debian package source to be
http://packages.ros.org/ros/ubuntu .  We made this shift due to load
issues.  We have been mirroring the old code.ros.org source, but this
mirroring is not in place for the upcoming Electric release.

In order to ensure that you will be able to receive the Electric
update properly, we recommend that you go ahead and migrate your
/etc/apt/sources.list.d/ros-latest.list file to use:

http://packages.ros.org/ros/ubuntu

instead of:

http://code.ros.org/packages/ros/ubuntu

2011年7月10日日曜日

brown-ros-pkgがapt-getできる

ブラウン大学のROSのリポジトリがbrown-ros-pkgです。
willow管理のリポジトリ以外はapt-getじゃなくてソースを持ってきてインストールするもの、
と思っていましたが、brown-ros-pkgはいくつかちゃんとリリースされて、
apt-getで入るようになっているんですね。

リリースされているのは

  • brown_drivers
  • brown_perception
  • brown_remotelab
の3つのスタックで、
それぞれ、
  • irobot_create_2_1 (ルンバドライバ)
  • gscam (gstreamerべーすのカメラドライバ)
  • rosbridge/pr2_keyboard_teleoperator/teleop_twist_keyboard
がパッケージとして入っています。

インストールするには

$ sudo apt-get install ros-diamondback-brown-drivers
とか、
$ sudo apt-get install ros-diamondback-brown-remotelab
とかすると入ります。
楽チン。

brown-perceptionは何故か見つかりませんでした。

$ sudo apt-get install ros-diamondback-otl-drivers
とかできる日がいつかくるのか!

ムネアツです。

2011年7月6日水曜日

Ubuntu 11.04 natty narwhalでROSのapt

いつのまにかUbuntu11.04のROSパッケージがきていましたね。
これでソースからコンパイルしないですみます。
やっぱりバイナリは楽です。

http://www.ros.org/wiki/diamondback/Installation/Ubuntu


/etc/apt/sources.list.d/ros-latest.list

deb http://packages.ros.org/ros/ubuntu natty main
と書いて

$ sudo apt-get update
$ sudo apt-get install ros-diamondback-desktop-full



でOKですね。
いつのまにやらドメインが変わっていますね。
.bashrcの編集も忘れずに。