반응형
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와 비슷한 역할
- 중간 결과 (액션 피드백) 전달해준다는 점이 차이점
- 시간이 오래 걸린다는 단점 有
- 중간 결과가 필요한 복잡한 프로그램에서 사용
메시지 통신
- 마스터 구동
- XMLRPC(XML-Remote Procedure Call)
- 노드 정보 관리
- 명령어 : roscore
- Subscriber 노드 구동
- 명령어 : rosrun 패키지이름 노드이름
- 노드 정보 전송 (노드의 이름, 토픽의 이름, 메시지 형태, IP 번호, 포트번호)
- Publisher 노드 구동
- 명령어 : rosrun 패키지이름 노드이름
- 노드 정보 전송 (노드의 이름, 토픽의 이름, 메시지 형태, IP 번호, 포트번호)
- Publisher 정보 알림
- 마스터는 Subscriber 노드에게 새로운 Publisher 정보를 알린다.
- Publisher 노드에 접속 요청
- 마스터로부터 받은 Publisher 정보를 이용해 TCPROS 접속을 요청
- Subscriber 노드에 접속 응답
- 접속 응답에 해당되는 자신의 TCP URI 주소와 포트번호를 전송
- TCP 접속
- TCPROS를 이용해 Publisher 노드와 직접 연결
- 메시지 전송
- 발행자 노드는 Subscriber 노드에게 메시지를 전송 (토픽)
- 서비스 요청 및 응답
- 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 플러그인
- 액션 (Action)
- Action Type Browser : Action 타입의 데이터 구조를 확인
- 구성 (Configuration)
- Dynamic Reconfigure : 노드들에서 제공하는 설정값 변경을 위한 GUI 설정값 변경
- Launch : roslaunch의 GUI 버전
- 내성 (Introspection)
- Node Graph : 구동중인 노드들의 관계도 및 메시지의 흐름을 확인 가능한 그래프 뷰
- Package Graph : 노드의 의존 관계를 표시하는 그래프 뷰
- Process Monitor : 실행중인 노드들의 CPU 사용률, 메모리 사용률, 스레드 수 등을 확인
- 로깅 (Logging)
- Bag : ROS 데이터 로깅
- Console : 노드들에서 발생되는 경고 (Warning), 에러 (Error) 등의 메시지를 확인
- Logger Level : ROS의 Debug, Info, Warn, Error, Fatal 로거 정보를 선택하여 표시
- 다양한 툴 (Miscellaneous Tools)
- Python Console : 파이썬 콘솔 화면
- Shell : 쉘을 구동
- Web : 웹 브라우저를 구동
- 로봇 (Robot)
- 사용하는 로봇에 따라 계기판 (Dashboard) 등의 플러그인을 이곳에 추가
- 로봇툴 (Robot Tools)
- Controller Manager : 컨트롤러 제어에 필요한 플로그인
- Diagnostic Viewer : 로봇 디바이스 및 에러 확인
- Moveit! Monitor : 로봇 팔 계획에 사용되는 Moveit! 데이터를 확인
- Robot Steering : 로봇 조정 GUI 툴, 원격 조정에서 이 GUI 툴을 이용하여 로봇 조종
- Runtime Monitor : 실시간으로 노드들에서 발생되는 에러 및 경고를 확인
- 서비스 (Services)
- Service Caller : 구동중인 서비스 서버에 접속해 서비스를 요청
- Service Type Browser : 서비스 타입의 데이터 구조를 확인
- 토픽 (Topics)
- Easy Message Publisher : 토픽을 GUI 환경에서 발행
- Topic Publisher : 토픽을 생성해 발행
- Topic Type Browser : 토픽 타입의 데이터 구조 확인
- Topic Monitor : 사용자가 선택한 토픽의 정보를 확인
- 시각화 (Visualization)
- Image View : 카메라의 영상 데이터를 확인
- Navigation Viewer : 로봇 네비게이션의 위치 및 목표 지점 확인
- Plot : 2차원 데이터 플롯 GUI 플러그인, 2차원 데이터의 도식화
- Pose View : 현재 TF의 위치 및 모델의 위치 표시
- RViz : 3차원 시각화 툴인 RViz 플러그인
- TF Tree : TF 관계를 트리로 나타내는 그래프 뷰
- 액션 (Action)
3. Gazebo
- 로봇 개발에 필요한 3차원 시뮬레이션을 위한 로봇, 센서, 환경 모델 등을 지원
- 물리 엔진을 탑재해 실제와 근사한 결과를 얻을 수 있는 3차원 시뮬레이터
- 최근에 나온 오픈 진영 시뮬레이터 중 가장 좋은 평가를 받고 있음
- DARPA Robotics Challenge의 공식 시뮬레이터로 선정
- ROS와의 호완성이 매우 좋음
반응형
'FOSCAR-(Autonomous Driving) > ROS 스터디' 카테고리의 다른 글
[2025 ROS 스터디] 김승현 #3주차-ROS 기본 프로그래밍 (0) | 2025.04.29 |
---|---|
[2025 ROS 스터디] 김승현 #2주차-ROS의 중요컨셉, 명령어, 도구 (0) | 2025.04.22 |
[2025 ROS 스터디] 장우혁 #1주차 - ROS 소개 및 설치 (0) | 2025.04.10 |
[2025 ROS 스터디] <문승주> #1주차 - <ROS소개 및 설치> (0) | 2025.04.08 |
[2025 ROS 스터디] 윤윤지 # 1주차 - ROS 소개 및 설치하기 (0) | 2025.04.07 |