ROS2 기초 1: 터틀심으로 기본 명령어 익히기

Seohyun·2024년 11월 15일
0

정리

목록 보기
9/9

RMW (ROS 미들웨어)

DDS

DDS란

  • 분산
  • 데이터 통신 미들웨어, 운영체제와 사용자 애플리케이션 사이
  • 실시간, QoS, 보안, TCP or UDP, 임베디드시스템, 노드 간 동적 검색

메시지 통신

토픽서비스액션
연속성연속성일회성복합
방향성단방향양방향양방향
동기성비동기동기동기+비동기
다자간 연결1:11:1
노드 역할퍼블리셔, 서브스크라이버서버, 클라이언트서버, 클라이언트
동작트리거퍼블리셔클라이언트클라이언트
인터페이스msg인터페이스srvaction
CLI 명령어ros2 topic, ros2 interfaceros2 service, ros2 interfaceros2 action, ros2 interface
센서데이터, 로봇상태, 로봇좌표, 로봇 속도명령 등LED제어, 모터토크 on/off, IK\FK계산, 이동경로 계산 등목적지로 이동, 물건파지, 복합태스크 등
  • 통신 방법에 따라
    • 토픽: publisher-subscriber, 비동기 단방향 송수신, 1대다/1대1/다대1, 셀프subscribe, 주기적/항시 통신 시 사용
    • 서비스: client-server, 동기식 양방향 송수신, 한 서버에 여러 클라이언트
    • 액션: 액션서버들 (1. action client: 액션 goal 지정 2. feedback: 액션 수행 중 중간값 전송 3. result: 최종 결괏값) 간 통신, 비동기식/동기식 양방향 메시지 송수신
    • 파라미터: 모든 노드가 가짐, 노드의 파라미터 서버를 통해 외부 파라미터 클라이언트와 통신해 노드 매개변수를 set get
  • Integer, Floating point, Boolean, String, 메시지 내 메시지, 배열

명령어

RQt (ROS 종합 GUI툴)

  • 화살표: 메시지 방향
  • 사각형: 토픽이나 액션
  • 원: 노드
  • 서비스는 순간적으로 사용되는 형식이라 표시 안 됨
rqt_graph
  • 퍼블리시/서브스크라이브 노드가 없으면 토픽이 안 보임
    -> Dead sinks, Leaf topics 해제

패키지 리스트

ros2 pkg list

터틀심 패키지 노드 실행

ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key

노드

: 최소 단위의 실행 가능한 프로세스

  • 노드 간 의존성 줄이고 독립성 높여 노드 재사용할 수 있도록 구성
  • 실행
    • 한 개 노드: ros2 run 패키지 노드
    • 여러 개 노드: ros2 launch 패키지 노드 노드
    • 노드 이름 지정: ros2 run turtlesim turtlesim_node __node:=new_turtle
    • 지정된 명령어: rqt, rqt_graph, rviz2
  • 노드 목록: ros2 node list
  • 노드 정보:ros2 node info /turtlesim

토픽

  • 토픽 목록 (데이터형태): ros2 topic list -t
  • 정보 확인: ros2 topic info /turtle1/cmd_vel
  • 토픽 내용 확인: ros2 topic echo
    linear:
    x: 1.0
    y: 0.0
    z: 0.0
    angular:
    x: 0.0
    y: 0.0
    z: 0.0
    -> linear.x 값이 1.0m/s
  • 토픽 대역폭 (토픽 메시지 크기): ros2 topic bw /turtle1/cmd_vel
  • 토픽 주기: ros2 topic hz /turtle1/cmd_vel
    average rate: 33.212
    -> 33.2Hz, 0.03초에 한 번 토픽을 퍼블리시
  • 토픽 레이턴시: ros2 topic delay /TOPIC_NAME
  • 토픽 퍼블리시: ros2 topic pub 옵션 토픽이름 메시지형 "메시지 내용"
    예: ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"
    • --once: 단 한 번의 퍼블리시만을 수행
    • --rate 1: 지속적인 퍼블리시 (1Hz)
