ROS2 Gazebo


1.WareHouseの作成


(1)リンクの内容でアマゾンawsで作成したwarehouseモデルを使うことにした.他のモデルではROS 2がサポートされていないことが多いが、これは修正に時間がかかると予想され、採用されていないためである.

インストール方法


# go to your ros2_ws/src
git clone -b foxy-devel https://github.com/aws-robotics/aws-robomaker-small-warehouse-world.git
cd ..
rosws update
rosdep install --from-paths src --ignore-src -r -y
colcon build
# 만약 ~/.bashrc안에 아래의 명령어 넣어놨으면 그걸 사용
source install/setup.bash
ros2 launch aws_robomaker_small_warehouse_world no_roof_small_warehouse_launch.py
が成功すると、上記の写真が表示されます.

2.Turtlebot 3を読み込む


Wegazeboworldにturtlebot 3を読み込む前に、turtlebot 3 simulationをインストールします.
git clone -b foxy-devel https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git
rosdep install --from-paths src --ignore-src -r -y
colcon build
source ~/.bashrc
ros2 launch turtlebot3_gazebo empty_world.launch.py
が成功すれば、このような通報が見られる.warehouseファイルとturtlebotファイルが確定した以上、次のようにファイルを変更できます.
1. 'src/aws-robomakers-small-warehouse-world/worlds/no_roof_small_warehouse/no_roof_small_warehouse.world' 마지막에 다음과 같은 코드를 삽입한다.
<include>
  <pose>-2.0 -0.5 0.01 0.0 0.0 0.0</pose>
  <uri>model://turtlebot3_waffle</uri>
</include>
2. 'src/aws-robomakers-small-warehouse-world/models/' 안에 turtlebot3_waffle 혹은 burger 모델을 넣는다. 
위같이 하고 아까와 동일하게 파일을 launch하면 이번에는 터틀봇이 있는 상태로 존재한다.
不安を感じたらコピーしたファイルで実行します.

3.RVIZでの表示


上で運転している状態でRVIZを開いて設定しましょうこれで以下のエラーが発生します.にtfを見ると地図とodomしか見えません.つまり、ロボットのtfは公開されていません(もちろん、理想的にはturtlebotを移動することもできます).ありがとうございます.robot state publisherを使ってこの問題を解決することができます.特にRobot State publisherはRobote LaunchファイルにRobote State publisherを作成していますので、利用してみましょう.
つまり、私たちは2つのことを起動します.一つはawsパッケージで、もう一つはrobot state publisherです.次の起動ファイルを作成します.
turtlebot3_warehouse.launch.py
import os

from ament_index_python.packages import get_package_share_directory
from launch import LaunchDescription
from launch.actions import ExecuteProcess, DeclareLaunchArgument
from launch.actions import IncludeLaunchDescription
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch.substitutions import LaunchConfiguration, PythonExpression
from launch.conditions import IfCondition


TURTLEBOT3_MODEL = os.environ['TURTLEBOT3_MODEL']
WORLD_MODEL = os.environ['WAREHOUSE_MODEL']

def generate_launch_description():
    use_sim_time = LaunchConfiguration('use_sim_time', default='True')

    aws_small_warehouse_dir = os.path.join(get_package_share_directory('aws_robomaker_small_warehouse_world'), 'launch')
    
    if WORLD_MODEL == 'small_warehouse':
        aws_small_warehouse = IncludeLaunchDescription(
            PythonLaunchDescriptionSource([aws_small_warehouse_dir, '/no_roof_small_warehouse_launch.py'])
        )

    elif WORLD_MODEL == 'big_warehouse':
        aws_small_warehouse = IncludeLaunchDescription(
            PythonLaunchDescriptionSource([aws_small_warehouse_dir, '/big_warehouse_launch.py'])
        )


    launch_file_dir = os.path.join(get_package_share_directory('turtlebot3_gazebo'), 'launch')
    robot_state_publisher = IncludeLaunchDescription(
            PythonLaunchDescriptionSource([launch_file_dir, '/robot_state_publisher.launch.py']),
            launch_arguments={'use_sim_time': use_sim_time}.items(),
    )

    ld = LaunchDescription()
    ld.add_action(aws_small_warehouse)
    ld.add_action(robot_state_publisher)

    return ld
その後構築および実行後、rvizで次のようにコンテンツを表示できます.

4.インテルRealsense Gazebo Pluginの使用


