卒業研究が終わりましたーー。少し投稿間隔が空きましたが、ちまちまと進捗を書いていこうと思います。ただし、3月の近いうちに学会発表がまたあるので、まだまだ忙しい状況ではありますが…
3月の目標
3月は「ROSのチュートリアルの資料をzennに出す」ことを達成したいと考えています。私自身はまだまだROSの初心者ですが、同じ研究室の先輩や後輩にROSを教えなければいけないので、どうせならということで本として資料を書こうと思いました。
学内でROSを使用している人は少なく、Unixコマンドが怪しい学生にこれを教えるのは結構ハードルが高かったりします。なので、自分の独学での失敗経験などをもとに「どうすれば無理なく学べるのか」というのを突き詰めようと思います。
今回は、rosにおけるHelloWorldであるPub-Subをrospyで実装します。ROSWikiにあるチュートリアルとは異なり、このチュートリアルではClassを用いた実装を徹底したいと思っています。
実際はパッケージの作り方から丁寧に解説する予定ですが、ブログでは実例だけを示します。
動作環境
全てROS NoeticのPython3.8.5環境(仮想環境なし)を前提にしています。
コード
プログラムは全てrospy_tutorialで公開します。
GitHub - Ar-Ray-code/rospy_tutorial: Example source codes for rospy
Pub側
#!/bin/python3 import rospy from std_msgs.msg import Int32 class hello_world: def __init__(self): self.number = 0 self.pub = rospy.Publisher('pub_int', Int32, queue_size=1) rospy.init_node('pub_node') self.rate = rospy.Rate(2) self.pub_number() def pub_number(self): while not rospy.is_shutdown(): rospy.loginfo(str(self.number)) self.pub.publish(self.number) self.rate.sleep() self.number = self.number + 1 if __name__=="__main__": try: hello_world() except rospy.ROSInitException: pass
実行の様子です
Sub側
#!/bin/python3 import rospy from std_msgs.msg import Int32 class hello_world: def __init__(self): rospy.Subscriber('pub_int',Int32,self.sub_number) rospy.init_node('sub_node') rospy.spin() def sub_number(self,data): rospy.loginfo(str(data.data)) if __name__=="__main__": try: hello_world() except rospy.ROSInitException: pass
実行の様子です
追記するかもです