新年になりましたので遊びをしたいと思います。
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
(ただし、これをやるには/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
として保存し、
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 件のコメント:
コメントを投稿