로봇을 움직이기 위해서는 diff_drive
라는 plugin 을 사용한다
하지만 그전에 plugin 이란 무엇인가?
- 플러그인이란? 공유 라이브러리로 컴파일되어 시뮬레이션에 삽입되는 코드 덩어리 입니다.
➞ 플러그인을 사용하면 World, Model 등과 같은 시뮬레이션의 다양한 측면을 제어할 수 있다.
diff_drive
플러그인은 로봇, 특히 차동 구동이 가능한 로봇을 제어하는 데 도움이 된다.
앞의 튜토리얼에서 사용하던 building_robot.sdf
파일을 열고 vehicle_blue
모델에 아래와 같은 코드를 추가합니다.
<plugin
filename="gz-sim-diff-drive-system"
name="gz::sim::systems::DiffDrive">
<left_joint>left_wheel_joint</left_joint>
<right_joint>right_wheel_joint</right_joint>
<wheel_separation>1.2</wheel_separation>
<wheel_radius>0.4</wheel_radius>
<odom_publish_frequency>1</odom_publish_frequency>
<topic>cmd_vel</topic>
</plugin>
<plugin>
태그에는 filename 속성과 name 속성이 있습니다.
filename 은 라이브러리 파일 이름을 지정하며
name 은 플러그인의 이름을 지정합니다.
<left_joint>
, <right_joint>
태그에서는 로봇의 본체와 양옆의 바퀴를 연결하는 joint 를 정의합니다.
여기선 left_wheel_joint, right_wheel_joint 를 의미함
<wheel_separation>
은 두 바퀴사이의 거리를 나타내며, 로봇의 경우 chassis를 기준으로 각 바퀴가 0.6m씩 떨어져 위치해 있으므로 여기서 wheel_separation 값은 1.2m 입니다.
<wheel_radius>
는 바퀴의 반지릅 값을 나타냄, 이는 앞서 robot에서 지정한 <radius>태그 값에서 정의되었던 값을 그대로 가져옴.
<odom_publish_frequency>
는 odometry 가 /model/vehicle_blue/odometry 에서 게시되는 빈도를 설정합니다.
<topic> 에서 cmd_vel은 DiffDrive 플러그인에 대한 입력 topic을 의미함.
이젠 모델은 준비가 되었으니, command(messages)를 보내야 합니다. 해당 메세지는 위에 정의한 cmd_vel
형태의 메세지로 publish 될겁니다.
topic은 특정 메세지 집합이나 특성 서비스를 그룹화 하기 위한 이름.
우리가 사용하는 모델은 cmd_vel 토픽으로 전송된 메세지를 subscribe 하여 메세지를 읽고 실행함.
아래 코드를 실행해 우리가 만든 모델을 실행