본문 바로가기

FOSCAR-(Autonomous Driving)/ROS 스터디

[2024 ROS 스터디] 안선영 #2주차 - ROS 명령어 및 도구

반응형

https://youtube.com/playlist?list=PLX-Ur4rl2-qwNB3cD5UAGo-RPe5IBw1pu&feature=shared

 

2024 ROS 스터디 2주차

 

www.youtube.com

 

2주차에는 위 강의들을 보고 진행을 하였다.

2주차 강의들은 Chapter4. ROS의 중요컨셉, Chapter5. ROS 명령어, Chapter6. ROS 도구로 이루어져 있다


Chapter4. ROS의 중요컨셉

1. ROS 용어

  • Node : 최소 단위의 실행 가능한 프로세서. 각 노드는 메시지 통신으로 데이터를 주고 받는다.
  • Package : 하나 이상의 노드, 노드 실행을 위한 정보 등을 묶어 놓은 것.
  • Message : 메시지를 통해 노드간의 데이터를 주고받게 된다. (형태 : integer, floating, point, boolean)

  • Topic : 단방향, 연속성을 가진 통신방법 중 하나
  • Publisher : 메세지를 보낸다.
  • Subscriber : 메세지를 받는다.

 

  • Service : 양방향, 일회성 통신방법
  • Service server : 서비스 응답
  • Service client : 서비스 요청

 

  • Action : 중간 피드백이 있다. 주로 복잡한 테스크를 할 때, action을 사용함
  • Action server : 액션 피드백(중간결과) 전달, 액션 결과 전달
  • Action client : 액션 목표 전달

 

2. 메시지 통신 개념

---------------------

  • 마스터 : 노드 정보 관리 / 마스터 구동 -> $ roscore
  • 서브스크라이버 노드 : 정보 구독 / 서브스크라이버 노드 구동 -> $ rosrun 패키지이름 노드이름
  • 퍼블리셔 노드 : 정보 발행 / 퍼블리셔 노드 구동 -> $ rosrun 패키지이름 노드이름

 

  • 퍼블리셔 정보 알림 : 마스터는 서브스크라이버 노드에게 새로운 퍼블리셔 정보를 알린다.
  • 퍼블리셔 노드에 접속 요청 : 마스터로부터 받은 퍼블리셔 정보를 이용하여 TCPROS 접속을 요청
  • 서브스크라이버 노드에 접속 응답 : 접속 응답에 해당되는 자신의 TCP URI 주소와 포트번호를 전송
  • TCP 접속 : TCPROS를 이용하여 퍼블리셔 노드와 직접 연결
  • 메시지 전송 : 발행자 노드는 서브스크라이버 노드에게 메시지를 전송 (토픽)
  • 서비스 요청 및 응답 : 1회에 한해 접속, 서비스 요청 및 서비스 응답이 수행되고 서로간의 접속을 끊는다.

 

  • ex) turtlesim 패키지

      1주차에서 한 turtlesim 실습을 예시로 보면 위 그림과 같다.

 

3. ROS 메시지

  • 토픽, 서비스, 액셕은 모두 메시지를 사용
  • 단순 자료형
  • 메시지 안에 메시지를 품고 있는 간단한 데이터 구조
  • 메시지들이 나열된 배열과 같은 구조

 

4. Name

  • 노드, 메시지 가지는 고유의 식별자
  • 글로벌(global) : 문자 없이 네임을 바로 쓰거나 네임 앞에 슬래쉬(/)를 붙인다
  • 프리베이트(private) : 네임 앞에 틸트(~)를 붙인다

 

Chapter5. ROS 명령어

 

1. ROS 셸 명령어

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

2. ROS 실행 명령어

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

3. ROS 정보 명령어

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

4. ROS catkin 명령어

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

5. ROS 패키지 명령어

  • rospack : ROS 패키지와 관련된 정보 보기
  • rosinstall : ROS 추가 패키지 설치
  • rosdep : 해당 패키지의 의존성 파일 설치
  • roslocate : ROS 패키지 정보 관련 명령어
  • roscreate-pkg : ROS 패키지 자동 생성
  • rosmake : ROS 패키지를 빌드

 

Chapter6. ROS 도구

1. Rviz

  • ROS의 3D 시각화툴
  • 로봇 외형의 표시와 계획된 동작을 표현
  • 내비게이션
  • 매니퓰레이션 받을 수 없습니다. 아마도 apt-get update를 실행해야 하거나 --fix-missing 옵션을 줘서 실행해야 할 것입니다.
    ahnsunyoung@ahnsunyoung-ThinkPad-X1-Carbon-Gen-8:~$ 

  • 원격 제어

 

  • Rviz 설치 : $ sudo apt-get install ros-noetic-rviz (나는 noetic 버전이여서 noetic으로 설치를 진행하였다)(이미 설치되어 있음)

Rviz 설치

  • Rviz 실행 : 한쪽 터미널에 $ roscore 를 실행하고, 다른 터미널에 $ rviz를 실행한다.

Rviz 실행

 

 

2. RQT

  • 플러그인 방식의 ROS의 종합 GUI 툴
  • 대표적인 플러그인 : rqt_image_view, rqt_graph, rqt_plot, rqt_bag

 

  • RQT 설치 : $ sudo apt-get install ros-noetic-rqt ros-noetic-rqt-common-plugins (설치가 안된다면 sudo apt-update를 해보자)(이미 설치되어 있음)

RQT 설치

  • RQT 실행 : $ rqt

rqt 실행

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

turtlesim rqt_graph

 

3. Gazebo

  • 물리 엔진을 탑재하여 실제와 근사한 결과를 얻을 수 있는 3차원 시뮬레이터

 

 


이렇게 ROS 명령어 및 도구에 대해 알아보았다.

 

다음 시간에는 ROS 프로그래밍에 대해 공부할 것이다.

 

 

 

 

 

반응형