これからはturtlesim パッケージを遊んでみようと思います。このPackageはもうすでにインストールされていると思います。ではまずroscore を実行しROS-Systemを立ち上がりましょう。そうすることによって、ROS Master、ROS Parameter Server、rosout logging nodeがStartになります。
これだけでもパソコンのFANは回り始めてます…
$ roscore … logging to /home/abc/.ros/log/fd8f51d6-c312-11eb-99eb-000c292e9587/roslaunch-abc-virtual-machine-25992.log Checking log directory for disk usage. This may take a while. Press Ctrl-C to interrupt Done checking log file disk usage. Usage is <1GB. started roslaunch server http://abc-virtual-machine:46779/ ros_comm version 1.14.11 SUMMARY ======== PARAMETERS * /rosdistro: melodic * /rosversion: 1.14.11 NODES auto-starting new master process[master]: started with pid [26009] ROS_MASTER_URI=http://abc-virtual-machine:11311/ setting /run_id to fd8f51d6-c312-11eb-99eb-000c292e9587 process [master]: started with pid [26009] ROS_MASTER_URI=http://abc-virtual-machine:11311/ setting /run_id to fd8f51d6-c312-11eb-99eb-000c292e9587 process[rosout-1]: started with pid [26021] started core service [/rosout] |
Nodeの情報もらうにはrosnodeコマンドがあります。
$ rosnode
rodnode list でいま走ってるNodeがリストさてています。いまはroscoreしかRunしていませんので/rosoutだけが出力されるのも当たり前です。
$ rosnode list /rosout $ rosnode info /rosout ——————————————————————————– Node [/rosout] Publications: * /rosout_agg [rosgraph_msgs/Log] Subscriptions: * /rosout [unknown type] Services: * /rosout/get_loggers * /rosout/set_logger_level contacting node http://abc-virtual-machine:34735/ … Pid: 26021 |
rosnode pingコマンドから、Nodeとの通信は確立されているかどうかも確認できます。
$ rosnode ping /rosout rosnode: node is [/rosout] pinging /rosout with a timeout of 3.0s xmlrpc reply from http://abc-virtual-machine:34735/ time=0.339031ms xmlrpc reply from http://abc-virtual-machine:34735/ time=1.698017ms xmlrpc reply from http://abc-virtual-machine:34735/ time=1.945019ms xmlrpc reply from http://abc-virtual-machine:34735/ time=1.811981ms xmlrpc reply from http://abc-virtual-machine:34735/ time=1.681805ms |
では、実際新しいNodeを走りましょう。かめさんが出てきたらもうOKです!
$ rosrun turtlesim turtlesim_node |
前の記事では、NodeではPublications (topics), Subscriptions (topics),
と Services (srv) があり、それらのNodeには独自でかぶらないの名前があります。
まずrosnode info /turtlesimで先立ち上げて亀さんの情報をみてみましょう。
rosnode info /turtlesim ——————————————————————————– Node [/turtlesim] Publications: * /rosout [rosgraph_msgs/Log] * /turtle1/color_sensor [turtlesim/Color] * /turtle1/pose [turtlesim/Pose] Subscriptions: * /turtle1/cmd_vel [unknown type] Services: * /clear * /kill * /reset * /spawn * /turtle1/set_pen * /turtle1/teleport_absolute * /turtle1/teleport_relative * /turtlesim/get_loggers * /turtlesim/set_logger_level contacting node http://abc-virtual-machine:44331/ … Pid: 26218 Connections: * topic: /rosout * to: /rosout * direction: outbound (39711 – 127.0.0.1:37198) [24] * transport: TCPROS |
次はKeyboardの矢印ボタンで亀さんを動かしてみましょう。
$ rosrun turtlesim turtle_teleop_key Reading from keyboard ————————— Use arrow keys to move the turtle. ‘q’ to quit. |
rostopic list コマンドではRos SystemにはどんなTopicがあるかが一覧できます。
$ rostopic list /rosout /rosout_agg /turtle1/cmd_vel /turtle1/color_sensor /turtle1/pose |
先Keyboardの矢印ボタンで亀さんをうごいてみましたよね。このNodeを情報みて、カミさんにおくるcmd_velを操作などしてみたいと思います。
$ rosnode info /teleop_turtle ——————————————————————————– Node [/teleop_turtle] Publications: * /rosout [rosgraph_msgs/Log] * /turtle1/cmd_vel [geometry_msgs/Twist] Subscriptions: None Services: * /teleop_turtle/get_loggers * /teleop_turtle/set_logger_level contacting node http://abc-virtual-machine:37947/ … Pid: 26555 Connections: * topic: /rosout * to: /rosout * direction: outbound (56045 – 127.0.0.1:51890) [10] * transport: TCPROS * topic: /turtle1/cmd_vel * to: /turtlesim * direction: outbound (56045 – 127.0.0.1:51888) [12] * transport: TCPROS |
/turtle1/cmd_velをTerminalでいまどんなコマンドを与えがカミさんに渡してるか見えますね。
$ rostopic echo /turtle1/cmd_vel linear: x: 0.0 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: -2.0 |
最後はMessageをPubしたいと思います。
まず /turtle1/cmd_vel がどんなTopic typeなのか調べてみましょう。
$ rostopic type /turtle1/cmd_vel geometry_msgs/Twist |
そしてgeometry_msgs/Twistの中身を見てみましょう。
$ rosmsg show geometry_msgs/Twist geometry_msgs/Vector3 linear float64 x float64 y float64 z geometry_msgs/Vector3 angular float64 x float64 y float64 z |
そのメッセージの中身を説明したくれた方がいます↓
http://dailyrobottechnology.blogspot.com/2014/12/73-twist.html
時計方向に0.5ラジアン毎秒で回転しながら、0.1メートル毎秒で移動します。
geometry_msgs/Vector3 linear は並進方向の速度を意味し、それぞれ x, y, z 方向の速度をメートル毎秒で与えます。
また、geometry_msgs/Vector3 angular は回転方向の速度を意味し、それぞれ x, y, z 軸回りの回転速度をラジアン毎秒で与えます。
数学の復習ですねーー
https://www.geisya.or.jp/~mwm48961/koukou/mobile/s2do01_m.htm
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist 1 ‘{linear: {x: 0.1, y: 0, z: 0}, angular: {x: 0, y: 0, z: -0.5}}’ |