2010年1月1日金曜日

twitterへの書き込みをするROSノードを作成

あけましておめでとうございます。

新年になりましたので遊びをしたいと思います。

twitterへの書き込みをROSを使ってやります。

まず、どういう形態で他のノードとつなげるかを考えましょう。
方法は
  • topicを使う
  • serviceを使う
  • actionlibを使う
の3つがあると思います。処理の重さ、実行頻度などから選択するのでしょう。
今回は、まずはtopicを使ってみます。
簡単に作りたいのでPythonで作ります。


1。準備
$ sudo apt-get install python-twitter
しておきます。

pythonからのtwitter書き込みを簡単にやるパッケージです。
ちなみに私の環境はUbuntu9.04です。

2。パッケージの作成

$ roscd sandbox
$ roscreate-pkg rostwit std_msgs rospy
$ cd rostwit

依存するのはstd_msgsとrospyです。

manifest.xmlを編集。
  <rosdep name="python-twitter" />
を追加。
これでrosdep install rostwitすると、python-twitterが自動的にインストールされるはずですね。
(ただし、これをやるには/home/ogutti/ros/pkgs/wg-ros-pkg-trunk/sandbox/rosdep.yamlに

python-twitter:
  ubuntu: python-twitter
を追加しないといけません)

3。ノードの作成


以下を
src/rostwit/rostwit_server.py
として保存し、
chmod 755 src/rostwit/rostwit_server.py
しておく。


#!/usr/bin/env python
!/usr/bin/env python
import roslib; roslib.load_manifest('rostwit')
import rospy
import twitter
from std_msgs.msg import String

tusername='username'
tpassword='password'

def twit(data):
    rospy.loginfo(rospy.get_name()+"I heard %s",data.data)
    api.PostUpdate(data.data)

def listener():
    rospy.init_node('rostwit_server', anonymous=True)
    rospy.Subscriber("twit", String, twit)
    rospy.spin()

if __name__ == '__main__':
    api = twitter.Api(username=tusername, password=tpassword)
    listener()


usernameとpasswordは自分のものに変更してくださいね。最初のサンプルをちょこっとだけ変更したものです。
いちおう、
$ roscd rostwit
$ make
しておきます。

4。実験


では立ち上げます。
$ roscore
$ rosrun rostwit rostwit_server.py
これで準備完了。

$ rostopic pub /twit std_msgs/String TwitFromROS

としてみましょう。

見事書き込めましたね?
うーん、簡単。
コールバックなので、topicに書き込んだときだけ動くので効率的ですね。

次回、また飽きたら今度はサービス版を作りますか。

0 件のコメント:

コメントを投稿