0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Gazebo Classic(旧Gazebo)とIgnition Gazebo(新しいGazebo)の違いと移行方法

0
Posted at

この資料は、**古いGazebo(Gazebo Classic)から新しいGazeboへの移行(お引越し)**について説明しています。
単なるバージョンアップではなく、中身の仕組みが大きく変わっているため、少し大がかりな作業になります。

初心者の方にもわかりやすいように、主な違いと具体的な作業ステップをまとめました。


I. 主な違い

1. 中身の仕組み(アーキテクチャ)が変わりました

  • 古いGazebo: すべての機能が1つの大きな塊になっていました。
  • 新しいGazebo: 必要な機能(モジュール)をブロックのように組み合わせて使う設計になりました。これにより、自分好みにカスタマイズしやすくなりました。

2. 動きがスムーズになりました

  • 物理演算(モノの動きを計算する機能)が新しくなり、たくさんのロボットを動かしてもサクサク動くようになりました。

3. 見た目がキレイになりました

  • 描画エンジン(画面に映し出す機能)が新しくなり、よりリアルな表現ができるようになりました。

4. 起動するコマンドが変わりました

  • 古いGazeboでは gazebo というコマンドでしたが、新しい方は gz sim というコマンドになります (以前は ign gazebo と呼ばれていました)。

II. 移行するための具体的なステップ

移行するには、主に「モデルファイルの書き換え」「ワールドファイルの書き換え」「プログラムの書き換え」「ROS 2との連携設定」の壁を乗り越える必要があります。

Step 1: モデルファイル(SDF)の更新

ロボットや建物の形を定義する「SDFファイル」の書き方を新しくする必要があります。

  • 位置の基準をはっきりさせる(最重要):
    以前は「なんとなくここが基準」とされていましたが、新しいGazeboでは「どこを基準にしているか」を必ず書く必要があります(relative_to 属性)。

    【例:SDFの書き方の違い】

    <!-- 古いGazebo(SDF 1.6)の場合 -->
    <pose>1 0 0 0 0 0</pose>
    
    <!-- 新しいGazebo(SDF 1.8以降)の場合 -->
    <!-- 'base_link' というパーツを基準にして配置すると明示する -->
    <pose relative_to='base_link'>1 0 0 0 0 0</pose>
    
  • 色の指定方法を変える:
    見た目のキレイさを活かすために、光の反射などを細かく設定する形に変わりました。

    【例:色の指定】

    <material>
      <ambient>0.8 0.1 0.1 1.0</ambient> <!-- 全体的な色(赤っぽくする) -->
      <diffuse>0.8 0.1 0.1 1.0</diffuse> <!-- 光が当たった時の色 -->
      <specular>0.5 0.5 0.5 1.0</specular> <!-- 光の反射の強さ -->
    </material>
    
  • 環境変数の変更:
    「自作したロボットのファイルがどこにあるか」をパソコンに教えるための設定名が変わりました。

    • 旧: GAZEBO_MODEL_PATH
    • 新: GZ_SIM_RESOURCE_PATH

Step 2: ワールドファイル(世界の設定)の更新

ワールドファイル(.world)では、「どの機能を使うか」を明示的に宣言するようになりました。

  • 必要な機能を読み込む:
    物理演算や画面表示などの基本機能も、明示的に呼び出す必要があります。

    【例:ワールドファイルに追加する設定】

    <world name="default">
      <!-- 物理計算の機能を読み込む -->
      <plugin filename="gz-sim-physics-system" name="gz::sim::systems::Physics"/>
      
      <!-- 画面にモノを描画する情報を配信する機能を読み込む -->
      <plugin filename="gz-sim-scene-broadcaster-system" name="gz::sim::systems::SceneBroadcaster"/>
      
      <!-- 再生や停止などのユーザー操作を受け付ける機能を読み込む -->
      <plugin filename="gz-sim-user-commands-system" name="gz::sim::systems::UserCommands"/>
      ...
    </world>
    

Step 3: 自分で作ったプラグイン(C++プログラム)の書き換え

これが一番大変な作業です。古いGazebo用に作ったプログラムはそのままでは動きません。
中のデータとのやり取りの方法が根本的に変わったため、プログラムを書き直す必要があります。

  • 考え方の違い:
    以前は「ロボットの腕パーツを取得して、そこに力を加える」という直接的な操作でした。
    新しいGazeboでは、「システム全体が持っている現在の状態(データ)を読み取り、変更の指示を出す」という間接的な操作(コマンドベースの操作)になります。少しゲーム作りのような形(ECSアーキテクチャ)に近くなりました。

Step 4: ROS 2との連携方法の変更

ROS 2と一緒に使うときの設定方法も変わりました。GazeboとROSを直接つなぐのではなく、「ブリッジ(橋渡しプログラム)」を間に挟んで通信するようになります。

  • 使うパッケージが変わる: 古い gazebo_ros_pkgs ではなく、新しい ros_gz というパッケージを使用します。

  • ブリッジの設定(必須): どのデータをROSとGazeboでやり取りするかを一つずつ設定する必要があります。

    【例:ROS 2のPython Launchファイルでの設定例】

    from launch_ros.actions import Node
    
    # GazeboとROSの間で /chatter というデータのやり取りを中継(ブリッジ)する設定
    bridge = Node(
        package='ros_gz_bridge',
        executable='parameter_bridge',
        # 【重要】 トピック名 @ ROSのデータの型 @ Gazeboのデータの型 という形式で書く
        arguments=['/chatter@std_msgs/msg/String@gz.msgs.StringMsg'],
        output='screen'
    )
    
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?