#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
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
$rostopic list - 현재 전송되거나 등록된 topic 볼 수 있음
$rostopic echo 토픽이름 - 그 토픽 전송되고 있는 메시지 실시간 확인
$rostopic info 토픽이름 - 정보 확인 (퍼블리셔 서브스크라이버)
3. 3D simulator : Gazebo
Gazebo - 로봇 개발에 필요한 3차원 시뮬레이션을 위한 로봇, 센서, 환결모델 등을 지원하고 물리 엔진을 탑재하여 실제와 근사한 결과를 얻을 수 있는 3차원 시뮬레이터
'FOSCAR-(Autonomous Driving) > ROS 스터디' 카테고리의 다른 글
[2024 ROS 스터디] 곽우인 #3주차 - ROS 기본 프로그래밍 (1) | 2024.07.17 |
---|---|
[2024 ROS 스터디] 이연수 #2주차 - ROS 용어 및 도구 (0) | 2024.07.14 |
[2024 ROS 스터디] 초라핀스카 베로니카 #2주차 - ROS에서 쓰이는 용어 및 도구 (0) | 2024.07.13 |
[2024 ROS 스터디] 곽우인 #2주차 - ROS에서 쓰이는 용어와 도구 (0) | 2024.07.12 |
[2024 ROS 스터디] 반제호 #2주차 - ROS의 컨셉과 RViz (0) | 2024.07.12 |