평면 3 링크 매니퓰레이터 용 형상 모델의 URDF 설명

15717 단어 MS3LURDFROS


소개



ROS의 3D 모델 기술 형식 URDF를 사용하여 쁘띠 로보 MS3L을 기술 해 보았습니다 (위 게시). 「로봇 1일 개발 최초의 ROS&위치 추정」이라고 하는 특집 타이틀에 매료되어(속어, 라고까지는 말하지 않습니다) 샀던 「트랜지스터 기술」2020년 9월호의 제6장 「자립 이동 로봇용 형상 모델의 만드는 방법」을 참고로 했습니다. 매크로 언어 xacro는 사용하지 않기 때문에 매우 긴 XML 파일이되었습니다. ROS 공식 튜토리얼에서는 R2의 모델링 비디오도 있지만, 마음이 멀어지는 것 같은 작업입니다.

환경


  • 우분투 18.04 LTS
  • ROS melodic
  • VS Code

  • XML 코드


  • 주의점 등

  • 1. 조인트의 위치나 링크의 길이는, MS3L를 실측한 대략 숫자를 베이스로 하고 있습니다.
    2. urdf의 길이의 단위는 미터이므로, 이 모델링의 기술은, 실제치수의 약 10배입니다.
    3. 팁 부분에는 브래킷을 세로로 설치하여 후크처럼 사용할 수 있도록 했습니다.
      (이쪽의 동영상에 감명을 받았습니다.하지만, 쁘띠 로보의 브라켓에서는···.)
       htps //w w. 요츠베. 이 m/와 tch? v = gmQ ← Qw h5k & 훗 아츠레 = 에mb_ ぉ
  • 매뉴퓰레이터 용 urdf를 작성할 때 약간의 팁
  • 첫째, 조인트가 있습니다. 링크보다 먼저 복수의 조인트의 위치를 ​​골격으로 결정한다.
  • 링크의 길이는 조인트 사이의 길이와 같아집니다. 디자인에 집중하면 빠진다.
  • 링크는, 위치를 지정하지 않고 두면 링크의 중앙에 조인트가 배치된다. 그래서 링크 길이의 절반 정도를 origin xyz 의 Z축의 값으로 들어올린다(Z축 방향에 수직으로 링크를 늘리고 있는 경우) 그냥 링크 바로 아래에 조인트가 온다.
  • 아직 xacro는 사용하지 않지만 편리합니다. 미래의 도전. (전도 다난의 예상)

  • simple_ms3l.urdf
    <robot name="test_robot">
      <material name="red">
        <color rgba="1.0 0.0 0.0 2.0"/>
      </material>
      <material name="green">
        <color rgba="0.0 1.0 0.0 2.0"/>
      </material>
      <material name="blue">
        <color rgba="0.0 0.0 1.0 2.0"/>
      </material>
      <material name="white">
        <color rgba="1.0 1.0 1.0 2.0"/>
      </material>
    
      <link name="base_link"/>
    
      <joint name="base_joint" type="fixed">
        <parent link="base_link"/>
        <child  link="srv0_body"/>
      </joint>
    
      <link name="srv0_body">
        <visual>
          <geometry>
            <box size="0.25 0.15 0.3"/>
          </geometry>
          <origin xyz="0 0 0.15" rpy="0 0 0"/>
          <material name="green"/>
        </visual>
      </link>
    
      <joint name="joint1" type="revolute">
        <parent link="srv0_body"/>
        <child  link="srv2_body"/>
        <origin xyz="0 0 0.3" rpy="0 0 0"/>
        <limit lower="-3.14" upper="3.14" effort="0" velocity="0"/>
      </joint>
      <link name="srv2_body">
        <visual>
          <geometry>
            <box size="0.25 0.15 0.5"/>
          </geometry>
          <origin xyz="0 0 0.25" rpy="0 0 0"/>
          <material name="blue"/>
        </visual>
      </link>
    
      <joint name="joint2" type="revolute">
        <parent link="srv2_body"/>
        <child  link="srv3_body"/>
        <origin xyz="0 0 0.5" rpy="0 0 0"/>
        <limit lower="-3.14" upper="3.14" effort="0" velocity="0"/>
      </joint>
      <link name="srv3_body">
        <visual>
          <geometry>
            <box size="0.25 0.15 0.5"/>
          </geometry>
          <origin xyz="0 0 0.25" rpy="0 0 0"/>
          <material name="red"/>
        </visual>
      </link>
    
      <joint name="joint3" type="revolute">
        <parent link="srv3_body"/>
        <child  link="head_body"/>
        <origin xyz="0 0 0.5" rpy="0 0 0"/>
        <limit lower="-3.14" upper="3.14" effort="0" velocity="0"/>
      </joint>
      <link name="head_body">
        <visual>
          <geometry>
            <box size="0.25 0.15 0.2"/>
          </geometry>
          <origin xyz="0 0 0.1" rpy="0 0 0"/>
          <material name="white"/>
        </visual>
      </link>
    
      <joint name="head1_joint" type="fixed">
        <parent link="head_body"/>
        <child  link="head2_body"/>
        <origin xyz="0 -0.03 0.1" rpy="0 0 0"/>
        <limit lower="-3.14" upper="3.14" effort="0" velocity="0"/>
      </joint>
      <link name="head2_body">
        <visual>
          <geometry>
            <box size="0.15 0.4 0.01"/>
          </geometry>
          <origin xyz="0 0 0.1" rpy="0 0 0"/>
          <material name="white"/>
        </visual>
      </link>
    
      <joint name="head2_joint" type="fixed">
        <parent link="head2_body"/>
        <child  link="head3_body"/>
        <origin xyz="0 0.2 0.15" rpy="0 0 0"/>
      </joint>
      <link name="head3_body">
        <visual>
          <geometry>
            <box size="0.15 0.01 0.3"/>
          </geometry>
          <origin xyz="0 0 0.1" rpy="0 0 0"/>
          <material name="white"/>
        </visual>
      </link>
      <joint name="head3_joint" type="fixed">
        <parent link="head2_body"/>
        <child  link="head4_body"/>
        <origin xyz="0 -0.2 0.12" rpy="0 0 0"/>
      </joint>
      <link name="head4_body">
        <visual>
          <geometry>
            <box size="0.15 0.01 0.2"/>
          </geometry>
          <origin xyz="0 0 0.1" rpy="0 0 0"/>
          <material name="white"/>
        </visual>
      </link>
    </robot>
    

    후기


  • 공식 (?)의 Tutorial은, 읽어도 전혀 모른다(어째서, 그런 잎과 같은 예를 사용해 설명하고 있는지 신기하지 않다)로부터, 타인이 만든 것으로부터 노하우를 훔치는 편이 전혀 빠르다 그리고 가자. (전혀 개인으로서의 감상입니다)
  • urdf 문법 검사 도구는 솔직히 이 정도의 구조의 경우는 무용의 장물. RViz에서 매번 가시화하여 위치 관계를 확인하는 것이 결국 빠릅니다. 시간은 걸리지 만, 트라이 앤 에러 바람은 알기 쉽다.
  • 매니퓰레이터의 관성 모멘트는 어떻게 계산하는 것일까. 쁘띠 로보와 같은 작은 장치에서는 영향은 거의 없는 것과 같지만, 큰 것이 되면, 팔을 붕붕 돌리면 망가져 버릴 것이니까 상당히 중요한 수치인 것이므로, 산출 방법도 분명 누군가가 설명 해주고 있는 것임에 틀림없다.
  • 좋은 웹페이지 즐겨찾기