始めてのアドカレ
ROS2 アドベントカレンダーの4日目です.
ROS2を使ってRoboCupで戦えるようにGmappingを使えるようにしたというお話です.
RoboCup
言わずと知れた大会で,来年の3月に名古屋で,7月ぐらいにフランスはボルドーであります!
それらに私は参加します!
そして,その参加に向けてプログラムの作成を行なっています!
でも,Pythonはサポート終了だし,Ubuntu16もサポートはもう直ぐ切れるし...
そこで,チャレンジとして,ROS2でやってみようということを思いました.
苦難の道へようこそ
さて,RoboCup @Home educationの競技は今年同様なら,
- Speech and Person Recognition (SPR)
- Restaurant
- Help me carry
- final
以上の4つのはずです.
そして,現在できてるのは,SPRのみ!
さてさて,Japan Openまでに間に合うのやら?笑
Restaurant競技
Restaurant競技はロボットをレストランで活用するために行っている競技です.
なので,まずは環境の地図の生成を行わないといけません.なので,私たちのチームはGmappingを利用して,地図の生成を行うことにしました.
やったこと
自作したTurtlebot bringupでどうにかGmappingを使えるようにしないといけませんので,まずはTopic名をGmappingに合わせました.
しかし,base_linkがどうたらこうたらといってきたので,初めてTFに手を出します.
Gmappingは座標の変換を
map -> odom
としてくれます.なので,Turtlebot brinup側を
base_link -> odom
とするので,
odom_trans.header.stamp = get_clock()->now();
odom_trans.header.frame_id = "odom";
odom_trans.child_frame_id = "base_link";
odom_trans.transform.translation.x = N_position_x;
odom_trans.transform.translation.y = N_position_y;
odom_trans.transform.translation.z = 0;
odom_trans.transform.rotation = translateCoordinate(0.0, 0.0, N_orientation_theta);
odom_broadcaster->sendTransform(odom_trans);
と設定を行い,
うまく動作させることに成功しました.
(動画は後日追加します.)
でも,Gmappingの自己位置推定を可視化したいということもあり,Gmappingをごちゃごちゃいじって,nav_msgs/msg/Odometryでパブリッシュするようにプログラムを一部書き換えました.
最終的にRviz2では以下のような感じに可視化することができました.
(動画は後日追加します.)
RoboCupに向けて...
まだまだ問題は山積みですが,ROS2をRoboCupでも使われるチームが増えることを期待して,これからもTwitterやQiitaで情報を発信していこうと思います.
IoTの分野でもROS2は活躍できると思うので,私たちサークルは,その方面でもロボットと連携できるように模索していきます.
ありがとうございました!
(なんかRoboCupに参加することを主張しすぎた...しかもぐだった...)