5장 ROS 도구 활용하기

1. RQT(QT-based framework for GUI development for ROS)

1. 1 Graph

현재 ROS상의 노드와 메세지간의 정보를 그래프형식으로 보여준다.

  • 터틀심 노드 실행

rosrun turtlesim turtlesim_node
  • 터틀심 원격조종 노드 실행

rosrun turtlesim turtle_teleop_key
  • 노드 그래프 생성

rqt_graph

image.pngimage.png

2. Plot

메세지의 값에 대해 plot을 그리게 해준다.

rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
  • pose 메세지 plotting

rqt_plot /turtle1/pose/

image.png터틀심 노드의 pose 메세지 값 image.png터틀심 노드의 pose - time plot

3. Rosbag

메세지를 기록, 저장, 재생할 수 있게 해준다.

  • 원하는 디렉토리에 다음 명령어를 실행하면 rosbag 파일이 기록된다. (ctrl+c로 기록을 종료할 수 있다.)

  • rosbag파일의 정보를 보여준다.

image.png
  • rosbag 파일을 재생한다.(기록된 메세지를 시간순서대로 퍼블리시한다.)

  • rosbag 파일을 2배속도로 재생한다.

  • 특정 메세지만 저장할 수 있다.(subset 파일에 저장된다.)

참고자료 : http://wiki.ros.org/rosbag/Tutorials/Recording%20and%20playing%20back%20data

4. Custom plugins

그 외 유용한 RQT plugin

  • Easy Message Publisher : 현재 토픽 리스트에 올라온 토픽 메세지를 GUI상에서 메뉴얼로 퍼블리싱 가능하게 해준다.

image.png image.png

  • Topic Monitor : 현재 토픽들의 값과 통신 속도를 실시간으로 모니터링 할 수 있다.

image.png image.png

5. Own plugins

자신만의 GUI와 기능을 갖는 plugin을 개발해 RQT상에서 사용할 수 있다. 참고자료 : http://wiki.ros.org/rqt/Tutorials/Writing%20a%20Python%20Plugin

Rviz(ROS-visualization)

1. IMU 센서

image.png https://youtu.be/j5v5fKppcQo

2. Kinect

참고자료 : https://m.blog.naver.com/rmlee/221471760129 , 이상우님

3. Simulation

로봇의 오도메트리, TF, 센서 정보 등을 실시간 시각화를 통해 3D 시뮬레이션을 할 수 있다.

  • Rviz에 가상의 터틀봇3를 불러온다.

  • 터틀봇3 원격 조종 키 실행한다.

image.png

image.png터틀봇3의 노드 그래프

image.png터틀봇3의 TF Tree

image.png

터틀봇3의 오도메트리 실시간 정보

(원격 조종 키를 사용하면 오도메트리를 시각화해서 볼 수 있고 값을 rostopic echo를 통해 실시간으로 확인할 수 있다.)

4. SLAM(Simultaneous Localization And Mapping)

SLAM을 할 때 지도의 작성과정을 시각적으로 보여준다.

  • 가상 환경 불러오기

image.png
  • 터틀봇3 SLAM 실행

image.png
  • 터틀봇3 원격 조종 키

image.pngSLAM이 끝난 뒤 완성된 Map

  • Map 저장

image.png저장된 Map

가상 내비게이션 with Gazebo

- map 사

5. URDF

Unified Robot Description Format : ROS에서 사용되는 로봇 기술(Description) 형식 * URDF(Unified Robot Description Format) vs SDF(Simulation Description Format)

  • URDF는 하나의 robot 모델에 대해 기술하는 양식. 시뮬레이션 world 상에서 robot의 pose를 결정할 수 없다.

  • SDF는 world 상에서 여러개의 robot 모델에 대해 pose를 정의할 수 있으며 모델←→센서←→ World 의 관계에 대한 속성 정의도 가능하다.

쉽게 말해 서빙 로봇 서비스가 있는 매장에서 URDF는 서빙 로봇 하나의 도면!, SDF는 매장 전체 시스템의 도면!

1) URDF turtial 1 - URDF 이해하기 image.png

link : 모델 상의 하나의 Body(바퀴, 링크, 실린더, 구 등)

  • visual : link 요소의 시각화 (.dae, .stl 지원)

  • collision : link 요소 간의 충돌을 확인하기 위한 geometry (.dae, .stl 지원)

  • inertial : link의 동적 속성 기술(질량, 관성 모멘트 등)

  • origin : link 모델 중심의 joint로부터의 위치

