본문 바로가기

FOSCAR-(Autonomous Driving)/ROS 스터디

[2025 ROS 스터디] 조원영 #2주차- ROS 용어, 명령어, 도구

반응형

ROS 용어

Node

  • 최소 단위의 실행 가능한 프로세서
  • 하나의 실행 가능한 프로그램
  • ROS에서는 최소한의 실행단위로 프로그램을 나눠 작업한다.

Package

  • 하나 이상의 노드, 노드 실행을 위한 정보 등을 묶어놓은 것
  • 패키지의 묶음 = 메타패키지

Message

  • 메시지를 통해 노드 간의 데이터를 주고받는다.
  • Integer, Floating Point, Boolean같은 변수 형태
  • 메시지 안에 메시지를 품고 있는 간단한 데이터 구조 사용 가능
    • ex) geometry_msgs/PoseStamped
  • 메시지들의 배열 같은 구조 사용 가능
    • ex) float32[ ] ranges, sensor_msgs/LaserScan
  • Topic, Service, Action 모두 Message를 사용한다.
  • Topic ↔ Service
    • 단방향, 연속성을 가지는 통신 방식
    • 1 대 1, 1 대 多, 多 대 1, 多 대 多 통신 가능
    • 사용 빈도가 가장 높음
  • Publisher
    • 메시지를 보내는 쪽
  • Subscriber
    • 메시지를 받는 쪽
  • Service, Service Server, Service Client
    • 양방향, 일회성을 가지는 통신 방식
  • Action, Action Server, Action Client → actionlib (move_base, ros_navigation)
    • Service와 비슷한 역할
    • 중간 결과 (액션 피드백) 전달해준다는 점이 차이점
    • 시간이 오래 걸린다는 단점 有
    • 중간 결과가 필요한 복잡한 프로그램에서 사용

메시지 통신

  1. 마스터 구동
    • XMLRPC(XML-Remote Procedure Call)
    • 노드 정보 관리
    • 명령어 : roscore
  2. Subscriber 노드 구동
    • 명령어 : rosrun 패키지이름 노드이름
    • 노드 정보 전송 (노드의 이름, 토픽의 이름, 메시지 형태, IP 번호, 포트번호)
  3. Publisher 노드 구동
    • 명령어 : rosrun 패키지이름 노드이름
    • 노드 정보 전송 (노드의 이름, 토픽의 이름, 메시지 형태, IP 번호, 포트번호)
  4. Publisher 정보 알림
    • 마스터는 Subscriber 노드에게 새로운 Publisher 정보를 알린다.
  5. Publisher 노드에 접속 요청
    • 마스터로부터 받은 Publisher 정보를 이용해 TCPROS 접속을 요청
  6. Subscriber 노드에 접속 응답
    • 접속 응답에 해당되는 자신의 TCP URI 주소와 포트번호를 전송
  7. TCP 접속
    • TCPROS를 이용해 Publisher 노드와 직접 연결
  8. 메시지 전송
    • 발행자 노드는 Subscriber 노드에게 메시지를 전송 (토픽)
  9. 서비스 요청 및 응답
    • 1회에 한해 접속, 서비스 요청 및 서비스 응답이 수행되고 서로 간의 접속을 끊는다.
    • 서비스는 토픽과 달리 1회에 한해 접속하고, 서비스 요청 및 서비스 응답이 수행한 후
    • 서로 간의 접속을 끊는다. 즉, 1회성이다.

Name

  • 노드, 메시지 (Topic, Service, Action, Parameter) 를 가지는 고유의 식별자
  • ROS는 Graph라는 추상 데이터 형태(abstract data type)를 지원한다.
  • Global
    • 문자 없이 네임을 바로 쓰거나, 네임 앞에 “/”를 붙임
  • Private
    • 네임 앞에 틸트(~)를 붙임

