로봇을 움직이기 위해서는 diff_drive라는 plugin 을 사용한다

하지만 그전에 plugin 이란 무엇인가?

➞ 플러그인을 사용하면 World, Model 등과 같은 시뮬레이션의 다양한 측면을 제어할 수 있다.

Diff_drive plugin

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을 의미함.

Topics and Messages

이젠 모델은 준비가 되었으니, command(messages)를 보내야 합니다. 해당 메세지는 위에 정의한 cmd_vel 형태의 메세지로 publish 될겁니다.

topic은 특정 메세지 집합이나 특성 서비스를 그룹화 하기 위한 이름.

우리가 사용하는 모델은 cmd_vel 토픽으로 전송된 메세지를 subscribe 하여 메세지를 읽고 실행함.

아래 코드를 실행해 우리가 만든 모델을 실행