로봇/ROS

URDF를 이용해 만든 로봇에 Unity 자동차 연결하기 (1)

with-RL 2023. 8. 12. 23:42

이번 포스팅은 URDF를 이용해 만든 로봇에 가상 자동차 연결하기 (2) 과정을 통해서 만들어진 로봇을 Unity 환경에서 가상 자동타를 만들어서 연결해서 테스트를 해 보는 과정입니다.

 

이 포스트는 다음 과정을 완료한 후에 참고하시길 바랍니다.

1. Unity Project 생성하기

  • 'Unit Hub'에서 'New project' 버튼을 누릅니다.

  • 'New Project' 창에서 아래 내용을 입력하고 'Create project' 버튼을 눌러 프로젝트를 생성합니다.
     Editor Version: 2021.3.*
     Project templates: 3D
     Project name: unity_ws
     Location: 프로젝트를 생성하기 위한 적당한 위치

  • 아래 그림과 같이 Unity 3D 프로젝트가 생성됩니다.

  • Project 탭에서 'Assets >> Scense' 선택 후 마우스 메뉴 버튼을 선택 후 'Create >> Scene'을 선택합니다.

  • 생성된 Scene의 이름을 '2WD Car'로 변경하고 더블클릭하면 아래와 같이 비어있는 Scene이 활성화됩니다.

2. Unity Ground & Materials 생성하기

  • 자동차가 동작을 할 수 있는 땅에 해당하는 Ground와 색상을 표현하기 위한 Materials를 생성하는 과정입니다.
  • Hierarchy 탭에서 마우스 메뉴 버튼을 눌러서 '3D Object >> Plane'을 선택합니다.

  • Plane을 선택한 후 Transform 정보를 아래와 같이 입력합니다. 아래 그림과 같이 하얀색의 땅에 해당하는 역영이 보입니다.
    Position: 0, 0, 0
    Rotation: 0, 0, 0
    Scale: 10, 1, 10

  • Project 탭에서 Assets 폴더를 선택하고 마우스 메뉴 버튼을 누른 후 'Create >> Folder'를 선택합니다.

  • 폴더 이름을 Materials로 변경하고 Materials 폴더를 선택하고 마우스 메뉴 버튼을 누른 후 'Create >> Material'을 선택합니다.

  • Material 이름을 Ground로 변경하고 Shader를 'Lagacy Shaders >> Diffuse'로 변경합니다.

  • Main color의 (R, G, B)의 값을 (128, 128, 128)로 변경합니다.

  • Tiling의 (x, y) 값을 (5, 5)로 변경하고 Texture를 아래 그림과 같이 체크무니 형식을 선택합니다.

  • 새로운 Material을 생성하고 아래와 같이 수정합니다.
    이름은 White로 변경합니다.
    (R, G, B) 값은 (255, 255, 255)로 변경합니다.
    나머지는 기본값을 유지합니다.

  • 새로운 Material을 생성하고 아래와 같이 수정합니다.
     이름은 Blue로 변경합니다.
     (R, G, B) 값은 (0, 0, 255)로 변경합니다.
     나머지는 기본값을 유지합니다.

  • 새로운 Material을 생성하고 아래와 같이 수정합니다.
     이름은 Red로 변경합니다.
     (R, G, B) 값은 (255, 0, 0)로 변경합니다.
     나머지는 기본값을 유지합니다.

  • 새로운 Material을 생성하고 아래와 같이 수정합니다.
     이름은 Black로 변경합니다.
     (R, G, B) 값은 (0, 0, 0)로 변경합니다.
     나머지는 기본값을 유지합니다.

  • 위에서 만든 Plane을 선택하고 Inspector 창에서 아래와 같이 변경합니다. 아래 그림과 같이 타일 형식의 땅을 볼 수 있습니다.
    이름을 Ground로 변경합니다.
    Materials의 Element를 Grounds로 변경합니다.

3. Unity 자동차 생성하기

  • Hierarchy 탭에서 마우스 메뉴 버튼을 누른 후 'Create Empty'를 선택합니다.

  • 생성된 'GameObject'를 선택 후 Inspector 탭에서 아래와 같이 설정합니다.
    이름을 Car로 변경합니다.
    Transform 정보를 아래와 같이 변경합니다.
      - Position: (0, 0.2, 0)
      - Rotation: (0, 0, 0)
      - Scale: (1, 1, 1)

  • 'Car' Object를 선택 후 마우스 메뉴 버튼을 누른 후 'Create Empty'를 선택합니다.
  • 생성된 'GameObject'를 선택 후 Inspector 탭에서 아래와 같이 설정합니다.
     이름을 Body로 변경합니다.
     Transform 정보를 아래와 같이 변경합니다.
      - Position: (0, 0, 0)
      - Rotation: (0, 0, 0)
      - Scale: (0.1, 0.06, 0.2)

  • Body를 선택하고 마우스 메뉴버튼을 누른 후 메뉴에서 '3D Object >> Cube'를 선택합니다.

  • Cube Object를 선택 후 Materials를 White로 변경합니다. 아래 그림과 같이 하얀색 Cube가 생성된 것을 확인할 수 있습니다.

  • 'Car' Object를 선택 후 마우스 메뉴 버튼을 누른 후 'Create Empty'를 선택합니다. 생성된 'GameObject'를 선택 후 Inspector 탭에서 아래와 같이 설정합니다.
     이름을 Wheels로 변경합니다.
  • 'Wheels' Object를 선택 후 마우스 메뉴 버튼을 누른 후 'Create Empty'를 선택합니다. 생성된 'GameObject'를 선택 후 Inspector 탭에서 아래와 같이 설정합니다.
     이름을 LeftWheel로 변경합니다.
     Transform 정보를 아래와 같이 변경합니다.
      - Position: (-0.065, -0.03, 0.06)
      - Rotation: (0, 0, -90)
      - Scale: (0.06, 0.015, 0.06)