좌표 변환 (TF, Transform)

  • 각 조인트(joint)들의 상대 좌표 변환
  • 트리 형태로 조인트들간의 관계도를 표시함

클라이언트 라이브러리 (Client Library)

  • 다양한 프로그래밍 언어 지원
    • ex) roscpp, rospy, roslisp, rosjava, roscs, rosgo 등

ROS 명령어

여기서 취소선이 그려진 것들은 그다지 잘 안 쓰이는 명령어라고 보면 된다.

ROS 셸 명령어

  • ★★★ roscd : 지정한 ROS 패키지의 디렉토리로 이동
  • ★ rosls : ROS 패키지의 파일 목록 확인
  • ★ rosed : ROS 패키지의 파일 편집
  • ★ roscp : ROS 패키지의 파일 복사
  • rospd : ROS 디렉토리 인덱스에 디렉토리 추가
  • rosd : ROS 디렉토리 인덱스 확인

ROS 실행 명령어

  • ★★★ roscore : master(ROS의 네임 서비스) 실행, rosout(로그 기록) 실행,
  • parameter server(파라미터 관리) 구동
  • ★★★ rosrun : 노드 실행
  • ★★★ roslaunch : 노드를 여러 개 실행 및 실행 옵션 설정
  • ★★ rosclean : ROS 로그 파일을 검사하거나 삭제

ROS 정보 명령어

  • ★★★ rostopic : ROS 토픽 정보 확인
  • ★★★ rosservice : ROS 서비스 정보 확인
  • ★★★ rosnode : ROS 노드 정보 확인
  • ★★★ rosparam : ROS 파라미터 정보 확인, 수정
  • ★★★ rosbag : ROS 메시지 기록, 재생
  • ★★ rosmsg : ROS 메시지 정보 확인
  • ★★ rossrv : ROS 서비스 정보 확인
  • ★ rosversion : ROS 패키지 및 배포 릴리즈 버전 정보 확인
  • roswtf : ROS 시스템 검사

ROS catkin 명령어

  • ★★★ catkin_create_pkg : 패키지 자동 생성
  • ★★★ catkin_make : catkin 빌드 시스템에 기반을 둔 빌드
  • ★★ catkin_eclipse : catkin 빌드 시스템으로 생성한 패키지를 eclipse에서 사용할 수 있게 변경
  • ★★ catkin_prepare_release : 릴리즈할 때 사용되는 로그 정리 및 버전 태깅
  • ★★ catkin_generate_chanelog : 릴리즈할 때 CHANGELOG.rst 파일 생성 또는 업데이트
  • ★★ catkin_init_workspace : catkin 빌드 시스템의 작업 폴더 초기화
  • ★ catkin_find : catkin 검색

ROS 패키지 명령어

  • ★★★ rospack : ROS 패키지와 관련된 정보 보기
  • ★★ rosinstall : ROS 추가 패키지 설치
  • ★★ rosdep : 해당 패키지의 의존성 파일 설치
    • rosdep install --from-paths src --ignore-src -r
  • roslocate : ROS 패키지 정보 관련 명령어
  • roscreate-pkg : ROS 패키지 자동 생성 (구 rosbuild 시스템에서 사용)
  • rosmake : ROS 패키지를 빌드 (구 rosbuild 시스템에서 사용)

ROS 도구

1. RViz (ROS Visualization Tool)

  • ROS의 3D 시각화툴
    • 센서 데이터의 시각화
    • 레이저 거리 센서(LDS)의 거리 데이터
    • RealSense, Kinect, Xtion 등의 Depth Camera의 포인트 클라우드 데이터
    • 카메라의 영상 데이터
    • IMU 센서의 관성 데이터
  • 로봇 외형의 표시와 계획된 동작을 표현
    • URDF (Unified Robot Description Format)
  • 내비게이션 (Navigation)
  • 매니퓰레이션 (Manipulation)
  • 원격 제어
  • 명령어
    • RViz 설치 : sudo apt install ros-noetic-rviz
    • RViz 실행 : rviz