上記のことをもう一度よく考えてみましょう.urdfとsdfを本当に知っていますか?私は今やっともっと理解した.urdfは基本的にtfを中心に組織されており,テーマはない.すなわち,robot state publisherはtf関係のみを表示する.では、Gazeboのセンサー価格はどこで見られますか?sdfファイルに書いたものと見なします.だからrealmension gazebopluginを使いたいなら?等しいurdfファイルもsdfファイルも変更します.sdfとurdfの違いは(2)に説明されている.以下に要約する.
  • urdf = Unified Robotic Description Format
  • sdf = Simulation Description Format
  • why sdf?
    URDF can only specify the kinematic and dynamic properties of a single robot in isolation. URDF can not specify the pose of the robot itself within a world. It is also not a universal description format since it cannot specify joint loops (parallel linkages), and it lacks friction and other properties. Additionally, it cannot specify things that are not robots, such as lights, heightmaps, etc.
  • 結果は、仮想環境に適したフォーマットではないことを示します.そこでGazeboはsdf形式のファイルを作成して使用しました.
  • 結論=rvizではtf形式のみ!Gazeboではプラグイン利用の話題が出ています.
  • 上記の結論を見てurdfとsdfを比較する必要があります.これで上からダウンロードしたintel realesense d 435 i pluginを使うことができますよね?

    urdf vs sdf


    使用可能なタグ/置換/追加について簡単に説明します.

    Required

    <link> 태그 안에는 <inertia>가 꼭 있어야 한다.

    Optional

    * <link> 안에 <gazebo> element를 넣는 것.
      - color 를 gazebo format으로 바꿀 수 있음
      - Add sensor plugins
    * Add a <gazebo> element for every <joint>
      - Set proper damping dynamics
      - Add actuator control plugins
    適当に調べて、また知りたいなら(2)でもう一度調べてみます.
    だから私はなぜsdfが必要なのか知っています.だから、realsenceをどのように家のスペクトルに使いますか.
    家譜に載ったのは最終的にモデルだった.これはsdfファイルです.この部分を修正しましょう.
    top-level launch = turtlebot3_warehouse.launch.py
    second-level launch = no_roof_small_warehouse_launch.py, robot_state_publisher.launch.py
    no_roof_small_warehouse_launch.py = gzserver, gzclient, waffle model.sdf
    robot_state_publisher.launch.py = urdf parse.
    すなわちwaffleのモデルです.sdfファイル、turtlebot 3 waffle d 435 i.urdfを使用します.二つを修正するという意味です.
    もう一度探してurdfをgazeboに産卵する方法があります.単一慣性とプラグインで異なる方法で作成します.例は以下のとおりです.
      <xacro:macro name="box_inertia" params="m w h d">
        <inertial>
          <origin xyz="0 0 0" rpy="${pi/2} 0 ${pi/2}"/>      
          <mass value="${m}"/>
          <inertia ixx="${(m/12) * (h*h + d*d)}" ixy="0.0" ixz="0.0" iyy="${(m/12) * (w*w + d*d)}" iyz="0.0" izz="${(m/12) * (w*w + h*h)}"/>
        </inertial>
      </xacro:macro>
    
      <link name="base_link">
        <visual>
          <geometry>
            <box size="${base_length} ${base_width} ${base_height}"/>
          </geometry>
          <material name="Cyan">
            <color rgba="0 1.0 1.0 1.0"/>
          </material>
        </visual>
    
        <collision>
          <geometry>
            <box size="${base_length} ${base_width} ${base_height}"/>
          </geometry>
        </collision>
    
        <xacro:box_inertia m="15" w="${base_width}" d="${base_length}" h="${base_height}"/>
      </link>
    この場合、xacro、xml macroなどの簡単なタグを通します.

    4.d 435 i Pluginを放棄する。


    理由を捨てる。

  • urdfファイルをsdfで書くのは面倒です.
  • ros 2のrtab-mapを味わいたい場合はdept cameraプラグインを使用します.(4)kinectカメラを使う-->libDepthCameraPlugin.に変化各種プラグインを表示したい場合は、下のフォルダで確認してください.
  • /usr/lib/x86_64-linux-gnu/gazebo-11/plugins
  • isaacsimにできるだけ早く移行します.
  • Gazeboはナビゲーションパラメータの変更にのみ使用します.

    デフォルトpluginの使用


    の最終画面です.使い方は本当に簡単です.カメラの種類を変更します.以下のとおりです.
    camera.sdf
    <sensor name="camera" type="camera">
      <always_on>true</always_on>
      <visualize>true</visualize>
      <update_rate>30</update_rate>
      <camera name="intel_realsense_r200">
        <horizontal_fov>1.02974</horizontal_fov>
        <image>
          <width>1920</width>
          <height>1080</height>
          <format>R8G8B8</format>
        </image>
        <clip>
          <near>0.02</near>
          <far>300</far>
        </clip>
        <noise>
          <type>gaussian</type>
          <!-- Noise is sampled independently per pixel on each frame.
                      That pixel's noise value is added to each of its color
                      channels, which at that point lie in the range [0,1]. -->
          <mean>0.0</mean>
          <stddev>0.007</stddev>
        </noise>
      </camera>
      <plugin name="camera_driver" filename="libgazebo_ros_camera.so">
        <ros>
          <!-- <namespace>test_cam</namespace> -->
          <!-- <remapping>image_raw:=image_demo</remapping> -->
          <!-- <remapping>camera_info:=camera_info_demo</remapping> -->
        </ros>
        <!-- camera_name>omit so it defaults to sensor name</camera_name-->
        <!-- frame_name>omit so it defaults to link name</frameName-->
        <!-- <hack_baseline>0.07</hack_baseline> -->
      </plugin>
    </sensor>
    camera.urdf
      <gazebo reference="camera_link">
        <sensor name="depth_camera" type="depth">
          <visualize>true</visualize>
          <update_rate>30.0</update_rate>
          <camera name="camera">
            <horizontal_fov>1.047198</horizontal_fov>
            <image>
              <width>640</width>
              <height>480</height>
              <format>R8G8B8</format>
            </image>
            <clip>
              <near>0.05</near>
              <far>3</far>
            </clip>
          </camera>
          <plugin name="depth_camera_controller" filename="libgazebo_ros_camera.so">
            <baseline>0.2</baseline>
            <alwaysOn>true</alwaysOn>
            <updateRate>0.0</updateRate>
            <frame_name>camera_depth_frame</frame_name>
            <pointCloudCutoff>0.5</pointCloudCutoff>
            <pointCloudCutoffMax>3.0</pointCloudCutoffMax>
            <distortionK1>0</distortionK1>
            <distortionK2>0</distortionK2>
            <distortionK3>0</distortionK3>
            <distortionT1>0</distortionT1>
            <distortionT2>0</distortionT2>
            <CxPrime>0</CxPrime>
            <Cx>0</Cx>
            <Cy>0</Cy>
            <focalLength>0</focalLength>
            <hackBaseline>0</hackBaseline>
          </plugin>
        </sensor>
      </gazebo>
    変更された部分は以下の通りです.
  • 型カメラが深くなりました.
  • depth frame
  • pointCloudCutoff+Max
  • 上記の内容を追加しました.ねじれと焦点距離は基本的で、私はあなたを入れなければなりません.

    5. Google Cartographer



    今重要な問題があります.地図とodomの間に変換が生成されないため、ロボットやscan msgは地図には見えません.おかしいことに、地図描画者ノードのテーマはすべてできます.しかし、まだTFエラーがあります.どこが間違っているかを知る必要があります.

    6. RTAB-Map



    まずrtabmapをlidarの形式に変えます.昨日作ったurdfはずっとトラブルを起こしています.正確にはurdfではなく、sdfファイルには非常に厄介な部分があるようです.特に上にmapとodomの切り替えがないので、何も見えないと、この部分はプレッシャーがかかります.本当にtf treeをチェックすれば問題ありません...まだ長い道のりがあるようです.を調べたところ、tfツリーの問題はありませんでした.単純にGazeboがエラーを起こした.いずれにしても,上記pclを用いてマッピングを行い,以下のようなマッピングを得た.本人のカメラのfovや焦点距離を考慮して、もう一度します.

    7. Navigation


    調音の終わりが純情だと信じて、基本教程を始めましょう.
    次は製図員が作った地図です.この地図を基準にナビゲーションを行った.までよくできていました.

    Feed back

  • ロボットのどの動作が閉ループを妨げるか->持続的な左右回転またはその場回転がロボットマップ全体に影響します.
  • urdf作成方式->xacroを積極的に使用します.またはstlファイルを使用します.
  • [ref]
  • (1) https://automaticaddison.com/useful-world-files-for-gazebo-and-ros-2-simulations/
  • (2) http://gazebosim.org/tutorials/?tut=ros_urdf
  • (3) https://velog.io/@cjh1995-ros/ROS-URDF-to-SDF
  • (4) http://gazebosim.org/tutorials?tut=ros_gzplugins