'LeftWheel' Object를 선택 후 마우스 메뉴 버튼을 누른 후 '3D Object >> Cylinder'를 선택합니다.

  • Cylinder Objects의 Materials를 Blue로 변경합니다. 아래 그림과 같이 왼쪽 바퀴가 생성된 것을 확인할 수 있습니다.

  • LeftWheel Object를 선택하고 마우스 메뉴버튼을 누른 후 메뉴에서 Duplicate 버튼을 선택합니다.

  • 복제된 Object를 선택하고 Inspector 탭에서 아래 내용을 수정합니다. 아래 그림과 같이 오른쪽 바퀴가 생성된 것을 확인할 수 있습니다.
     이름을 RightWheel로 변경합니다.
     Transform 정보를 아래와 같이 변경합니다. 나머지 값은 기존 값을 그대로 사용합니다.
      - Position x: 0.065
      - Rotation z: 90

  • 'Wheels' Object를 선택 후 마우스 메뉴 버튼을 누른 후 'Create Empty'를 선택합니다. 생성된 'GameObject'를 선택 후 Inspector 탭에서 아래와 같이 설정합니다.
     이름을 CasterWheel로 변경합니다.
     Transform 정보를 아래와 같이 변경합니다.
      - Position: (0, -0.03, -0.06)
      - Rotation: (0, 0, 0)
      - Scale: (0.06, 0.06, 0.06)

  • CasterWheel Object를 선택하고 마우스 메뉴버튼을 누른 후 메뉴에서 '3D Object >> Sphere'를 선택합니다.

  • Sphere Object를 선택 후 Inspecter 탭에서 Materials를 Blacke으로 선택합니다.

4. Unity 자동차 물리적 특성 및 이동기능 추가

  • 이 상태에서 Play 버튼을 눌러보면 자동차가 하늘에 떠 있는 것을 화면과 Position y 값을 통해 확인할 수 있습니다. 이유는 아직 물리적 특성이 적용되지 않았기 때문입니다.

  • Play를 중지하고 Car Object를 선택 후 Inspector 탭에서 AddComponent 버튼을 선택 후 Rigidbody를 선택합니다.

  • Rigidbody의 값을 아래와 같이 설정합니다.
    Mass: 0.1
    Drag: 0.001
     Angular Drag: 0.001

  • Play 버튼을 눌러보면 자동차가 아래로 떨어지는 것을 화면과 Position y 값을 통해 확인할 수 있습니다. 이제 물리적 특성이 적용 됐습니다.

  • 'Car' Object를 선택 후 마우스 메뉴 버튼을 누른 후 'Create Empty'를 선택합니다. 생성된 'GameObject'를 선택 후 Inspector 탭에서 아래와 같이 설정합니다.
     이름을 Colliders 변경합니다.
  • 'Colliders' Object를 선택 후 마우스 메뉴 버튼을 누른 후 'Create Empty'를 선택합니다. 생성된 'GameObject'를 선택 후 Inspector 탭에서 아래와 같이 설정합니다.
     이름을 LeftWeel 변경합니다.
  • LeftWeel Object를 선택 후 Inspector 탭에서 'Wheel Collider' Component를 추가합니다.

  • Inspector 탭에서 LeftWeel Object의 특성을 다음과 같이 변경합니다. 아래 내용을 제외한 나머지는 기본값을 사용합니다. 아래 그림과 같이 하늘색 동그란 선이 왼쪽 바퀴의 중앙에 위치하게 됩니다.
    Transform
      - Position: (-0.065, -0.025, 0.06)
    Weel Collider
      - Mass: 0.02
      - Radius: 0.03
      - Weel Damping Rate: 0.0001
      - Suspension Distance: 0.01
      - Force App Point Distace: 0
      - Suspension Spring: Spring (0), Damper (0), Target Position (0.5)

  • LeftWheel을 선택하고 마우스 메뉴버튼을 누른 뒤 메뉴에서 Duplicate를 선택해서 복제합니다.
  • 복제된 Object를 선택 후 Inspector 탭에서 아래와 같이 설정합니다. 나머지는 그대로 둡니다.
     이름을 RightWeel로 변경합니다.
     Transform Position x: 0.065

  • Project 탭에서 'Assets >> Materials' 폴더를 선택하고 마우스 메뉴버튼을 누른 후 메뉴에서  'Create >> Physics Material'을 선택합니다.

  • 생성된 Physics Material의 특성을 아래와 같이 수정합니다.
    이름: CasterWheel
     Dynamic Friction: 0.001
     Static Friction: 0.001
     Bounciness: 0

  • Hierarchy 탭에서 'CaterWheel >> Sphere' Object를 선택 후 'Sphere Collider'의 'Material'에 'CaterWheel' Physics Material을 지정합니다.