image.pngJoint joint : link간의 구속관계 표현parent/child : link 간 구속관계에서 부모/자식 관계type : 관계의 종류(prismatic, revolute, continuous 등)axis : joint 축의 방향limit : joint의 이동가능 범위 제한origin : joint의 원점으로부터의 위치sensor : plugin을 통해 가상 world로부터의 센서 데이터를 취득material : link의 소재, 색상 등을 결정plugin : 모델을 제어하기 위한 controller 등 다른 플랫폼과 토픽/프레임을 공유하기 위한 수단

  • URDF 작성연습을 위해 시각화는 urdf_tutorial의 launch를 사용한다.

  • urdf_tutorial의 urdf 디렉토리에 다음 파일을 작성한다.

  • URDF 기본구조

  • Rviz에 URDF로 작성한 모델을 시각화한다.

image.pngURDF로 작성한 모바일 로봇 모델 image.pngJoint 컨트롤러 2) URDF tutotial 2 - 나의 모델 불러와 Rviz에 시각화하기

  • 새로운 URDF 작성

  • stl파일 불러오는 URDF

  • 예제 stl파일 가져오기(urdf 디렉토리에 저장)

  • Rviz로 시각화

image.png 3) URDF tutorial 3 - 3D모델에 물리적 특성 입히기 참고자료(관성 텐서 구하기) : https://en.wikipedia.org/wiki/List_of_moments_of_inertia#List_of_3D_inertia_tensors

  • 물리적 특성(collision, inertial) 반영된 URDF

  • Rviz로 시각화

image.png 4) URDF tutorial 4 - URDF Check

  • URDF Check tool 다운로드

  • URDF 링크 정합성 체크

image.pngURDF 링크 관계정보

  • URDF 링크 관계정보 시각화

image.pngURDF 링크 관계정보 pdf로 저장 image.pngURDF 링크 관계정보 시각화 5) URDF tutorial 4 - Xacro 이용하여 URDF 쉽게 작성하기

  • Xacro(XML Macro)를 사용한 URDF 작성

  • Xacro 실행하기 위해 반드시 추가해야하는 Command

6. URDF tutorial 7 - SDF Converter

6. manipulator (TBU)

Gazebo

1. URDF로 만든 3D 모델 Gazebo에 불러오기

URDF를 Gazebo 환경으로 불러오기 위해선 다음과 같은 작업이 필요하다.1) Gazebo plugin 추가2) 몇 가지 추가 정보 URDF에 입력(joint limit, transmission 정보, 물리 계수)3) Controller configuration 작성4) Launch file 작성 1) Gazebo plugin 추가

  • URDF 마지막 부분에 다음의 gazebo plugin 추가

2) 몇 가지 추가 정보 URDF에 입력(joint limit, transmission 정보, 물리 계수)

  • joints 수정 및 transmission 추가

  • 최종 수정된 URDF

3) Controller configuration 작성

  • urdf_tutorial 디렉토리에 config 디렉토리를 생성하여 controller config 문서 생성(.yaml)

  • joints.yaml

  • caster.yaml

  • diffdrive.yaml

4) Launch file 작성

  • gazebo_launch를 이용하기 위해 해당 launch파일을 urdf_tutorial/launch로 가져오기

  • 우리가 만든 모델을 Gazebo와 Rviz에서 사용하기 위한 launch 파일 작성

2. SDF로 만든 3D 모델 Gazebo에 불러오기

https://github.com/modulabs/gazebo-tutorial/wiki/Make-a-Mobile-Robot SDF를 Gazebo 환경으로 불러오기 위해선 다음과 같은 작업이 필요하다.1) 모델 directory 설정2) 모델의 구조 생성3) Gazebo에서 모델 불러오기 1) 모델 directory 설정

  • 모델 폴더를 생성

  • 모델 config 파일을 생성

  • config 파일에 다음 코드를 작성

  • SDF 파일을 생성

  • SDF 파일에 다음 코드를 작성

2) 모델의 구조 생성

  • SDF 파일을 실행

  • 모델의 static을 설정

  • static이 true이면 물리엔진의 영향을 받지 않고 false이면 물리엔진의 영향을 받음

  • 모델에 사각형 베이스 추가

  • 모델에 구 형상의 바퀴 추가

  • 모델에 왼쪽 바퀴 추가

  • 모델의 왼쪽 바퀴를 오른쪽으로 복사

  • static을 false로 설정, 왼쪽, 오른쪽 바퀴에 hinge 추가

3) Gazebo에서 모델 불러오기

  • Gazebo 실행

  • 모델 Insert

    • Gazebo 실행 후 GUI 인터페이스 왼쪽 상단의 Insert 탭 클릭

    • 'My Robot' 모델 클릭

    • 메인 화면에서 모델을 배치할 위치에 마우스를 위치시키고 클릭

  • 모델 작동 테스트

    • 화면 오른쪽 작은 점 3개 버튼을 클릭한 상태로 마우스를 왼쪽으로 이동시켜 Joints 탭 활성화

    • 'left_wheel_hinge'와 'right_wheel_hinge'를 각각 0.1N 씩 포스 입력

    • 모델이 움직이는 모습을 확인 할 수 있음

Last updated

Was this helpful?