ようこそ、 名無し ID:TJTZR3EG さん(ゲスト)
ROS2開発で頻出の「調べる・動かす・切り分ける」ための基本コマンドをまとめました。困ったときは、まず node / topic / param の3系統で“何が動いていて何が流れているか”を確認すると、原因が絞れます。
ROS 2のコマンドを実行するための前提条件として、ターミナルを開くたびに環境変数を読み込む(ソースする)必要があります。(※例としてディストリビューションが humble の場合)
毎回入力するのが手間な場合は、echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc を実行して自動化しておくと便利です。
source /opt/ros/humble/setup.bash
指定したパッケージ内の実行可能ファイル(ノード)を起動します。ROS 2の最も基本的な実行コマンドです。
ros2 run <パッケージ名> <実行ファイル名>
複数のノードやパラメータをまとめて起動する場合に使用します。
ros2 launch <パッケージ名> <ローンチファイル名>
ノード間でやり取りされているデータ(トピック)の状態を確認したり、実際の値をターミナル上に表示したりします。
# 現在アクティブなトピックの一覧を表示
ros2 topic list
# 特定のトピックに流れているデータをリアルタイムで表示
ros2 topic echo /<トピック名>
# トピックの通信頻度(Hz)を確認
ros2 topic hz /<トピック名>
自作したパッケージや、クローンしてきたソースコードをコンパイルします。必ずワークスペースのルートディレクトリ(例: ~/ros2_ws)に移動してから実行します。
# ワークスペース内の全パッケージをビルド
colcon build
# 特定のパッケージのみをビルド(時短に便利です)
colcon build --packages-select <パッケージ名>
新しいROS 2パッケージの雛形(ディレクトリと必須ファイル)を作成します。使用する言語(C++ または Python)に合わせてビルドタイプを指定します。
# C++(CMake)用パッケージを作成する場合
ros2 pkg create --build-type ament_cmake <パッケージ名>
# Python用パッケージを作成する場合
ros2 pkg create --build-type ament_python <パッケージ名>
「ノードが起動しているか」「どんなPublish/Subscribeを持っているか」を確認します。通信がうまくいかないときの第一歩です。
ros2 node list
ros2 node info /<ノード名>
パラメータはノードの動作を外部から設定する仕組みです。起動引数で渡すだけでなく、実行中に確認・変更できます(ノード実装によります)。
ros2 param list /<ノード名>
ros2 param get /<ノード名> <パラメータ名>
ros2 param set /<ノード名> <パラメータ名> <値>
補足: 起動時にまとめて設定する場合は、YAMLファイルやlaunch側の記述が一般的です。
Serviceはリクエスト/レスポンス型の通信です。状態リセットや設定変更など、同期的な操作に使われます。
ros2 service list
ros2 service type /<サービス名>
ros2 service call /<サービス名> <サービス型> "{...}"
ポイント: 型名やリクエスト形式は ros2 interface show で確認できます。
Actionは時間のかかる処理(進捗付き)に向いた通信です。ナビゲーションなどで頻出します。
ros2 action list
ros2 action info /<アクション名>
ros2 action send_goal /<アクション名> <アクション型> "{...}"
補足: 実際のオプションや入力形式は ros2 action send_goal -h で確認してください。
「このトピックは何型?」「このServiceのリクエスト形式は?」を調べるときに使います。
ros2 interface list
ros2 interface show std_msgs/msg/String
トピック通信が怪しいときは「流れているか」と同時に「QoSが合っているか」を疑います。まずは詳細情報の表示から始めると安全です。
ros2 topic info -v /<トピック名>
手動でPublishして動作確認したい場合は ros2 topic pub を使います。
ros2 topic pub /<トピック名> <型> "{...}"
補足: QoS関連のオプションはバージョン差が出やすいので、必要なら ros2 topic echo -h / ros2 topic pub -h で確認してください。
環境が壊れているか、探索がうまくいっていないかを切り分けるのに役立ちます。
ros2 doctor --report
ros2 daemon stop
ros2 daemon start
センサーデータやトピック通信を記録し、あとから再生することで再現性の高いデバッグができます。ここでは最小限のコマンドに絞り、運用の注意点(容量・記録時間・再生条件など)は別途追記します。
ros2 bag record -a
ros2 bag info <bagフォルダ>
ros2 bag play <bagフォルダ>
最後に、コマンドを打つ順番を固定しておくと迷いません。
source /opt/ros/<distro>/setup.bash と、ワークスペースを使うなら source install/setup.bash を実行したかros2 node list に対象ノードが出るかros2 topic list と ros2 topic echo で流れている事実が確認できるかros2 param list / get で期待どおりの値かros2 interface show で型を確認したか同じネットワーク上に複数のROS2システムがあると、意図しないノード同士が見えてしまうことがあります。ROS_DOMAIN_ID を分けると、通信を論理的に分離できます(同じID同士だけが見える)。
# 現在値の確認
echo $ROS_DOMAIN_ID
# 例: ドメインIDを1に設定(ターミナル単位)
export ROS_DOMAIN_ID=1
補足: チームで使う場合は「どのロボット/どの環境が何番か」を決め、必要なら ~/.bashrc に書いて統一します。
通信が見えない/急に見えなくなったときは、環境変数の差分が原因のことがあります。まずは事実を確認します。
printenv | grep -E '^ROS|^RMW'
echo $ROS_DISTRO
echo $RMW_IMPLEMENTATION
挙動が怪しいときは、ログレベルを上げるだけで原因が見えることがあります。ノード起動時に指定できます。
# 例: debugログで実行
ros2 run <パッケージ名> <実行ファイル名> --ros-args --log-level debug
# 例: warn以上に絞る
ros2 run <パッケージ名> <実行ファイル名> --ros-args --log-level warn