1. ROS 용어 정리
- 가장 중요한 용어 : Node / Package / Message
1) Node - ROS의 대표적인 개념
- 최소 단위의 실행 가능한 프로세서
- 하나의 실행 가능한 프로그램
- 각 노드는 메시지 통신으로 데이터를 주고 받음
2) Package
- 하나 이상의 노드, 노드 실행을 위한 정보 등을 묶어 놓은 것
- 패키지의 묶음은 메타패키지라 하여 따로 분리
3) Message
- 메시지를 통해 노드간의 데이터를 주고 받음
- 메시지는 integer / floating / point / boolean과 같은 변수 형태
- 메시지 안 메시지를 품고있는 간단한 데이터 구조 및 메시지들의 배열과 같은 구조로 활용 가능
3-1) Topic : 단방향 연속성을 가진 통신 방법
- Publisher : 메시지를 보내는 노드
- Subscriber : 메시지를 받는 노드
- 통신은 1:1이 기본이고 N:1 , 1: N으로도 활용 가능
- 통신 방법 중 90%를 차지
3-2) Service : 양방향 1회성 성질을 가진 통신 방법
- Service server : 메시지를 보내는 노드
- Service client : 메시지를 받는 노드
- 양방향 통신 방법이므로 각 노드가 두개의 성질을 모두 지님
3-3) Action : 중간에 피드백을 보내는 통신 방법
- Action server : 액션 피드백 전달 및 액션 결과 전달
- Action client : 액션 목표 전달
- 중간중간 결과를 알고 싶을 때 사용
2. 메시지 통신
통신의 개요를. ROS 용어 정리
- 가장 중요한 용어 : Node / Package / Message
1) Node - ROS의 대표적인 개념
- 최소 단위의 실행 가능한 프로세서
- 하나의 실행 가능한 프로그램
- 각 노드는 메시지 통신으로 데이터를 주고 받음
2) Package
- 하나 이상의 노드, 노드 실행을 위한 정보 등을 묶어 놓은 것
- 패키지의 묶음은 메타패키지라 하여 따로 분리
3) Message
- 메시지를 통해 노드간의 데이터를 주고 받음
- 메시지는 integer / floating / point / boolean과 같은 변수 형태
- 메시지 안 메시지를 품고있는 간단한 데이터 구조 및 메시지들의 배열과 같은 구조로 활용 가능
3-1) Topic : 단방향 연속성을 가진 통신 방법
- Publisher : 메시지를 보내는 노드
- Subscriber : 메시지를 받는 노드
- 통신은 1:1이 기본이고 N:1 , 1: N으로도 활용 가능
- 통신 방법 중 90%를 차지
3-2) Service : 양방향 1회성 성질을 가진 통신 방법
- Service server : 메시지를 보내는 노드
- Service client : 메시지를 받는 노드
- 양방향 통신 방법이므로 각 노드가 두개의 성질을 모두 지님
3-3) Action : 중간에 피드백을 보내는 통신 방법
- Action server : 액션 피드백 전달 및 액션 결과 전달
- Action client : 액션 목표 전달
- 중간중간 결과를 알고 싶을 때 사용
2. 메시지 통신
통신의 개요를 그림으로 나타내면 다음과 같다.
1) 마스터 구동 : XMLRPC(XML-Remote Procedure Call)
- $roscore
- 네트워크를 끄지 않는 이상 무조건 한번 실행 시키기
- 노드 정보들을 관리
- 노드들의 통신을 관리하여 연결
2) 서브스크라이버 노드 구동
- $rosrun <패키지이름 노드이름>
ex) rosrun turtlesim turtlesim_node
- 실행되자마자 마스터에 정보 송신
- 노드이름, 토픽이름, 메시지 형태, IP번호, 포트 번호
3) 포블리셔 노드 구동
- $rosrun <패키지이름 노드이름>
ex) rosrun turtlesim turtlesim_teleop_key
- 노드이름, 토픽이름, 메시지 형태, IP번호, 포트 번호
4) 퍼블리셔 정보 알림
- 마스터는 서브스크라이버 노드에 새로운 퍼블리셔 정보 제공
5) 퍼블리셔 노드에 접속 요청
- 마스터로부터 받은 퍼블리셔 정보를 이용하여 TCPROS 접속 요청
6) 서브스크라이버 노드에 접속 응답
- 접속 응답에 해당되는 자신의 TCP URI 주소와 포트 번호를 전송
7) TCP 접속
- TCPROs를 이용하여 퍼블리셔 노드와 직접 연결 8) 메시지 전송
- 퍼블리셔 노드는 서브스크라이버 노드에 메시지 전송(토픽)
8) 메시지 전송
- 퍼블리셔 노드는 서브스크라이버 노드에 메시지 전송(토픽)
9) 서비스 요청 및 응답
- 1회에 한해 접속, 서비스 요청 및 서비스 응답이 수행되고 서로간의 접속 중단
3. 메시지
- 메시지 통신 : 토픽 / 서비스 / 액션 / 파라미터
- ROS 메시지
- 메시지는 노드 간의 데이터를 주고받을 대 사용하는 데이터 형태
- 토픽, 서비스, 액션은 모두 메시지를 사용
- 단순 자료형
- 메시지 안에 메시지를 품고있는 간단한 데이터 구조
ex) geometry_msgs/PoseStamped
- 메시지들이 나열된 배열과 같은 구조
4. 네임
- 노드, 메시지가 가지는 고유의 식별자
- Ros는 그래프라는 추상 데이터 형태 지원
- 글로벌
- 문자 없이 네임을 바로 쓰거나 네임 앞에 슬래쉬(/)를 붙임
- 프리베이트
- 네임 앞에 틸트(~)를 붙임
5. 좌표 변환(TF)
- 각 조인트들의 상대 좌표 변환
- 트리 형태로 조인트들간의 관계도를 표시함
6. 클라이언트 라이브러리
- 다양한 프로그래밍 언어 지원
- roscpp, rospy, roslisp ...etc
ROS 명령어
1. ROS 명령어 정리
- ROS Command Line Tools
- roscore, rosrun ... etc
2. ROS 쉘 명령어
- ★★★ roscd : 지정한 ROS 패키지의 디렉터리로 이동
- ★ rosls : ROS 패키지의 파일 목록 확인
- ★ rosed : ROS 패키지의 파일 편집
- ★ roscp : ROS 패키지의 파일 복사
- rospd : ROS 디렉터리 인덱스에 디렉터리 추가
- rosd : ROS 디렉터리 인덱스 확인
3. ROS 실행 명령어
- ★★★ roscore : master(ros 네임 서비스) 실행, rosout(로그 기록) 실행, parameter server(파라미터 관리) 구동
- ★★★ rosrun : 노드 실행
- ★★★ roslaunch : 노드를 여러개 실행 및 시랳ㅇ 옵션 설정
- ★★ rosclean : ros 로그 파일을 검사하거나 삭제
4. ROS 정보 명령어
- ★★★ rostopic : ROS 토픽정보 확인
- ★★★ rosservice : ROS 서비스 정보 확인
- ★★★ rosnode : ROS 노드 정보 확인
- ★★★ rosparam : ROS 파라미터 정보 확인, 수정
- ★★★ rosbag : ROS 메시지 기록, 재생
- ★★ rosmsg : ROS 메시지 정보 확인
- ★★ rossrv : ROS 서비스 정보 확인
- ★ rosversion : ROS 패키지 및 배포 릴리즈 버전 정보 확인
- roswtf : ROS 시스템 검사
5. ROS catkin 명렁어
- ★★★ catkin_create_pkg : 패키지 자동 생성
- ★★★ catkin_make : 캐킨 빌드 시스템에 기반을 둔 빌드
- ★★ catkin_eclipse : 캐킨 빌드 시스템으로 생성한 패키지를 이클립스에서 사용할 수 있게 변경
- ★★ catkin_prepare_release : 릴리즈할 때 사용되는 로그 정리 및 버전 태깅
- ★★ catkin_generate_chanelog : 릴리즈할 때 CHANGELOG.rst 파일 생성 또는 업데이트
- ★★ catkin_init_workspcae : 캐킨 빌드 시스템의 작업 폴더 초기화
- ★ catkin_find : 캐킨 검색
6. ROS 패키지 명령어
- ★★★ rospack : ROS 패키지와 관련된 정보 보기
- ★★ rosinstall : ROS 추가 패키지 설치
- ★★ rosdep : 해당 패키지의 의존성 파일 설치
- roslocate : ROS 패키지 정보 관련 명령어
- roscreate-pkg : ROS 패키지 자동 생성 (구 rosbuild 시스템에서 사용)
- rosmake : ROS 패키지를 빌드 (구 rosbuild 시스템에서 사용)
ROS 도구
1. Rviz
- ROS의 3D 시각화툴
- 센서 데이터의 시각화
- 레이저 거리 센서의 거리 데이터
- RealSense, Kinect, Xtion 등의 Depth Camera의 포인트 클라우드 데이터
- 3차원 공간에서 거리값을 점으로 나타내서 데이터 저장
- 카메라의 영상 데이터
- IMU 센서의 관성 데이터
- 로봇 외형의 표시와 계획된 동작을 표현
- URDF
- 내비게이션 / 매니퓰레이션 / 원격 제어
1) Lidar
- 레이저 기반 센서
- 2D 거리 센서
2) 초음파 센서
- 방사형 형태로 나감
- 범위도 Rviz에서 확인 가능
- 해상도가 떨어짐
- 정확한 거리 확인은 어려움
3) IMU
- 관성 측정
4) RealSense
- Intel의 Depth Camera
- Depth 정보 확인 가능
- 정상 카메라 기능 탑재
5) 내비게이션
- 위치 이동에서 장애물 정보, 경로 정보 등이 표현
6) 매니퓰레이션
- 로봇암 표현 가능
- 로봇암 경로 데이터 저장 및 재생 가능
○ Rviz
- 1) 3D 뷰
- 설정한 뷰가 출력
- 2) 디스플레이 옵션
- 설정한 디스플레이가 출력
- 시각화 옵션을 선택
- 디스플레이 종류
- xyz축, camera, DepthCloud, Efort , ... etc
- 3) 메뉴
- 역할이 많이 없음
- 4) 툴
- 많이 사용되지 않음
- 5) 뷰 형태
- 뷰의 축 설정
- 6) 시간
- ROS 시간과 실제 시간 등을 표시
- Rviz를 사용하면 센서 및 로봇 관련 데이터 시각화가 매우 간단해짐
2. ROS GUI 개발 도구 (rqt)
- 플러그인 방식의 ROS의 종합 GUI 툴
- ROS Fuerte 버전부터는 rqt라는 이름으로 통폐합되어 ROS의 종합 GUI 툴로써 사용 가능
- rqt는 Qt로 개발되어 유저들이 자유롭게 플러그인을 개발하여 추가할 수 있음
- RQT 플러그인
1) Action / 액션
- Action Type Browser : Action 타비의 데이터 구조를 확인
2) Configuration / 구성
- Dynamic Reconfigure : 노드들에서 제공하는 설정값 변경을 위한 GUI tjfwjdrkqt qusrud
- Launch : roslaunch의 GUI 버전
3) Introspection / 내성
- Node Graph : 구동중인 노드들의 관계도 및 메시지의 흐름을 확인 가능한 그래프 뷰
- Package Graph : 노드의 의존 관계를 표시하는 그래프 뷰
- Process Monitor : 실행중인 노드들의 CPU 사용률, 메모리 사용륭, 스레드 수 등을 확인
4) Logging / 로깅
- Bag : ROS 데이터 로깅
- Console : 노드들에서 발생되는 경고, 에러 등의 메시지를 확인
- Logger Level : ROS의 Debug, Info, Warn, Error, Fatal 로거 정보를 선택하여 표시
5) Miscellaneous Tools / 다양한 툴
- Python Console : 파이썬 콘솔 화면
- Shell : 쉘을 구동
- Web : 웹 브라우저를 구동
6) Robot / 로봇
- 사용하는 로봇에 따라 계기판 등의 플러그인을 이곳에 추가
7) Robot Tools / 로봇 툴
- Controller Manager : 컨트롤러 제어에 필요한 플로그인
- Diagnostic Viewer : 로봇 디바이스 및 에러 확인
- Moveit! Monitor : 로봇 팔 계획에 사용되는 Moveit! 데이터를 확인
- Robot Steering : 로봇 조정 GUI 툴, 원격 조정에서 이 GUI 툴을 이용하여 로봇 조종
- Runtime Monitor : 실시간으로 노드들에서 발생되는 에러 및 경고를 확인
8) Service / 서비스
- Service Caller : 구동중인 서비스 서버에 접속하여 서비스를 요청
- Service Type Browser : 서비스 타입의 데이터 구조를 확인
9) Topics / 토픽
- Easy Message Publisher : 토픽을 GUI 환경에서 발행
- Topic Publisher : 토픽을 생성하여 발행
- Topic Type Browser : 토픽 타입의 데이터 구조 확인
- Topic Monitor : 사용자가 선택한 토픽의 정보를 확인
10) Visualization / 시각화
- Image View : 카메라의 영상 데이터를 확인
- Navigate Viewer : 로봇 네비게이션의 위치 및 목표지점 확인
- Plot : 2차원 데이터 플롯 GUI 플러그인, 2차원 데이터의 도식화
- Pose View : 현재 TF의 위치 및 모델의 위치 표시
- Rviz : 3차원 시각화 툴인 Rviz 플러그인
- TF Tree : TF 관계를 트리로 나타내는 그래프 뷰
3. 3D Simluator Gazebo - ROS 사용에 추천할만한 시뮬레이터. ROS와 연동하기 용이
- 로봇 개발에 필요한 3차원 시물레이션을 위한 로봇, 센서, 환경 모델 등을 지원하고 물리 엔진을 탑재하여 실제와 근사한 결과를 어등ㄹ 수 있는 3차원 시뮬레이터
- 좋은 평가
- DARPA Robotics Challenge의 공식 시뮬레이터
- ROS와의 호환성이 매우 좋음
- Gazebo 특징
1) 물리엔진 사용 가능
2) Advanced 3D Graphic을 구동 가능
- OGR을 사용하여 해상도가 높음
3) Camera, Depth 등등의 센서가 기본 탑재
4) 유저가 플러그인 형태로 기능 추가 가능
5) TCP/IP Transport으로 통신 지원
6) Cloud Simulation
'FOSCAR-(Autonomous Driving) > ROS 스터디' 카테고리의 다른 글
[2025 ROS 스터디] 이성빈 #2주차 - ROS용어,명령어,도구 (0) | 2025.01.19 |
---|---|
[2025 ROS 스터디] 신채영 #1주차 - ROS 개요 및 설치 (0) | 2025.01.17 |
[2025 ROS 스터디] 홍동형 #1주차 - ROS소개 (0) | 2025.01.16 |
[2025 ROS 스터디] 황희찬 #1주차 (0) | 2025.01.16 |
[2025 ROS 스터디] 이동규 #1주차 : ROS 스터디 전 개요 (1) | 2025.01.16 |