この記事では、ROS (Robot Operating System) の中でパブリッシャーとサブスクライバーをPythonで作成する方法について説明します。このチュートリアルは初心者向けで、基本的なPythonの知識があれば理解できます。
パブリッシャーの作成
まずは、メッセージを発信するパブリッシャーのノードを作成します。以下にそのPythonコードを示します。
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def talker():
pub = rospy.Publisher('chatter', String, queue_size=10)
rospy.init_node('talker', anonymous=True)
r = rospy.Rate(10) # 10hz
while not rospy.is_shutdown():
str = "hello world %s" % rospy.get_time()
rospy.loginfo(str)
pub.publish(str)
r.sleep()
if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException:
pass
このコードは、chatter
というトピックにString
型のメッセージを送信するパブリッシャーを作成します。rospy.init_node('talker', anonymous=True)
はノード名をROSに通知するためのもので、この場合のノード名はtalker
です。
サブスクライバーの作成
次に、パブリッシャーからのメッセージを受け取るサブスクライバーのノードを作成します。以下にそのPythonコードを示します。
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def callback(data):
rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data)
def listener():
rospy.init_node('listener', anonymous=True)
rospy.Subscriber("chatter", String, callback)
rospy.spin()
if __name__ == '__main__':
listener()
このコードは、chatter
というトピックからString
型のメッセージを受け取るサブスクライバーを作成します。callback
関数は、新しいメッセージが到着するたびに呼び出されます。
以上が、ROSとPythonを用いてパブリッシャーとサブスクライバーを作成する基本的な方法です。これらのコードを実行することで、ROSのネットワークを通じてメッセージの送受信が可能となります。