OMO_R1_Bringup 패키지

개요 #

omo_r1_bringup 패키지에는 아래의 내용이 포함되어 있습니다.

  • IMU 장비와 연결하고 /imu 토픽 발행
  • LiDAR 장비와 연결하고 /scan 토픽 발행
  • 로봇 모터 제어와 모니터링을 담당하고 /cmd_vel을 subscribing하고 로봇을 움직이는 기능
  • USB 카메라가 장착되어 있다면 영상 토픽을 발행
  • URDF 모델을 확인
  • 키보드 원격 제어를 수행하는 기능

연결 #

위에서 본 로봇 모터 컨트롤 부분
로봇 모터 제어기와 연결하는 시리얼 단자
로봇 제어기에 시리얼 케이블을 연결한 모습
  • 이미 로봇은 각종 센서류와 함께 USB-Hub를 통해 연결이 완료된 상태로 배포됩니다.
  • 내부에서 로봇을 구동하는 모터드라이버의 연결단자는 위 사진의 위치입니다.
  • 따로 구동하거나 단순히 기능을 테스트한다면 위 단자에서 바로 PC와 연결해도 됩니다.

각 기능 테스트 #

본 장은 omo_r1_bringup 패키지에 launch 폴더 launch 파일로 구성된 각 기능에 대한 설명입니다.

omo_r1_motor.launch #

  • omo_r1_motor.launch는 R1의 모터 제어기보드와 직접 통신을 하는 노드를 실행합니다.
<launch>
  <arg name="set_port" default="/dev/ttyMotor"/>
  <arg name="set_odom_mode" default="wheel_only"/>
  <node pkg="omo_r1_bringup" type="omo_r1_motor_node.py" name="omo_r1_motor_node" output="screen">
      <param name="port" value="$(arg set_port)"/>
      <param name="baud" value="115200"/>
      <param name="odom_mode" value="$(arg set_odom_mode)"/>
      <param name="modelName" value="r1"/>
  </node>
</launch>

연결 port 직접 입력 #

  • 만약 R1의 구동만을 ROS에서 하려고 하고 별도의 PC에 직접 연결했다면 해당 패키지만 직접 연결할 수 있습니다.
omo_r1_motor.launch를 port를 지정해서 실행한 화면
  • omo_r1_motor.launch에 set_port를 입력으로 연결된 USB를 확인해서 직접 연결할 수 있습니다.
teleop_key를 실행한 화면
  • omo_r1_bringup 패키지의 omo_r1_motor.launch를 실행한후, omo_r1_teleop_jey.launch를 실행하면
  • 위 그림처럼 나타난 상태에서 w 키를 눌러서 linear vel을 0.1이 맞춥니다. (이는 단순히 테스트하는 것으로 이 때 로봇은 다른 상자나 거치대 위에 올려서 두 바퀴가 모두 지면에서 떨어지도록 해둡니다.)
  • 이제 omo_r1_motor.launch를 실행하고 위 그림처럼 omo_r1_teleop_key.launch도 같이 실행되었고, 로봇에 직진 방향으로 0.1 rad/sec의 속도 명령이 하달되었다면 양쪽 바퀴가 회전을 시작했을 겁니다.

  • 위 동영상을 보면 한 바퀴 돌때마다 시간을 타임 워치로 측정할 수 있을 겁니다. 동영상에도 나타나지만, 최초 한 바퀴는 6.3초, 그 다음은 12.6초가 소요됩니다.
  • 선 속도는 위 수식처럼 바퀴수와 시간으로 계산할 수 있습니다. 이때 바퀴의 반지름은 대략 0.1016m입니다.
  • 위 표의 계산 결과로 선속도는 0.1에 근접합니다. (실제로 타임워치는 손으로 눌러서 외부에서 육안으로 관찰해서 오차가 존재합니다.) -로봇 구매 후 motor관련 테스트를 하는 것으로 내부 제어기에서 이런 오차를 가지고 있는 것은 아닙니다.

odom mode #

  • omo r1 bringup 패키지는 로봇이 자신의 위치를 계산할 때 회전각도를 예측하는 방법을 두 가지 중 하나를 선택해야 합니다.
  • 기본 설정은 두 바퀴의 위치의 합과 차를 이용해서 odom을 계산합니다. 이 모드는 launch 파일을 아무 옵션 없이 실행만 하면 됩니다.
  • 혹은 위 그림처럼 실행할때 set odom mode를 wheel_only로 설정하면 됩니다.
roslaunch omo_r1_bringup omo_r1_motor.launch set_odom_mode:="wheel_only"
  • 만약 휠의 차이를 이용한 위치 예측이 만족스럽지 못하면 위 그림과 같 imu를 사용해서 yaw 각도를 받아서 odom을 계산할 수 있습니다.
  • 이렇게 사용하는 경우는 반듯이 imu 토픽을 발행하는 노드를 실행해 두어야 합니다.
  • omo r1은 현재 로보티즈의 OpenCR을 사용하여 imu를 발행할 수 있는 기능을 지원하고 있습니다.
  • 그러나 imu는 상황과 환경에 따라 간혹 지자기 센서의 오차로 인해 드리프트라는 이름으로 알려진 각도 흐르는 현상이 나타날 수 있습니다.
roslaunch omo_r1_bringup omo_r1_motor.launch set_odom_mode:="using_imu"

omo_r1_model.launch #

omo_r1_model.launch를 실행한 화면
roslaunch omo_r1_bringup omo_r1_model.launch
  • omo_r1_model.launch를 실행하면 rviz에서 robot_description이 표현됩니다.
omo_r1_model.launch 실행후 rviz의 화면

  • 화면에 나타난 camera는 여러분의 구매 옵션에 따라 제공되지 않을 수도 있습니다.