본문 바로가기

FOSCAR-(Autonomous Driving)/ROS 스터디

[2024 ROS 스터디] 이호휘 #2주차-ROS의 용어/명령어/도구

반응형

1. ROS 용어 정리
 - 가장 중요한 용어 : Node / Package / Message
 1) Node - ROS의 대표적인 개념
  - 최소 단위의 실행 가능한 프로세서
  - 하나의 실행 가능한 프로그램
  - 각 노드는 메시지 통신으로 데이터를 주고 받음
  
 2) Package
  - 하나 이상의 노드, 노드 실행을 위한 정보 등을 묶어 놓은 것
  - 패키지의 묶음은 메타패키지라 하여 따로 분리
  
 3) Message
  - 메시지를 통해 노드간의 데이터를 주고 받음
  - 메시지는 integer / floating / point / boolean과 같은 변수 형태
  - 메시지 안 메시지를 품고있는 간단한 데이터 구조 및 메시지들의 배열과 같은 구조로 활용 가능
3-1) Topic : 단방향 연속성을 가진 통신 방법
 - Publisher : 메시지를 보내는 노드
 - Subscriber : 메시지를 받는 노드
 - 통신은 1:1이 기본이고 N:1 , 1: N으로도 활용 가능
 - 통신 방법 중 90%를 차지
3-2) Service : 양방향 1회성 성질을 가진 통신 방법
 - Service server : 메시지를 보내는 노드
 - Service client : 메시지를 받는 노드
 - 양방향 통신 방법이므로 각 노드가 두개의 성질을 모두 지님
3-3) Action : 중간에 피드백을 보내는 통신 방법
 - Action server : 액션 피드백 전달 및 액션 결과 전달
 - Action client : 액션 목표 전달
 - 중간중간 결과를 알고 싶을 때 사용
 
 
2. 메시지 통신

통신의 개요를. ROS 용어 정리

 - 가장 중요한 용어 : Node / Package / Message

 1) Node - ROS의 대표적인 개념

  - 최소 단위의 실행 가능한 프로세서

  - 하나의 실행 가능한 프로그램

  - 각 노드는 메시지 통신으로 데이터를 주고 받음

  

 2) Package

  - 하나 이상의 노드, 노드 실행을 위한 정보 등을 묶어 놓은 것

  - 패키지의 묶음은 메타패키지라 하여 따로 분리

  

 3) Message

  - 메시지를 통해 노드간의 데이터를 주고 받음

  - 메시지는 integer / floating / point / boolean과 같은 변수 형태

  - 메시지 안 메시지를 품고있는 간단한 데이터 구조 및 메시지들의 배열과 같은 구조로 활용 가능

3-1) Topic : 단방향 연속성을 가진 통신 방법

 - Publisher : 메시지를 보내는 노드

 - Subscriber : 메시지를 받는 노드

 - 통신은 1:1이 기본이고 N:1 , 1: N으로도 활용 가능

 - 통신 방법 중 90%를 차지

3-2) Service : 양방향 1회성 성질을 가진 통신 방법

 - Service server : 메시지를 보내는 노드

 - Service client : 메시지를 받는 노드

 - 양방향 통신 방법이므로 각 노드가 두개의 성질을 모두 지님

3-3) Action : 중간에 피드백을 보내는 통신 방법

 - Action server : 액션 피드백 전달 및 액션 결과 전달

 - Action client : 액션 목표 전달

 - 중간중간 결과를 알고 싶을 때 사용

 

 

2. 메시지 통신

 

통신의 개요를 그림으로 나타내면 다음과 같다.


 1) 마스터 구동 : XMLRPC(XML-Remote Procedure Call)
  - $roscore
  - 네트워크를 끄지 않는 이상 무조건 한번 실행 시키기
  - 노드 정보들을 관리
  - 노드들의 통신을 관리하여 연결

