ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • _ROS1_기본 내용
    ROS/ROS1 2023. 10. 1. 22:35

    ROS(Robot Operating System)는 여러개의 NodeMaster로 이루어져 있으며 Node들이 Master중재를 받아서 메시지를 주고 받는 형태이다.

    ROS의 Master와 Node

     

    이와 같은 구조를 가진 이유는 로봇과 센서가 개발되는 회사가 다르기 때문에 각 하드웨어 및 소프트웨어를 쉽게 연결할 수 있기 때문이다.

    ROS에서의 통신은 topic의 publish & subscribe 기반의 메시지 교환이다.

    ROS의 통신

    이와 같은 구조를 가졌기 때문에 OS가 다르더라도 메시지를 교환할 수 있다는 장점을 가진다.

    ROS의 이기종간 통신

    각 하드웨어 및 소프트웨어 모듈에 Node가 하나씩 할당되고 각 Node들은 OS의 도움을 받아서 하드웨어 장치를 제어할 수 있다.

    그럼 지금까지 나온 기본 용어들을 정리해보자.


    1. Master

    • 서로 다른 노드들 사이의 통신을 총괄 관리한다.
    • 마스터가 없다면 노드들은 정보교환을 할 수 없다.
    • 반드시 하나의 마스터가 실행되어야 한다.
    • 'roscore'라 불리며 마스터, 파라미터서버, 로그 기능을 통합한 command tool이다.

     

    2. Nodes

    • 실행가능한 최소의 단위(프로세스)이다.
    • 다른 노드들과 topic, service, action등을 통해 통신할 수 있다.
    • Parameter Server에 데이터를 저장하거나 읽어올 수 있다.
    • 다양한 프로그램 언어를 지원한다.(대표적으로 C++, Python을 지원)
    • ROS에서 발생하는 통신(메시지 송/수신)의 주체이다.
    • HW장치, SW모듈에 대해 하나씩의 노드가 할당된다.
    • 모듈형 설계가 가능해서 각각 컴파일 및 실행 관리가 가능하다.

     

    3. Topics

    • 노드간의 단방향 통신을 할 때, 메시지를 담고 있는 제목이다.
    • 노드는 토픽을 publish하거나 subscribe할 수 있다.
    • 비동기 통신(Asynchronous transfer)이다.
    • 구성에 따라 N:N통신이 가능하다.

     

    4. Publishers

    • 특정 토픽에 메시지를 담아 외부로 송신하는 노드이다.
    • 대표적으로 센서, 카메라, 모터제어 알고리즘 등이 있다.

     

    5. Subscribers

    • 특정 토픽에 담긴 메시지를 수신하는 노드이다.
    • 대표적으로 액츄에이터 제어기, 데이터 시각화 도구 등이 있다.

     

    6. Packages

    • 하나 이상의 노드와 노드의 실행을 위한 정보 등을 묶어 놓은 단위이다.
    • 노드, 라이브러리, 데이터, 파라미터 등을 포함한다.

     


    ROS 노드간 통신 기본 과정

    1. 접속 정보 교환

    통신이 이루어지기 이전에 통신을 원하는 노드는 마스터에 연결해야 하는 노드의 정보(주소)를 얻어오고, 서로 접속정보를 교환한다.

    2. 통신

    통신 환경이 구축되면 마스터를 거치지 않고 노드간 통신이 이루어진다.

    ROS 노드간 통신의 두 가지 방식

    1. 토픽 방식의 통신

    • 일방적이고 지속적인 메시지 전송
    • 1:1, 1:N, N:N 통신도 가능하다.

    1:1 통신
    1:N 통신
    N:N 통신

     

    2. 서비스 방식의 통신

    • 양방향 통신, 일회성 메시지 송수신이 가능하다.
    • 서비스가 제공하는 서비스에 클라이언트가 요청을 보내고 응답을 받는다.

    서비스 통신

     

    ROS의 기본 명령어

    ROS  셀 명령어

    $ roscd # 지정한 ros 패키지 폴더로 이동
    $ rosls # ros 패키지 파일 목록 확인
    $ rosed # ros 패키지 파일 편집
    $ roscp # ros 패키지 파일 복사

     

    ROS 실행 명령어

    $ roscore   # master + rosout + parameter server
    $ rosrun    # 패키지 노드 실행
    $ roslaunch # 패키지 노드 여러 개 실행
    $ roscp     # ros 패키지 파일 복사

     

    ROS 정보 명령어

    $ rostopic   # 토픽 정보 확인
    $ rosnode    # 노드 정보 확인
    $ rosparam   # 파라미터 정보 확인, 수정
    $ rosbag     # 메시지 기록, 재생
    $ rosmsg     # 메시지 정보 확인
    $ rosversion # 패키지 및 배포 버전정보 확인
    $ roswtf     # ros 시스템 검사

     

    ROS catkin 명령어

    $ catkin_create_pkg      # catkin 빌드 시스템으로 패키지 생성
    $ catkin_make            # catkin 빌드 시스템으로 빌드
    $ catkin_eclipse         # 패키지를 eclipse에서 사용할 수 있게 변경
    $ catkin_prepare_release # changelog 정리 및 버전 태깅
    $ catkin_init_workspace  # catkin 빌드 시스템의 작업 폴더 초기화
    $ catkin_find            # 검색

     

    ROS package 명령어

    $ rospack       # 패키지 관련된 정보 보기
    $ rosinstall    # 추가 패키기 설치
    $ rosdep        # 해당 패키지의 의존성 파일 설치
    $ roslocate     # 패키지 정보 관련 명령어
    $ rosmake       # 패키지 빌드(구 시스템에서 사용)
    $ roscreate-pkg # 패키지 자동 생성(구 시스템에서 사용)

     

    'ROS > ROS1' 카테고리의 다른 글

    _ROS1_node_communication  (0) 2023.10.04
    _ROS1_roslaunch  (0) 2023.10.03
    _ROS1_package_pub&sub  (0) 2023.10.02
    _ROS1_설치_환경설정_기본실습  (0) 2023.10.01
    _ROS1_Robot Operating System  (0) 2023.09.27
Designed by Tistory.