ROS #13 CLI

남생이·2024년 10월 14일

ROS

목록 보기
13/28

1. ROS 도구

1.1 CLI 기반 Command-Line Tools

CLI(command line interface)

  • 명령어 기반의 툴로 로봇 액세스 및 거의 모든 ROS 기능을 다룸
  • 개발환경 및 빌드, 테스트 툴 --> colcon
  • 데이터를 기록, 재생, 관리하는 툴(ros2bag)
  • 그 외 20여 가지

1.2 ROS2 CLI 명령어

ros2 [verbs] [sub-verbs] [options] [arguments]
  • verbs: 동작을 지정하며, 수행할 작업의 유형을 나타냄 --> run, topic, service etc...

  • sub-verbs: 특정 동작에 대한 세부 동작을 지정, --> verbs=topic일 경우 pub, echo, list 등이 올수 있음

  • options: 명령어의 시행 방식을 설정하는 추가 파라미터

  • arguments: 실행할 때 필요한 인수를 지정, 특정 노드의 이름이나 토픽의 이름, 서비스 이름 등이 올 수 있음

  • -h 옵션을 이용하면 verbs, sub-verbs, option 등에 대하여 더 자세히 알 수 있음
    --> $ ros2 -h


1) ROS2 CLI + arguments

2) 정보 명령어 - ROS2 CLI + sub_verbs


3) ROS2 CLI + verbs + sub_verbs



  • ros2 run
    - 특정 패키지의 특정 노드를 실행하는 명령어
$ ros2 run <pkg name> <node_name>

  • ros2 pkg
    - 지정 패키지의 정보를 얻거나 패키지를 생성하는 데 사용되는 명령어
$ ros2 pkg create <pkg_name> --build-type ament_python/cmake --dependencies rclpy/rclcpp std_msgs ... # pkg 빌드

$ ros2 pkg executables <pkg_name> # 패키지에 포함된 실행 파일 목록을 확인

$ ros2 pkg list # 설치된 패키지 및 본인이 직접 작성한 패키지 중 사용 가능한 모든패키지의 목록을 확인

$ ros2 pkg prefix <pkg_name> # 패키지의 저장 위치를 확인

$ ros2 pkg xml <pkg_name> # 패키지의 xml파일 확인




  • ros2 node
    - 노드의 정보를 얻는데 사용하는 명령어
$ ros2 node list # 실행중인 모든 노드의 목록을 확인
$ ros2 node info /<node_name> # node의 노드 정보 확인


  • ros2 topic
    - 토픽의 구성, 대역폭, 지연 시간, 인터페이스 형태 등의 정보를 얻거나 특정 토픽을 송신 및 수신하는데 사용되는 명령어
$ ros2 topic bw /<topic_name>               # 토픽의 대역폭 사용량을 확인
$ ros2 topic echo /<topic_name>             # 토픽의 메시지를 출력
$ ros2 topic find <interface_name>          # 특정 인터페이스 타입의 토픽을 찾음
$ ros2 topic hz /<topic_name>               # 토픽의 퍼블리싱 주기를 확인 (Hz)
$ ros2 topic info /<topic_name>             # 토픽의 정보 확인 (타입, 퍼블리셔/구독자 수 등)
$ ros2 topic list                           # 현재 사용 가능한 모든 토픽 나열
$ ros2 topic list -t                        # 토픽과 해당 타입을 함께 나열
$ ros2 topic pub /<topic_name> <interface_name> '{<argument>}' --once    # 한 번만 토픽에 메시지 퍼블리시
$ ros2 topic pub /<topic_name> <interface_name> '{<argument>}' --rate 1  # 1Hz로 주기적으로 퍼블리시



  • ros2 service
    - 서비스의 정보를 얻거나 직접 서비스 요청을 테스트
$ ros2 service call /<service_name> <interface_name> '{<arguments>}'  # 특정 서비스 호출, 인수를 JSON 형식으로 전달
$ ros2 service find <interface_name>                                  # 특정 인터페이스 타입을 사용하는 서비스 찾기
$ ros2 service list                                                   # 현재 사용 가능한 모든 서비스 나열
$ ros2 service list -t                                                # 서비스와 해당 타입을 함께 나열
$ ros2 service type /<service_name>                                   # 특정 서비스의 인터페이스 타입 확인


  • ros2 action
    - 액션의 정보를 얻거나 직접 액션 목표 전달을 테스트
