반응형
1. ROS의 핵심 구성 요소
노드(Node)
- ROS에서 노드는 실행 가능한 독립적인 프로그램 단위로, 각 노드는 로봇의 특정 기능(예: 센서 입력, 모터 제어 등)을 담당한다.
- 일반적으로 하나의 로봇은 수십 개 이상의 노드로 구성되며, 각 노드는 서로 통신하여 협력한다.
패키지(Package)
- 패키지는 ROS에서 가장 기본적인 소스코드 단위로, 노드, 메시지, 서비스 정의, 실행 스크립트 등이 포함된다.
- 재사용성과 유지보수를 위해 관련 기능들을 하나의 패키지로 묶어 관리한다.
2. 노드 간 통신 구조
메시지(Message)와 토픽(Topic)
- 메시지는 노드 간에 주고받는 데이터 형식을 의미하며, 예를 들어 std msgs/String, sensor msgs/Image 등이 있다.
- 토픽은 메시지를 주고받는 채널로, 하나의 노드는 토픽에 퍼블리시(publish) 하거나, 해당 토픽을 서브스크라이브(subscribe) 할 수 있다.
- ROS의 토픽 기반 통신은 비동기적이며 다대다 통신이 가능하다.
서비스(Service)
- 서비스는 요청(request)과 응답(response) 구조로 이루어진 동기식 통신 방식이다.
- 예를 들어 로봇에게 특정 명령을 보내고 결과를 받아올 때 사용된다.
- 토픽과 달리 클라이언트-서버 관계를 명확히 가지며, 명령 실행과 결과 확인이 한 쌍으로 작동한다.
액션(Action)
- 액션은 서비스의 확장형으로, 긴 시간이 소요되는 작업(예: 로봇 팔의 이동, 경로 계획 등)에 적합하다.
- 피드백 메시지를 통해 중간 상태를 지속적으로 확인할 수 있고, 작업의 취소(cancel) 도 지원한다.
- 내부적으로는 여러 개의 토픽을 조합하여 동작한다.
3. ROS 마스터와 네트워크 구조
마스터(Master)
- ROS에서 마스터는 노드의 통신을 중개하는 등록 및 검색 서버 역할을 수행한다.
- 노드들은 마스터를 통해 서로의 정보를 등록하고, 상대 노드를 검색하여 직접 통신을 시작한다.
- 마스터가 있어야 전체 ROS 시스템이 올바르게 작동할 수 있다.
P2P 통신
- ROS의 데이터는 마스터를 경유하지 않고, 노드 간 직접 연결된 peer-to-peer 구조로 전달된다.
- 이는 네트워크 부하를 줄이고 실시간성을 확보하는 데에 유리하다.
4. 네임스페이스와 TF
네임스페이스(Namespace)
- 동일한 이름의 노드나 토픽이 존재할 수 있으므로, 이름 충돌을 방지하기 위해 계층 구조의 네임스페이스를 사용한다.
- 로봇이 여러 대 있는 경우 /robot1/cmd vel, /robot2/cmd vel처럼 각각의 노드나 토픽을 분리하여 관리할 수 있다.
TF (Transform)
- TF는 다양한 좌표계 간의 관계를 시간에 따라 기록하고 관리하는 도구이다.
- 로봇의 바디, 센서, 휠, 월드 좌표계 등 여러 프레임 간 변환 관계를 실시간으로 추적할 수 있다.
- 시각적으로 rqt tf tree, rviz 등을 통해 트리 구조로 확인 가능하며, 경로 추적, 위치 보정, 로봇 제어 등에 필수적으로 사용된다.
5.ROS 명령어 정리
1) ROS 실행 관련 명령어
- roscore: ROS 마스터 노드를 실행하여 전체 ROS 시스템을 초기화한다.
- rosrun [패키지명] [노드명]: 특정 패키지의 노드를 실행한다.
- roslaunch [패키지명] [런치파일명]: 런치 파일을 통해 여러 노드를 동시에 실행하거나 실행 옵션을 설정할 수 있다.
2) ROS 파일 시스템 명령어
- roscd [패키지명]: 지정한 ROS 패키지의 디렉토리로 이동한다.
- rosls [패키지명]: 지정한 ROS 패키지의 파일 목록을 확인한다.
- rosed [패키지명] [파일명]: 지정한 ROS 패키지의 파일을 편집한다.
- roscp [패키지명] [파일명] [목적지]: 지정한 ROS 패키지의 파일을 복사한다.
3) 노드(Node) 관련 명령어
- rosnode list: 현재 실행 중인 노드들의 목록을 표시한다.
- rosnode info [노드명]: 지정한 노드의 상세 정보를 확인한다.
- rosnode ping [노드명]: 지정한 노드와의 연결 상태를 확인한다.
- rosnode kill [노드명]: 지정한 노드를 종료한다.
4) 토픽(Topic) 관련 명령어
- rostopic list: 현재 사용 가능한 토픽들의 목록을 표시한다.
- rostopic echo [토픽명]: 지정한 토픽의 메시지를 실시간으로 출력한다.
- rostopic info [토픽명]: 지정한 토픽의 상세 정보를 확인한다.
- rostopic pub [토픽명] [메시지타입] [데이터]: 지정한 토픽에 메시지를 발행한다.
5) 서비스(Service) 관련 명령어
- rosservice list: 현재 사용 가능한 서비스들의 목록을 표시한다.
- rosservice info [서비스명]: 지정한 서비스의 상세 정보를 확인한다.
- rosservice call [서비스명] [인자]: 지정한 서비스에 요청을 보낸다.
6) 파라미터(Parameter) 관련 명령어
- rosparam list: 현재 설정된 파라미터들의 목록을 표시한다.
- rosparam get [파라미터명]: 지정한 파라미터의 값을 확인한다.
- rosparam set [파라미터명] [값]: 지정한 파라미터의 값을 설정한다.
- rosparam delete [파라미터명]: 지정한 파라미터를 삭제한다.
7) 메시지(Message) 및 서비스(Service) 타입 확인 명령어
- rosmsg list: 사용 가능한 메시지 타입들의 목록을 표시한다.
- rosmsg show [메시지타입]: 지정한 메시지 타입의 구조를 확인한다.
- rossrv list: 사용 가능한 서비스 타입들의 목록을 표시한다.
- rossrv show [서비스타입]: 지정한 서비스 타입의 구조를 확인한다.
8) 캐킨(Catkin) 명령어
- catkin_create_pkg: 새로운 ROS 패키지를 자동으로 생성한다.
- catkin_make: catkin 빌드 시스템을 사용하여 패키지를 빌드한다.
- catkin_eclipse: Eclipse에서 catkin 패키지를 사용할 수 있도록 설정을 변경한다.
- catkin_prepare_release: 릴리즈할 때 사용되는 로그 정리 및 버전 태깅을 수행한다.
- catkin_generate_changelog: 릴리즈 시 CHANGELOG.rst 파일을 생성하거나 업데이트한다.
- catkin_init_workspace: catkin 워크스페이스의 작업 폴더를 초기화한다.
- catkin_find: catkin 환경에서 지정한 패키지를 검색한다.
6. ROS 도구
1) RViz (ROS Visualization Tool)
- 설치: $ sudo apt install ros-<distro>-rviz
- 실행: $ rosrun rviz rviz 또는 $ rviz
- 주요 기능:
- 센서 데이터 시각화: LaserScan, PointCloud, 이미지 등
- 로봇 모델 시각화: URDF 기반의 로봇 모델 표시
- 네비게이션 및 매니퓰레이션 상태 표시
- 다양한 디스플레이 타입 추가 및 설정
2) RQT (ROS Qt-based GUI Tool)
- 설치: $ sudo apt install ros-<distro>-rqt ros-<distro>-rqt-common-plugins
- 실행: $ rqt
- 주요 플러그인:
- rqt_graph: 노드 간 통신 관계를 그래프로 시각화
- rqt_plot: 토픽 데이터를 실시간으로 그래프로 표시
- rqt_image_view: 이미지 토픽을 시각화
- rqt_bag: rosbag 파일을 GUI로 재생 및 분석
- rqt_console: 노드의 로그 메시지를 실시간으로 확인
- rqt_logger_level: 노드의 로그 레벨을 설정
3) rosbag
- 기능: ROS 토픽 데이터를 기록하고 재생하는 도구
- 주요 명령어:
- 기록: $ rosbag record -a (모든 토픽 기록)
- 재생: $ rosbag play <파일명.bag>
- 정보 확인: $ rosbag info <파일명.bag>
- 활용 예시:
- 센서 데이터 수집 및 분석
- 시뮬레이션 데이터 기록 및 재생
- 디버깅 및 테스트 자동화
4) Gazebo
- 기능: 3D 로봇 시뮬레이션 도구로, 물리 엔진을 통해 현실적인 로봇 동작을 시뮬레이션
- 설치: $ sudo apt install ros-<distro>-gazebo-ros-pkgs
- 실행: $ roslaunch <패키지명> <launch파일.launch>
- 주요 특징:
- 로봇 모델, 센서, 환경 구성
- 물리 기반 시뮬레이션
- ROS와의 연동을 통한 제어 및 데이터 수집
반응형
'FOSCAR-(Autonomous Driving) > ROS 스터디' 카테고리의 다른 글
[2025 ROS 스터디] 윤윤지 #2주차-중요 컨셉, 명령어, 도구 (0) | 2025.05.01 |
---|---|
[2025 ROS 스터디] 전예림 #3주차 - ROS 기본 프로그래밍 (0) | 2025.05.01 |
[2025 ROS 스터디] 전예림 #2주차 - 중요 컨셉, 명령어, 도구 (0) | 2025.04.30 |
[2025 ROS 스터디] 김승현 #3주차-ROS 기본 프로그래밍 (0) | 2025.04.29 |
[2025 ROS 스터디] 김승현 #2주차-ROS의 중요컨셉, 명령어, 도구 (0) | 2025.04.22 |