마스터 구동

 2) 서브스크라이버 노드 구동
  - $rosrun <패키지이름 노드이름>
      ex) rosrun turtlesim turtlesim_node
  - 실행되자마자 마스터에 정보 송신
  - 노드이름, 토픽이름, 메시지 형태, IP번호, 포트 번호

서브스크라이버 노드 구동


 3) 포블리셔 노드 구동
  - $rosrun <패키지이름 노드이름>
      ex) rosrun turtlesim turtlesim_teleop_key
  - 노드이름, 토픽이름, 메시지 형태, IP번호, 포트 번호

포블리셔 노드 구동


 4) 퍼블리셔 정보 알림
  - 마스터는 서브스크라이버 노드에 새로운 퍼블리셔 정보 제공

퍼블리셔 정보 알림


 5) 퍼블리셔 노드에 접속 요청
  - 마스터로부터 받은 퍼블리셔 정보를 이용하여 TCPROS 접속 요청

퍼블리셔 노드에 접속 요청


 6) 서브스크라이버 노드에 접속 응답
  - 접속 응답에 해당되는 자신의 TCP URI 주소와 포트 번호를 전송

서브스크라이버 노드에 접속 응답


 7) TCP 접속
  - TCPROs를 이용하여 퍼블리셔 노드와 직접 연결 8) 메시지 전송
  - 퍼블리셔 노드는 서브스크라이버 노드에 메시지 전송(토픽)

TCP 접속

 8) 메시지 전송
  - 퍼블리셔 노드는 서브스크라이버 노드에 메시지 전송(토픽)


 9) 서비스 요청 및 응답
  - 1회에 한해 접속, 서비스 요청 및 서비스 응답이 수행되고 서로간의 접속 중단

서비스 요청 및 응답

 

3. 메시지
 - 메시지 통신 : 토픽 / 서비스 / 액션 / 파라미터
 - ROS 메시지
  - 메시지는 노드 간의 데이터를 주고받을 대 사용하는 데이터 형태
  - 토픽, 서비스, 액션은 모두 메시지를 사용
  - 단순 자료형
  - 메시지 안에 메시지를 품고있는 간단한 데이터 구조
   ex) geometry_msgs/PoseStamped
  - 메시지들이 나열된 배열과 같은 구조
  
4. 네임
 - 노드, 메시지가 가지는 고유의 식별자
 - Ros는 그래프라는 추상 데이터 형태 지원
 - 글로벌
  - 문자 없이 네임을 바로 쓰거나 네임 앞에 슬래쉬(/)를 붙임
 - 프리베이트
  - 네임 앞에 틸트(~)를 붙임

5. 좌표 변환(TF)
 - 각 조인트들의 상대 좌표 변환
  - 트리 형태로 조인트들간의 관계도를 표시함
  
6. 클라이언트 라이브러리
 - 다양한 프로그래밍 언어 지원
  - roscpp, rospy, roslisp ...etc


ROS 명령어

 

1. ROS 명령어 정리

- ROS Command Line Tools

- roscore, rosrun ... etc

 

2. ROS 쉘 명령어

- ★★★ roscd : 지정한 ROS 패키지의 디렉터리로 이동

- rosls : ROS 패키지의 파일 목록 확인

- rosed : ROS 패키지의 파일 편집

- roscp : ROS 패키지의 파일 복사

- rospd : ROS 디렉터리 인덱스에 디렉터리 추가

- rosd : ROS 디렉터리 인덱스 확인

 

3. ROS 실행 명령어

- ★★★ roscore : master(ros 네임 서비스) 실행, rosout(로그 기록) 실행, parameter server(파라미터 관리) 구동

- ★★★ rosrun : 노드 실행

- ★★★ roslaunch : 노드를 여러개 실행 및 시랳ㅇ 옵션 설정

- ★★ rosclean : ros 로그 파일을 검사하거나 삭제

 

4. ROS 정보 명령어

- ★★★ rostopic : ROS 토픽정보 확인

- ★★★ rosservice : ROS 서비스 정보 확인

- ★★★ rosnode : ROS 노드 정보 확인