$ ros2 action info /<action_node>                                   # 특정 액션 서버에 대한 정보를 확인
$ ros2 action list                                                  # 현재 사용 가능한 모든 액션 서버 나열
$ ros2 action list -t                                               # 액션 서버와 해당 타입을 함께 나열
$ ros2 action send_goal /<action_node> <interface_name> '{<arguments>}'  # 지정한 액션 서버에 목표(goal)를 JSON 형식으로 전송


  • ros2 interface
    - 토픽/서비스/액션에서 사용하는 인터페이스의 정보를 얻는데 사용되는 명령어
$ ros2 interface list                    # 현재 사용 가능한 모든 인터페이스 타입(Srv, Msg, Action)을 나열
$ ros2 interface package <pkg_name>      # 패키지에서 제공하는 인터페이스를 나열
$ ros2 interface packages                # 인터페이스를 제공하는 모든 패키지를 나열
$ ros2 interface proto <interface_name>  # 지정한 인터페이스의 프로토타입(Proto) 내용을 출력 (IDL 파일 형식)
$ ros2 interface show <interface_name>   # 지정한 인터페이스의 구조(필드 및 타입)를 출력


  • ros2 param
    - 파라미터의 정보를 확인하고 파라미터를 설정하거나 읽어오는 등의 일을 수행하는 명령어
$ ros2 param list   # 현재 실행 중인 모든 노드의 파라미터를 나열
$ ros2 param get <node_name> <parameter> # 지정한 노드에서 특정 파라미터의 값을 가져옴
$ ros2 param set <node_name> <parameter> <value> # 지정한 노드의 특정 파라미터 값을 설정
$ ros2 param describe <node_name> <parameter> # 특정 노드의 파라미터에 대한 설명(형태, 목적, 인터페이스 형태, 최소/최댓값)을 확인
$ ros2 param delete <node_name> <parameter>  # 지정한 노드에서 특정 파라미터를 삭제
$ ros2 param dump /<node_name> # 지정한 노드의 모든 파라미터를 YAML 형식으로 저장, 특정 이름을 지정하지 않으면 지정한 노드 이름으로 파일 생성


  • ros2 bag
    - 토픽을 저장하거나 재생할 때 사용하는 명령어
$ ros2 bag record -o <file_name> <topic> # 특정 토픽의 데이터를 <file_name> 이름으로 기록
$ ros2 bag record -o <file_name> -a      # 모든 토픽의 데이터를 <file_name> 이름으로 기록
$ ros2 bag info <file_name>              # 기록된 bag 파일의 정보(저장된 토픽, 메시지 수 등)를 확인
$ ros2 bag play <file_name>              # 기록된 bag 파일의 데이터를 재생하여 토픽에 퍼블리시


  • ros2 extensions
    - ros2cli 개발용으로 사용되는 명령어, ROS2 CLI에 추가할 수 있는 확장 목록을 보여주고 관리하는 역할
  • ros2 extensions_points
    - ros2cli 개발용으로 사용되는 명령어, ROS2 CLI에 추가할 수 있는 확장 목록을 보여주고 관리하는 역할
$ ros2 extensions # 현재 설치된 extension의 간단한 목록 표시
$ ros2 extensions -a # 로드에 실패하거나 호환되지 않는 extension 표시
$ ros2 extension_points # 현재 사용 가능한 extension_points 목록을 표시

  • ros2 daemon
    - ros2 도구들의 빠른 실행을 위해 도입된 툴
    - 주로 백그라운드에서 실행되는 프로그램이나 프로세스, 노드들을 발견하고 연결하는 역할
    - 명령 실행 시 시스템 자원을 절약하고 실행 시간을 단축
$ ros2 daemon start
$ ros2 daemon status
$ ros2 daemon stop


  • ros2 multicast
    - ROS2 DDS 테스트용으로 나온 명령어
    - Multicast 송/수신 테스트에 사용함
