본문 바로가기

FOSCAR-(Autonomous Driving)/ROS 스터디

[2024 ROS 스터디] 김기태 #2주차 - ROS의 중요컨셉&명령어와 도구

반응형

#ROS의 컨셉

Node - 최소 단위의 실행 가능한 프로세스, ROS에서 최소한의 실행단위로 프로그램을 나누어 작업함, 각 노드는 메세지 통신으로 데이터를 주고 받음, 유닛 테스트에 용이함, 오픈된 Node를 공유하며 개발할 수 있음.

Package - 하나 이상의 Node, Node 실행을 위한 정보 등을 묶어 놓은 것, 패키지의 묶음을 메타페키지라 하여 따로 분리함, 패키지와 패키지 끼리 공유하고 있는 Node가 있을 수도 있음. 

Message - 메세지를 통해 Node간의 데이터를 주고 받음, integer/floating/point/boolean 같은 변수 형태

 

Message를 목적에 따라서 분류할 수 있음 

1. Topic - 단방향, 연속성을 가진 메세지 통신, Publisher  - 메세지를 전송하는 노드, Subscriber - 메세지를 전송받는 노드,  목적에 따라서 1:1/1:N/N:1/N:N 통신도 가능함.

2. Service - 양방향, 일회성을 가진 메세지 통신, Service client가 서비스를 요청하고 Service server가 서비스를 응답함. 한번 주고받음으로 끝남(일회성). 

3. Action - 양방향, 피드백을 가진 메세지 통신, Action client가 액션 목표를 전달하고 Action server가 피드백(중간결과)를 전달하다가 마지막으로 액션 결과를 전달함. 복잡한 task에서 쓰임.

대부분은 Topic를 쓰고, 그 다음으로 Service, Action은 많이 쓰이진 않음.

 

Message 통신 개념

1. 마스터 구동 - $roscore (노드 정보 관리, 노드들을 매칭해줌)

2. 서브스크라이버 노드 구동 - $rosrun  패키지이름 노드이름 (노드의 정보를 전송, 노드이름, 토픽이름, 어떤 메세지 형태를 보낼건지, IP번호, 포트번호)

3. 퍼블리셔 노드 구동 - $rosrun 패키지이름 노드이름

4. 퍼블리셔 정보 알림 - 서브스크라이버 노드에게 새로운 퍼블리셔 정보를 알림

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

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

7. TCP접속 - TCPROS를 이용해 퍼블리셔노드와 직접 연결

8. 메시지 전송 - 서브스크라이버 노드에게 메시지 전송(토픽), 서비스 요청 및 응답 수행

 

ROS Message

메시지는 노드 간에 데이터를 주고 받을 때 사용하는 데이터의 형태

Names - 노드, 메시지가 가지는 고유이 식별자, ROS는 graph라는 추상 데이터 형태 지원

TF - 각 joint들의 상대 좌표 변환

Client Library - 다양한 프로그래밍 언어를 지원함.

이기종 디바이스 간의 통신

 

#ROS 명령어

1. Command-Line Tools - rospack, roscd, rospd, rosls, roscore, rosrun, rostopic 등...

2. 셸 명령어 - roscd(지정한 패키지 디렉터리로 이동), rosls(패키지의 파일 목록 확인), rosed(패키지 파일 편집), roscp(패키지의 파일 복사), rospd(디렉터리 인덱스에 디렉터리 추가), rosd(디렉터리 인덱스 확인) 

3. 실행 명령어 - roscore(master, rosout, parameter server), rosrun(노드 실행), roslaunch(노드를 여러개 실행, 실행 옵션 설정), rosclean(로그 파일 검사하거나 삭제)

4. 정보 명령어 - rostopic(토픽정보확인), rosservice(서비스 정보 확인), rosnode(노드 정보 확인), rosparam, rosbag, rosmsg(메세지 정보 확인), rossrv, rosversion, roswtf

5. catkin 명령어(ROS의 컴파일 빌드 관련 시스템) - catkin_create_pkg(패키지 자동 생성), catkin_make, ....

6. 패키지 명령어 - rospack(패키지 관련 정보 보기), rosinstall(추가 패키지 설치), rosdep, roslocate, roscreate_pkg, rosmake

 

wiki.ros.org에서 다양한 명령어들에 대한 설명을 볼 수 있다. 

 

#ROS 도구

1.RViz

1) RViz(ROS Visualization Tool) - 3차원 시각화 툴, 센서 데이터의 시각화, LDS(레이저 거리 센서)의 거리 데이터, Depth Camera의 포인트 클라우드 데이터, 영상 데이터, IMU센서의 관성 데이터 등.. 

센서 및 로봇 관련 데이터 시각화가 매우 간단함.

URDF(Unified Robot Description Format) 로봇의 모델링 표현, 네비게이션, 매니퓰레이션, 원격제어

2) RViz 설치 - $sudo apt-get install ros-noetic-rviz

3) RViz 실행 - $rosrun rviz rviz 또는 $rviz

RViz 실행 화면
RViz 디스플레이 종류
디스플레이 추가 화면

2.RQT(플러그인 방식의 ROS의 종합 GUI툴)

1) RQT 설치 - $ sudo apt-get install ros-noetic-rqt ros-noetic-rqt-common-plugins

2) RQT 실행 - $ rqt

3) RQT 실습 - rqt_graph

 

rqt 실행 후 rqt_graph를 확인

$rostopic list - 현재 전송되거나 등록된 topic 볼 수 있음

$rostopic echo 토픽이름 - 그 토픽 전송되고 있는 메시지 실시간 확인

$rostopic info 토픽이름 - 정보 확인 (퍼블리셔 서브스크라이버)

 

3. 3D simulator : Gazebo

Gazebo - 로봇 개발에 필요한 3차원 시뮬레이션을 위한 로봇, 센서, 환결모델 등을 지원하고 물리 엔진을 탑재하여 실제와 근사한 결과를 얻을 수 있는 3차원 시뮬레이터 

반응형