ROS Galacticのリリースが2021年5月23日にありました。Ubuntu20.04 LTSで動作する新しいROSですが、どのような機能が追加されているのかを勉強がてらRollingディストリビューションを使って試してみました。
かなり多くの機能が追加されているようで少し使いやすそうです。
このブログでは次の環境を使用しています。
一応実際に実行したものを記述していますが、まだまだ勉強中なので、適宜修正予定です。
インストール
$ sudo apt update && sudo apt install curl gnupg lsb-release $ sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg $ echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu (lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null $ sudo apt update $ sudo apt install ros-galactic-desktop
Galacticに移行すべき??Galacticの新機能まとめ
以下、下記リンクの日本語訳です。Galacticで実装されているものはRollingでも同様に実装されているため、この記事ではRollingで説明しています。
rosrunのログレベル指定
実行ごとにロガーレベルを任意の個数指定できるようになりました。例えば、下記のコマンドならWARNレベルとDEBUGレベルを変更できます。これによって、余計なログを消したり、ログを追加できたりします。
$ ros2 run demo_nodes_cpp talker --ros-args --log-level WARN --log-level talker:=DEBUG
上記のオプションを付けた場合とつけていない場合で比較してみました。「WARN」レベルを指定することでWARNに満たないレベルの出力をフィルタします。(Ctrl+Cの出力がフィルタされています)
例えば、すべてのレベルを「DEBUG」に設定した場合は次のようになります。
逆に、すべてのレベルを「ERROR」に設定した場合は何も出力されません。
rosidl
CMakeを使用せずに、メッセージファイルからメッセージ用のファイル群(.hや.hppなど)を生成できるようになりました。どのような使い道があるのでしょうか…?プラグイン作成が楽になる(?)などのメリットがあるらしいですが…
勉強がまだまだ足りないみたいです。
QoSのオーバーライド
Galactic以降はQoSをオーバーライドできるようになりました。以下のリンクをみる限りだと、Foxy以前で動いていたプログラムの実行時にQoSの上書きを行うyamlを当てることでQoSを行うみたいですね。QoS設定を外部から上書きできるのは便利ですね。
demos/quality_of_service_demo at a66f0e894841a5d751bce6ded4983acb780448cf · ros2/demos · GitHub
External configurability of QoS policies.
Python で point_cloud2 が使用可能
point_cloud2がPythonで使えるようになったそうです。
Rviz2タイムパネル
ROS1のRvizの時間表示機能が移植されました。
ros2 topic echo のオプションに "-raw" の追加
デバッグ用らしいです。
to_yaml関数(rclcpp)
to_yamlで出力形式を変更できます。
スクリーンショットでは、Twistをto_yamlで出力しています。分かりやすい。
#include <cstdio> #include <std_msgs/msg/string.hpp> #include <std_msgs/msg/int32.hpp> #include <geometry_msgs/msg/twist.hpp> #include <iostream> int main() { std_msgs::msg::String msg_string; std_msgs::msg::Int32 msg_int32; geometry_msgs::msg::Twist twist_data; msg_string.data = "hello world"; msg_int32.data = 10; std::cout << rosidl_generator_traits::to_yaml(twist_data) << std::endl; printf("%s", rosidl_generator_traits::to_yaml(msg_string).c_str()); printf("%s", rosidl_generator_traits::to_yaml(msg_int32).c_str()); return 0; }
ros2コマンドを使用して実行時にパラメータファイルをロードする機能
Add rosparam verb load by v-lopez · Pull Request #590 · ros2/ros2cli · GitHub
yamlファイルから実行時にパラメータをロードする機能が追加されているようです。(現在のFoxyでもできないことはないと思うのですが…?よくわかっていません。)
Terminal 1
$ ros2 run demo_nodes_cpp parameter_blackboard
Terminal 2
$ ros2 param set /parameter_blackboard foo bar $ ros2 param dump /parameter_blackboard $ ros2 param set /parameter_blackboard foo different $ ros2 param load /parameter_blackboard ./parameter_blackboard.yaml
QoS非互換性チェック機能
※ rollingでは確認できませんでした
ros2doctorにQoS互換性をチェックするツールが追加されたそうです。
個人的な総評
Galacticは主にログレベル系統のアップデートが充実しています。そのため、2022年以降(2024年メイン)のシステムも見据えている場合や単純に個人で開発している人には使いやすいのかなと感じました。
ただし、ROS2 Foxyユーザが昨年から今年の3月にかけてROS2史のなかでもこれまでにないレベルで増えていることを考えると、パッケージはFoxyが主流になるのかなーと思います。
Here is your #ROS news for this week
— Robot Operating System (ROS) (@rosorg) 2021年5月14日
🔌New @arduino for industrial applications
🔌An obituary for Kinetic Kame
🔌New SLAM Toolbox Paper
🔌@svrobo Job Fair
🔌@BostonDynamics Spot ROSbag Data
🔌MoveIt 1.1.4 for Noetic
🔌Lots more!https://t.co/pyh8jZTA6I pic.twitter.com/ohgj6vyY77
しばらくはFoxyの開発が中心になるのかなーと思います。
なにかGalacticの長所を生かした実装ができればまた投稿したいと思います。