- ★★★ rosparam : ROS 파라미터 정보 확인, 수정

- ★★★ rosbag : ROS 메시지 기록, 재생

- ★★ rosmsg : ROS 메시지 정보 확인

- ★★ rossrv : ROS 서비스 정보 확인

- rosversion : ROS 패키지 및 배포 릴리즈 버전 정보 확인

- roswtf : ROS 시스템 검사

 

5. ROS catkin 명렁어

- ★★★ catkin_create_pkg : 패키지 자동 생성

- ★★★ catkin_make : 캐킨 빌드 시스템에 기반을 둔 빌드

- ★★ catkin_eclipse : 캐킨 빌드 시스템으로 생성한 패키지를 이클립스에서 사용할 수 있게 변경

- ★★ catkin_prepare_release : 릴리즈할 때 사용되는 로그 정리 및 버전 태깅

- ★★ catkin_generate_chanelog : 릴리즈할 때 CHANGELOG.rst 파일 생성 또는 업데이트

- ★★ catkin_init_workspcae : 캐킨 빌드 시스템의 작업 폴더 초기화

- catkin_find : 캐킨 검색

 

6. ROS 패키지 명령어

- ★★★ rospack : ROS 패키지와 관련된 정보 보기

- ★★ rosinstall : ROS 추가 패키지 설치

- ★★ rosdep : 해당 패키지의 의존성 파일 설치

- roslocate : ROS 패키지 정보 관련 명령어

- roscreate-pkg : ROS 패키지 자동 생성 (rosbuild 시스템에서 사용)

- rosmake : ROS 패키지를 빌드 (rosbuild 시스템에서 사용)


ROS 도구

1. Rviz

 - ROS의 3D 시각화툴
  - 센서 데이터의 시각화
  - 레이저 거리 센서의 거리 데이터
  - RealSense, Kinect, Xtion 등의 Depth Camera의 포인트 클라우드 데이터
   - 3차원 공간에서 거리값을 점으로 나타내서 데이터 저장
  - 카메라의 영상 데이터
  - IMU 센서의 관성 데이터
  
 - 로봇 외형의 표시와 계획된 동작을 표현
  - URDF
 
 - 내비게이션 / 매니퓰레이션 / 원격 제어
 
  1) Lidar
   - 레이저 기반 센서
   - 2D 거리 센서
   
  2) 초음파 센서
   - 방사형 형태로 나감
   - 범위도 Rviz에서 확인 가능
   - 해상도가 떨어짐
   - 정확한 거리 확인은 어려움
   
  3) IMU
   - 관성 측정
   
  4) RealSense
   - Intel의 Depth Camera
   - Depth 정보 확인 가능
   - 정상 카메라 기능 탑재
 
  5) 내비게이션
   - 위치 이동에서 장애물 정보, 경로 정보 등이 표현
 
  6) 매니퓰레이션
   - 로봇암 표현 가능
   - 로봇암 경로 데이터 저장 및 재생 가능
   
  
  ○ Rviz
   - 1) 3D 뷰
    - 설정한 뷰가 출력 
    
   - 2) 디스플레이 옵션
    - 설정한 디스플레이가 출력
    - 시각화 옵션을 선택
    - 디스플레이 종류
     - xyz축, camera, DepthCloud, Efort , ... etc
    
   - 3) 메뉴
    - 역할이 많이 없음
    
   - 4) 툴
    - 많이 사용되지 않음
    
   - 5) 뷰 형태
    - 뷰의 축 설정
    
    - 6) 시간
     - ROS 시간과 실제 시간 등을 표시
     
 - Rviz를 사용하면 센서 및 로봇 관련 데이터 시각화가 매우 간단해짐
    
    
