Classを使用した書き方 (Python,ROS)

今日のメモ書きはPythonでClassを用いてのrosのコードの書き方に関してです。

まずはPythonのClassに関して。
Classはいわゆるオブジェクト指向と呼ばれるものの考え方です。イメージとしては、人の体を想像すると分かりやすいです。例えば、ひろしさんには心臓、胃、肝臓など様々な働きをする臓器があります。 これをClassに当てはめると、ひろしというClassの中に、心臓、胃、肝臓、などの臓器の関数を作り、それぞれにその中に働き内容書きます。   
Class ひろし():
   def 心臓(self):
        心臓の処理
   def 胃(self):
        胃の処理
具体的に書くと上に記述した形になります。
ここで1つポイントは関数の引数にselfがある事です。Classの引数にはselfは必ず入れます。
Classを使う大きなメリットとしては、大きく2つあります。
1つ目は、複数の関数を1つの塊として整理でき、自由に呼び出せることです。例えば、実行する場所で心臓の動作だけ使いたい場合は、そのように書けばできます。
書き方のルールは .
○=ひろし( )
〇.心臓()
で実行はできます。

2つ目のメリットは、同じ変数をClass内の関数で跨って使えることです。ここでselfがポイントになります。
def 心臓(self):
        self.血液=
   def 胃(self):
        self.血液=
と血液の変数にselfを付ければ、同じ変数の使用も可能です。  普通の関数でグローバル関数を使えばいいじゃんと言う意見もあると思いますが、プログラムの規模が大きくなった場合、どこでどのグローバル変数を使っているかなど分かりにくくなるため、コードを整理するという意味でもこのような書き方ができるClassは非常に有効です。

では、ROSでの書き方に入ります。基本のクラスの書き方は同じです。 データのパブリッシュ処理はwhile not なんちゃら  の中に書き、実行されているうちはずっと繰り返すようにします。詳しい
Class robot():
      ………
     def run(self):
          while not なんちゃら
                 pub.publish(○○)
if ○○○
   robot1=robot()
   robot.run()
このように実行する場所のif内に、先程説明した書き方でClassのrunを実行するとメッセージをずっと送れます。 Classの最初の関数はdef init みたいな感じで書くのですが省略します。

もしロボットだったら速度をパブリッシュして、レーザーセンサーの値によって、0になる条件も作りたいと時があると思います。
その時はdef でストップの関数を作り、ずっと回っているwhile内で、robot.ストップと書けば、速度を0にする処理を後付けで加えれます。
                

この記事が気に入ったらサポートをしてみませんか?