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
しておく。


  1. #!/usr/bin/env python  
  2. !/usr/bin/env python  
  3. import roslib; roslib.load_manifest('rostwit')  
  4. import rospy  
  5. import twitter  
  6. from std_msgs.msg import String  
  7.   
  8. tusername='username'  
  9. tpassword='password'  
  10.   
  11. def twit(data):  
  12.     rospy.loginfo(rospy.get_name()+"I heard %s",data.data)  
  13.     api.PostUpdate(data.data)  
  14.   
  15. def listener():  
  16.     rospy.init_node('rostwit_server', anonymous=True)  
  17.     rospy.Subscriber("twit", String, twit)  
  18.     rospy.spin()  
  19.   
  20. if __name__ == '__main__':  
  21.     api = twitter.Api(username=tusername, password=tpassword)  
  22.     listener()  

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

4。実験


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

$ rostopic pub /twit std_msgs/String TwitFromROS

としてみましょう。

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

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

0 件のコメント:

コメントを投稿