2. RQT

  • ROS의 종합 GUI 도구
  • 유저들이 자유롭게 플러그인을 개발하여 추가 가능
  • 명령어
    • RQT 설치 : sudo apt install ros-kinetic-rqt ros-kinetic-rqi-common-plugins
    • RQT 실행 : rqt
  • RQT 플러그인
    1. 액션 (Action)
      • Action Type Browser : Action 타입의 데이터 구조를 확인
    2. 구성 (Configuration)
      • Dynamic Reconfigure : 노드들에서 제공하는 설정값 변경을 위한 GUI 설정값 변경
      • Launch : roslaunch의 GUI 버전
    3. 내성 (Introspection)
      • Node Graph : 구동중인 노드들의 관계도 및 메시지의 흐름을 확인 가능한 그래프 뷰
      • Package Graph : 노드의 의존 관계를 표시하는 그래프 뷰
      • Process Monitor : 실행중인 노드들의 CPU 사용률, 메모리 사용률, 스레드 수 등을 확인
    4. 로깅 (Logging)
      • Bag : ROS 데이터 로깅
      • Console : 노드들에서 발생되는 경고 (Warning), 에러 (Error) 등의 메시지를 확인
      • Logger Level : ROS의 Debug, Info, Warn, Error, Fatal 로거 정보를 선택하여 표시
    5. 다양한 툴 (Miscellaneous Tools)
      • Python Console : 파이썬 콘솔 화면
      • Shell : 쉘을 구동
      • Web : 웹 브라우저를 구동
    6. 로봇 (Robot)
      • 사용하는 로봇에 따라 계기판 (Dashboard) 등의 플러그인을 이곳에 추가
    7. 로봇툴 (Robot Tools)
      • Controller Manager : 컨트롤러 제어에 필요한 플로그인
      • Diagnostic Viewer : 로봇 디바이스 및 에러 확인
      • Moveit! Monitor : 로봇 팔 계획에 사용되는 Moveit! 데이터를 확인
      • Robot Steering : 로봇 조정 GUI 툴, 원격 조정에서 이 GUI 툴을 이용하여 로봇 조종
      • Runtime Monitor : 실시간으로 노드들에서 발생되는 에러 및 경고를 확인
    8. 서비스 (Services)
      • Service Caller : 구동중인 서비스 서버에 접속해 서비스를 요청
      • Service Type Browser : 서비스 타입의 데이터 구조를 확인
    9. 토픽 (Topics)
      • Easy Message Publisher : 토픽을 GUI 환경에서 발행
      • Topic Publisher : 토픽을 생성해 발행
      • Topic Type Browser : 토픽 타입의 데이터 구조 확인
      • Topic Monitor : 사용자가 선택한 토픽의 정보를 확인
    10. 시각화 (Visualization)
      • Image View : 카메라의 영상 데이터를 확인
      • Navigation Viewer : 로봇 네비게이션의 위치 및 목표 지점 확인
      • Plot : 2차원 데이터 플롯 GUI 플러그인, 2차원 데이터의 도식화
      • Pose View : 현재 TF의 위치 및 모델의 위치 표시
      • RViz : 3차원 시각화 툴인 RViz 플러그인
      • TF Tree : TF 관계를 트리로 나타내는 그래프 뷰

3. Gazebo

  • 로봇 개발에 필요한 3차원 시뮬레이션을 위한 로봇, 센서, 환경 모델 등을 지원
  • 물리 엔진을 탑재해 실제와 근사한 결과를 얻을 수 있는 3차원 시뮬레이터
  • 최근에 나온 오픈 진영 시뮬레이터 중 가장 좋은 평가를 받고 있음
  • DARPA Robotics Challenge의 공식 시뮬레이터로 선정
  • ROS와의 호완성이 매우 좋음
반응형