bag: 토픽을 파일 형식으로 저장했다 불러와 동일한 주기로 재생 가능
  • bag 기록하기: ros2 bag record 옵션 토픽이름1 토픽이름2 ...
    • 기록 종료 (ctrl+c) 시 rosbag2_날짜-시간 폴더 생성
    • -o 이름으로 폴더 이름 설정
  • bag 정보: ros2 bag info 폴더/
  • bag 재생: ros2 bag play 폴더/

서비스

  • 서비스 목록: ros2 service list -t
    • 'parameters' 가 붙은 서비스는 파라미터와 관련, 모든 노드가 가짐
  • 서비스 형태 확인: ros2 service type /clear
  • 서비스 찾기: ros2 service find std_srvs/srv/Empty
  • 서비스 요청: ros2 service call 서비스이름 서비스형태 "요청 내용"
    • ros2 service call /clear std_srvs/srv/Empty -> 거북이 그림 클리어
    • ros2 service call /kill turtlesim/srv/kill "name: 'turtle1'" -> turtle1의 이름을 가진 거북이 삭제
    • ros2 service call /reset std_srvs/srv/Empty -> 새 거북이 생성
    • ros2 service call /turtle1/set_pen turtlesim/srv/SetPen "{r: 255, g: 255, b: 255, width: 10}"
    • ros2 service call /spawn turtlesim/srv/Spawn "{x: 5.5, y: 7, theta: 1.57, name: 'raffaello'}"
      • 이름 지정 안 해주면 turtle 뒤 숫자 자동배정

액션

  • 액션 목록: ros2 action list -t
  • 액션 결과는 노드 실행 & 뭔가 하면 [INFO]: Rotation goal completed succesfully 처럼 뜸
  • 액션 정보: ros2 action info /turtle1/rotation_absolute
  • 액션 goal 전달: ros2 action send_goal 액션이름 액션형태 "목푯값"
    ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute "{theta: 1.5708}"
    -> Sending goal: theta: 1.5708, Goal accepted with ID: {ID}, Result: delta: -1.552...

인터페이스

: 토픽, 서비스, 액션 사용할 때 쓰는 데이터 형태

  • IDL (Interface Definition Language)
    • 토픽: msg
    • 서비스: srv
    • 액션: action interface
  • 단순자료형 기반
    메시지 형태를 인터페이스 파일 내 fieldtype fieldname 으로 정의
    예: Vector3.msg 내용
    float64 x
    float64 y
    float64 z
  • 메시지 인터페이스
    ros2 interface show geometry_msgs/msg/Twist
    • show: 현재 개발 환경의 모든 msg, srv, action 보여줌
    • packages: msg, srv, action 인터페이스 가진 모든 패키지 보여줌
    • package: 해당 패키지에 포함된 인터페이스 보여줌
  • 서비스 인터페이스
    ros2 interface show turtlesim/srv/Spawn.srv
float32 x
float32 y
float32 theta
string name  요청
---  요청과 응답을 구분
string name 응답
  • 액션 인터페이스
    ros interface show turtlesim/action/RotateAbsolute.action
float32 theta 목표
---
float32 delta 결과
---
float32 remaining 피드백
msg 인터페이스srv 인터페이스action 인터페이스
확장자msgsrvaction
데이터토픽 데이터서비스 요청, 응답액션 목표, 결과, 피드백

파라미터

  • 목록 확인 (노드별 목록): ros2 param list
  • 파라미터 내용 확인: ros2 param describe 파라미터
  • 파라미터 읽기: ros2 param get 노드이름 파라미터이름
  • 파라미터 쓰기: ros2 param set 노드이름 파라미터이름 값
  • 파라미터 저장: ros2 param dump 노드 -> 현재 경로에 노드 이름.yaml로 저장됨
  • 노드 실행 시 파라미터 가져와 쓰기: ros2 run turtlesim turtlesim_node --ros-args --params-file ./turtlesim.yaml
  • 파라미터 삭제: ros2 param delete 노드이름 파라미터
profile
Hail hamster

0개의 댓글