ROS<=>RobView のプログラムの追加方法
RobView のサブプログラム追加方法(ようやくここまで来ました)
ま
ず,robViewMode の番号を決めます.何か系統立てて番号付けしたいですね.
今のところ,1がomniDriveでの移動,2がpositionDriverでの移動,3がOdometryの値の設定 となっています.
ここでは,練習で10番を追加してみます.
■サービスの追加
~/catkin_ws/src/ros-rcll_btr_msgs/scripts/robotino.py を編集します.
main の rospy.init_node()の次の当たりに,srv** = rospy.Service(…) と言う項目があるので,サービス番号を追加して,サービス名と,受け取る型,そして,呼び出す関数を書きます.
srv04 = rospy.Service('rvw2/goToMPSCenter', Empty, goToMPSCenter)
引数無しの時は,Empty を指定します.自分で型を作る(C構造体的な感じ)場合は,ros-rcll_btr_msgs/srv の下に宣言ファイルを書いてcatkin_make します.
なお,Emptyを使うには,ファイルの最初の方でimportする必要があります.他の型も初めての使用であればimportを追加して下さい.
from std_srvs.srv import Empty, EmptyResponse
次に,呼び出される関数を書きます.mainより前に書きましょう.
def goToMPSCenter(data): global robViewMode robViewMode = 10 udp.view3Send[1] = robViewMode # mode number print("goToMPSCenter") sendRobView() return EmptyReponse()
一番シンプルなのは,上記です.モード番号を設定してsendRobView()を呼び出すだけです.
引数を扱いたいときは,data の値を受け取って,udp.view3Send の5-7で渡して下さい.
robotino.py の修正は以上です.
これをメインプログラムから呼び出します.今回は,btr2021/rcll2021/python/refbox.py です.
こちらでも受け渡しの型を使いますので,import していない場合は追加して下さい.
from std_srvs.srv import Empty, EmptyResponse
呼び出し部分を関数として用意します(一回しか呼び出さないのであれば,直接書いても良いけど)
def goToMPSCenter(): rospy.wait_for_service('/rvw2/goToMPSCenter') goToMPSCenter = rospy.ServiceProxy('/rvw2/goToMPSCenter', Empty) print("goToMPSCenter") resp = goToMPSCenter() print("reached")
先ほどのpub**で用意したサービスをwaitして,Proxy で呼び出します.
引数が必要な場合は,ここで与えます(今回はEmpty)
あとは,main にて,この関数を呼び出せば,robView はモード10を動かします.
というわけで,view3のプログラムを書けばできあがりです.
コメントを残す