ROS2에서 gazebo 용 sdf를 작성하는 첫 단계

7085 단어 GazeboROS2URDFsdf
안추모사쿠

할 일



전회의 계속입니다.
마지막으로 최소 urdf 파일을 작성하여 rviz2에서 볼 수 있는지 확인했습니다.
쓴 것은 직사각형의 모노리스입니다만, 이번은 그 모노리스를 Gazebo에 표시시키고 싶습니다.
Gazebo에서 다루는 표준 파일 형식은 sdf입니다.
urdf를 Gazebo용으로 변환하는 방법도 있는 것 같습니다만, 자신에게는 아직 어렵기 때문에 sdf를 직접 써 갑니다.
어쨌든 모노리스를 표시할 수 있을지 어떨지를 이번은 확인하고 싶습니다.

필요한 것


  • ROS2를 사용할 수 있는 환경(Ubuntu 20.02 + ROS2/foxy)
  • ROS2의 기초 지식 (topic의 송수신 데모를 시도한 정도로 좋다)
  • Gazebo가 도입되었습니다 (버전은 ROS2를 지원하는 Gazebo9 이상을 권장)

  • 참고



    Testing Gazebo and ROS 2 integration
    아즈미노의 숲에서 > ROS(Robot Operating System) 사용 > 로봇 기술 언어
    매우 참고가 되었습니다. 감사합니다.

    ROS2 패키지 만들기



    먼저 적절한 작업 공간으로 이동하여 urdf 테스트용 패키지를 만듭니다.
    전회의 계속 등, 원래 있는 경우는 불필요합니다.
    $ ~/dev_ws/src #ビルド済みで使える状態の適当なワークスペース
    $ ros2 pkg create urdf_test --build-type ament_python --dependencies rclpy
    

    새롭게 작업 공간을 만들었다고 하는 경우는, 일단 액티베이트도 해 둡니다.
    (활성화하려면 여기를 클릭)
    $ CD ~/dev_ws/
    $ source install/local_setup.bash
    $ CD ~/dev_ws/src
    


    sdf 쓰기



    sdf의 내용을 써 갑니다. sdf는 xml 형식의 파일입니다.
    이번은 모놀리스를 포함한 환경 마다 파일에 기술하므로 확장자를 「.world」로 합니다.
    (라고 하는 것도 모노리스 단체를 파일로 해 launch 하는 방법을 아직 모릅니다.)
    $ nano test.world
    

    nano는 물론 vim에서도 code에서도 사용할 수있는 편집기로 OK입니다.

    test.world
    <?xml version="1.0"?>
    
    <sdf version="1.6">
      <world name="default">
        <!--地面を導入する-->
        <include>
          <uri>model://ground_plane</uri>
        </include>
        <!--ライティングを導入する-->
        <include>
          <uri>model://sun</uri>
        </include>
    
        <!--ここからモノリスの記述-->
        <model name='monolith'>
          <!--位置と角度。x,y,z,roll,pitch,yaw 単位はメートルとdegree-->
          <pose>0 0 0 0 0 0</pose>
    
          <!--パーツの記述-->
          <link name='body'>
            <pose>0 0 0 0 0 0</pose>
            <inertial>
              <!--質量-->
              <mass>1</mass>
              <!--慣性行列(後述)-->
              <inertia>
                <ixx>0.016667</ixx>
                <ixy>0</ixy>
                <ixz>0</ixz>
                <iyy>0.014167</iyy>
                <iyz>0</iyz>
                <izz>0.004167</izz>
              </inertia>
            </inertial>
    
            <!--表示用の記述-->
            <visual name='visual'>
              <geometry>
                <box>
                  <!--x,y,zのサイズ(メートル)-->
                  <size>0.1 0.2 0.4</size>
                </box>
              </geometry>
            </visual>
    
            <!--衝突判定の範囲-->
            <collision name='collision'>
              <geometry>
                <box>
                  <!--x,y,zのサイズ(メートル)-->
                  <size>0.1 0.2 0.4</size>
                </box>
              </geometry>
            </collision>
    
          </link>
        </model>
    
      </world>
    </sdf>
    

    위는 Gazebo에 모노리스를 등장시킬 때 아마도 최소한의 빠듯한 필요 요소가 될 것입니다.
    깊이 10cm, 폭 20cm, 높이 40cm, 질량 1의 직육면체입니다.
    관성 행렬은 계산에서 구해야 합니다.
    로봇 기술 언어 의 사이트를 참고로,
    ixx = 1/12 x 질량 x (y^2 + z^2)
    iyy = 1/12 x 질량 x (x^2 + z^2)
    izz = 1/12 x 질량 x (x^2 + y^2)
    에서 요청합니다.

    Gazebo에서 sdf 표시



    Gazebo 시작


    $ gazebo test.world
    

    Gazebo가 열리는 동시에 설정된 모노리스가 뷰의 중앙에 나타납니다.


    덧붙여서 gazebo의 뷰 화면의 조작은,
  • 왼쪽 클릭 + 이동 : 이동 (rviz에서는 회전)
  • 휠 누름 + 이동 : 회전 (rviz에서는 이동)
  • 오른쪽 클릭 + 상하 : 확대 축소 (rviz와 동일)

  • 되어 있습니다.

    또한 화면의 메뉴에서 십자 화살표 아이콘을 선택하면 이미지와 같이 빨간색과 녹색 파란색 손잡이가 나오므로 거기를 들고 물체를 이동할 수 있습니다.
    중력이 일하고 있기 때문에 파란색 화살표로 위로 들어 올린 다음 놓으면 아래로 떨어집니다.
    마찬가지로 회전 아이콘을 선택하면 모노리스를 회전시킬 수 있습니다.
    기울여 놓으면 어떻게 되는지는 짐작대로입니다.

    계속



    이것으로 휴머노이드를 기술하면, 앞은 멀 것 같습니다.
    조인트와 링크로 기술해 갈 필요도 있고, 이번에 나오지 않았던 요소도 몇가지 있습니다.
    xacro를 사용하여 쓰고 한층 더 변환하거나 배우도 많고, launch 만드는 방법에서도 힘든 일 것 같습니다.
    ROS2 환경에서 잘 작동하는 좋은 방법을 찾는 것이 좋다고 생각합니다.

    다음 기사:

    마지막 기사:

    좋은 웹페이지 즐겨찾기