$ ros2 multicast receive # 단일 udp 멀티 캐스트 패킷 수신
$ ros2 multicast send # 단일 udp 멀티 캐스트 패킷 송신


  • ros2 doctor
    - ROS2 설정 및 네트워크, 패키지 버전, RMW 등과 같은 ROS2 개발환경 문제를 확인하는 명령어
$ ros2 doctor hello # 네트워크 연결 확인
$ ros2 doctor -r # report, 체크한 모든 아이템 확인
$ ros2 doctor -rf # report-fail, 체크 시 실패한 아이템 확인
$ ros2 doctor -iw # include-warnings, 경고성 아이템 확인

아래는 turtlesim을 실행후 doctor-iw를 실행한 결과


  • ros2 wtf(where's the fire)
    - doctor와 같음
$ ros2 wtf hello
$ ros2 wtf -r
$ ros2 wtf -rf
$ ros2 wtf -iw

  • ros2 lifecycle
    - 노드의 수명주기를 관리하는 명령어
    - Unconfigured, Inactive, Active, Finalized로 구분
    상태설명
    Unconfigured노드가 초기화되지 않은 상태, 노드가 자원을 할당, 초기화하는 작업을 수행하지 않음
    Inactive노드가 초기화되었지만 활성화되지 않음, 노드는 자원을 할당하고 준비하지만 실제로 데이터를 처리하거나 외부와 상호작용하지 않음
    Active노드가 활성화된상태, 데이터 처리 및 메시지 발행/구독과 같은 작업을 수행하지 못함
    Finalized노드가 종료된 상태, 노드가 자원을 해제하고 모든 작업을 마무리
# 실행 중인 노드의 라이프사이클 상태 가져오기
# <node_name>을 원하는 노드의 이름으로 변경하여 실행합니다.
ros2 lifecycle get <node_name>

# 특정 노드의 라이프사이클 상태 및 전이 가능 상태 목록 확인
# <node_name>을 원하는 노드의 이름으로 변경하여 실행합니다.
ros2 lifecycle list <node_name>

# 현재 ROS 2 시스템에 있는 모든 노드와 그들의 라이프사이클 상태 목록 확인
ros2 lifecycle nodes

# 특정 노드를 'configure' 상태로 전환
# <node_name>을 원하는 노드의 이름으로 변경하여 실행합니다.
ros2 lifecycle set <node_name> configure

업로드중..


  • ros2 component
    - 실행 중인 컨테이너와 컴포넌트 목록을 확인, 실행, 중지 할 수 있는 명령어
# 실행 중인 컴포넌트 목록 출력
ros2 component list

# 특정 컴포넌트를 로드하기 위한 명령어
# <component_name>을 로드하고자 하는 컴포넌트의 이름으로 변경합니다.
ros2 component load / <component_name>

# 현재 실행 중인 컴포넌트를 독립 실행형으로 실행
# <component_name>을 독립 실행형으로 실행하고자 하는 컴포넌트의 이름으로 변경합니다.
ros2 component standalone <component_name>

# 사용 가능한 컴포넌트 타입 목록 출력
ros2 component types

# 특정 컴포넌트를 언로드하기 위한 명령어
# <component_name>을 언로드하고자 하는 컴포넌트의 이름으로 변경합니다.
ros2 component unload <component_name>


  • ros2 security
    - SROS(security ros)의 유틸리티
    - DDS-Security를 ROS2에서 사용하기 위해 필요한 것을 모아둔 것
    # 보안키 저장소 생성
    $ ros2 security create_keystore demo_keystore
    # 보안키 생성
    $ ros2 security create_enclave demo_keystore /talker_listener/talker
    $ ros2 security create_enclave demo_keystore /talker_listener/listener
    # 환경 변수 선언(default 값 선언)
    $ export ROS_SECURITY_KEYSTORE=~/ros_study/turtle/demo_keystore
    $ export ROS_SECURITY_STRATEGY=Enforce
    $ export ROS_SECURITY_ENABLE=true


  • alias
    - § 홈 폴더(~/)의 .bashrc 파일에 자주 사용하는 ROS 2 CLI 명령어를 단축 명령어로 지정해 두면 특정 ROS 2 CLI를 빠르게 실행 가능
      
profile
공부하는 거북이

0개의 댓글