본문 바로가기

FOSCAR-(Autonomous Driving)/ROS 스터디

[2024 ROS 스터디] 정성진 #2주차 - ROS 명령어 및 도구

반응형

2주차 스터디 내용으로 3개의 강의 chapter 4. ROS의 중요컨셉, chapter 5. ROS 명령어, chapter 6. ROS 도구를 수강하였다.

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

 

2024 ROS 스터디 2주차

 

www.youtube.com

 

[chapter 4 ROS의 중요 컨셉]

-ROS 용어-

Node - 최소 단위의 실행 가능한 프로세서를 말한다.

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

Message - 메시지를 이용하여 노드간의 데이터를 주고 받는다.

Topic - 단방향, 연속성을 가진 통신 방법 중 하나.(1:1 통신 이외에도  목적에 따라1:N, N:1, N:N 통신도 가능하다)

Publisher - message를 보내는 주체

Subscriber - message를 수신하는 주체

 

Service - 양방향, 일회성 통신 방법 (다시 통신하기 위해서는 재접속을 해야함)

Service server - service 응답을 하는 주체

Service client - service 요청을 하는 주체

 

Action - 중간 피드백이 있는 특징을 가짐, 복잡한, 장시간 걸리는 테스크를 수행할 때 종종 사용함.

Action server - Action 피드백, 결과 전달 

Action clinet - Action 목표 전달

 

-메시지 통신-

메시지 통신은 아래 그림과 같은 동작을 수행한다. 자세한 내용은 아래에서 다루겠다.

마스터 - 각 실행 되는 노드 정보들을 관리하여 노드들의 통신을 관리하는 역할을 함. ($roscore)

서브스크라이버 노드 - 수신 노드, 노드의 이름, Topic의 이름, 정보의 형태, 네트워크 정보등을 마스터에게 전송함. ($rosrun)

퍼블리셔 노드 - 송신 노드, 노드의 이름, Topic의 이름, 정보의 형태, 네트워크 정보등을 마스터에게 전송함.($rosrun)

 

퍼블리셔 정보 알림 - 마스터를 통해 서브스크라이버 노드에 퍼블리셔 노드의 정보를 보낸다.

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

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

TCP 접속 - TCPROS를 이용하여 퍼블리셔 노드와 직접 연결

메시지 전송 - 퍼블리셔 노드는 서브스크라이버 노드에게 메시지를 전송(Topic)

서비스 요청 및 응답 - 1회에 한해 전속, 서비스 요청 및 서비스 응답이 수행되고 서로간의 접속을 끊는다.

 

예시로 turtlesim package의 경우는 아래와 같다.

 

-ROS 메시지-

메시지 통신은 토픽, 서비스, 액션, 파라미터라고 말할 수 있다.

토픽, 서비스 액션은 모두 메세지를 사용한다.

단순 자료형이다.(integer, floating point, boolean)

메시지 안에 메시지를 품고 있는 단순한 데이터 구조이다.

메시지들이 나열된 배열과 같은 구조이다.

 

예시로 아래는 geometry_msgs/Twist에 해당하는 그림이다.

 

-네임(Name)-

노드, 메시지(토픽, 서비스, 액션, 파라미터)가 가지는 고유의 식별자.

ROS는 그래프라는 추상 데이터 형태를 지원.

글로벌(global) - 문자 없이 네임을 바로 쓰거나 네임 앞에 /를 붙인다.

프리베이트(private) - 네임 앞에 ~를 붙인다.

 

[chapter 5 ROS 명령어]

ROS 셸 명령어

roscd - changes directory, 지정한  ROS 패키지의 디렉터리로 이동

rosls - lists flies, ROS 패키지의 파일 목록 확인

rosed - editor, ROS 패키지의 파일 편집

roscp - copies files, ROS 패키지의 파일 복사

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

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

 

ROS 실행 명령어

roscore - master(ROS 네임 서비스), rosout(로그 기록), parameter server(파라미터 관리) 3가지 기능 모두 수행

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_eclipse - 캐킨 빌드 시스템으로 생성한 패키지를 이클립스에서 사용할 수 있게 변경

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

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

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

catkin_find - 캐킨 검색

 

ROS 패키지 명령어

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

rosinstall - ROS 추가 패키지 설치

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

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

roscreate-pkg - ROS 패키지 자동 생성

rosmake - ROS 패키지를 빌드

 

 

[chapter 6 ROS 도구]

RViz

-ROS의 3D시각화 툴

-로봇 외형 표시와 동작을 표현

-내비게이션

-매니퓰레이션

-원격 제어

아래는 RViz로 로봇이 활동하는 공간을 모델링 한 예시이다.

 

RViz 설치 및 실행

$sudo apt-get install ros-kinetic-rviz 명령어를 통해 RViz를 설치해주고, 

$rivz 명령어를 통해 아래와 같이 RViz를 실행시켜 보았다.

아래 그림은 Rivz화면 구성을 간략하게 나타낸 그림이다.

Rviz를 이용하면 센서 및 로봇 관련 데이터 시각화가 매우 편리하다.

 

RQT

플러그인 방식의 ROS의 종합 GUI툴

$sudo apt-get install ros-kinetic-rqt ros-kinetic-rqt-commom-plugins 명령어를 이용하여  RQT를 설치 및 실행 시켜보았다.

다음은 RQT에 대한 간단한 실습 예시이다.

이전 시간에 실습했던 turtlesim을 통한 rqt_graph 명령어를 이용해 노드간에 어떤 메시지를 주고 받는지 확인해보았다. 

이는 아래 그림과 같다. 노드가 많아 졌을 때 유용하다.

아래는 $rqt_plot /turtle1/pose/ 명령어를 이용하여 하여 거북이의 움직임을 그래프로 그리는 것이다.

RQT를 이용하면 GUI 형태로 ROS 이용이 가능하고, GUI Tool 제작이 간단해진다.

 

3D Simulator: Gazebo

로봇 개발에 필요한 3차원 시뮬레이션을 위한 로봇, 센서, 환경 모델 등을 지원하고 물리 엔진을 탑재하여 실제와 근사한 결과를 얻을 수 있는 3차원 시뮬레이터이다. ROS와 연동하기 쉽다는 장점도 있다.

아래는 Gazebo 예시이다.

반응형