2. ROS GUI 개발 도구 (rqt)

 - 플러그인 방식의 ROS의 종합 GUI 툴
  - ROS Fuerte 버전부터는 rqt라는 이름으로 통폐합되어 ROS의 종합 GUI 툴로써 사용 가능
  - rqt는 Qt로 개발되어 유저들이 자유롭게 플러그인을 개발하여 추가할 수 있음
  
 - RQT 플러그인
  1) Action / 액션
   - Action Type Browser : Action 타비의 데이터 구조를 확인
   
  2) Configuration / 구성
   - Dynamic Reconfigure : 노드들에서 제공하는 설정값 변경을 위한 GUI tjfwjdrkqt qusrud
   - Launch : roslaunch의 GUI 버전
   
  3) Introspection / 내성
   - Node Graph : 구동중인 노드들의 관계도 및 메시지의 흐름을 확인 가능한 그래프 뷰
   - Package Graph : 노드의 의존 관계를 표시하는 그래프 뷰
   - Process Monitor : 실행중인 노드들의 CPU 사용률, 메모리 사용륭, 스레드 수 등을 확인
  
  4) Logging / 로깅
   - Bag : ROS 데이터 로깅
   - Console : 노드들에서 발생되는 경고, 에러 등의 메시지를 확인
   - Logger Level : ROS의 Debug, Info, Warn, Error, Fatal 로거 정보를 선택하여 표시
   
  5) Miscellaneous Tools / 다양한 툴
   - Python Console : 파이썬 콘솔 화면
   - Shell : 쉘을 구동
   - Web : 웹 브라우저를 구동
   
  6) Robot / 로봇
   - 사용하는 로봇에 따라 계기판 등의 플러그인을 이곳에 추가
   
  7) Robot Tools / 로봇 툴
   - Controller Manager : 컨트롤러 제어에 필요한 플로그인
   - Diagnostic Viewer : 로봇 디바이스 및 에러 확인
   - Moveit! Monitor : 로봇 팔 계획에 사용되는 Moveit! 데이터를 확인
   - Robot Steering : 로봇 조정 GUI 툴, 원격 조정에서 이 GUI 툴을 이용하여 로봇 조종
   - Runtime Monitor : 실시간으로 노드들에서 발생되는 에러 및 경고를 확인
   
  8) Service / 서비스
   - Service Caller : 구동중인 서비스 서버에 접속하여 서비스를 요청
   - Service Type Browser : 서비스 타입의 데이터 구조를 확인
   
  9) Topics / 토픽
   - Easy Message Publisher : 토픽을 GUI 환경에서 발행
   - Topic Publisher : 토픽을 생성하여 발행
   - Topic Type Browser : 토픽 타입의 데이터 구조 확인
   - Topic Monitor : 사용자가 선택한 토픽의 정보를 확인
   
  10) Visualization / 시각화
   - Image View : 카메라의 영상 데이터를 확인
   - Navigate Viewer : 로봇 네비게이션의 위치 및 목표지점 확인
   - Plot : 2차원 데이터 플롯 GUI 플러그인, 2차원 데이터의 도식화
   - Pose View : 현재 TF의 위치 및 모델의 위치 표시
   - Rviz : 3차원 시각화 툴인 Rviz 플러그인
   - TF Tree : TF 관계를 트리로 나타내는 그래프 뷰
  
 3. 3D Simluator Gazebo - ROS 사용에 추천할만한 시뮬레이터. ROS와 연동하기 용이
 
  - 로봇 개발에 필요한 3차원 시물레이션을 위한 로봇, 센서, 환경 모델 등을 지원하고 물리 엔진을 탑재하여 실제와 근사한 결과를 어등ㄹ 수 있는 3차원 시뮬레이터
  - 좋은 평가
  - DARPA Robotics Challenge의 공식 시뮬레이터
  - ROS와의 호환성이 매우 좋음
  
  - Gazebo 특징
   1) 물리엔진 사용 가능
   
   2) Advanced 3D Graphic을 구동 가능
    - OGR을 사용하여 해상도가 높음
    
   3) Camera, Depth 등등의 센서가 기본 탑재
   
   4) 유저가 플러그인 형태로 기능 추가 가능
    
   5) TCP/IP Transport으로 통신 지원
   
   6) Cloud Simulation

반응형