新年になりましたので遊びをしたいと思います。
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 件のコメント:
コメントを投稿