* Ubuntu, WSL 등 환경 구성 설치 및 설정은 추후에 다루겠다.
ROS2 설치
Ubuntu (deb packages) — ROS 2 Documentation: Humble documentation
위 문서를 참고하여 Ubuntu ROS2 Humble을 설치한다.
Talker, Listener 확인
source /opt/ros/humble/setup.bash
ros2 run demo_nodes_cpp talker
# talker 실행
source /opt/ros/humble/setup.bash
ros2 run demo_nodes_py listener
# listener 실행
Talker에서 보내고 Listener를 통해 받는 것을 확인할 수 있다.
Graph 기능으로 시각적으로 어떻게 연결되어 있는지 확인 가능하다.
bashrc
Shell
Shell은 운영체제의 일부, PC가 실행된 이후 메모리에 상주하는 핵심 커널과 사용자 사이를 연결해 주는 프로그램
Ubuntu에서 사용하는 shell은 배쉬(bash)
~/.bashrc
Ubuntu의 Shell인 bash의 설정을 저장하는 파일 중 로그인한 사용자 별로 지정한 설정을 저장해 두는 파일이 .bashrc이며, 로그인 후 자동으로 실행된다.
ros2 run turtlesim turtlesim_node
거북이를 이용한 간단한 시뮬레이터에 해당한다.
ros2 run : ROS 2에서 실행 가능한 노드를 실행하기 위한 명령어
turtlesim : Turtlesim 패키지를 가리킨다.
turtlesim_node : Turtlesim 패키지에 포함된 실제 실행 가능한 노드(node)다.
위와 같이 거북이 기반 시뮬레이터가 실행되는 것을 확인할 수 있다.
ros2 node list
현재 실행중인 node list를 보여준다.
현재 Listener와 talker가 실행중에 있기 때문에 2개의 node가 보이는 것을 확인할 수 있다.
ros2 node info [실행중인 node]
=> ros2 node info /talker
Subscribers, Publishers, Service Servers, Service Clients, Action Servers, Action Clients와 같이 Node에 대한 정보를 알 수 있다.
Subscriber, Publisher
이 둘은 Topic 기반 통신에서 사용된다. 비동기 방식의 통신을 구현한다.
- Publisher
데이터를 발행하는 역할을 한다.
특정 토픽에 데이터를 발행하고 해당 토픽을 구독하고 있는 노드들이 데이터를 받을 수 있다.
Subscriber
데이터를 받는 역할을 한다.
특정 토픽을 구족하고, 그 토픽에서 발행된 데이터를 받는다.
Service Servers, Clients
서비스는 동기식 요청-응답 방식의 통신을 제공한다. 이를 통해 한 노드가 요청을 보내면, 다른 노드가 해당 요청에 대한 응답을 보낸다.
- Server
요청에 응답하는 역할을 한다. 즉, 클라이언트가 요청을 보내면 그에 맞는 작업을 수행하고 응답을 돌려준다.
- Client
서버에 요청을 보내는 역할을 한다. 서버에 특정 작업을 요청하고, 그 작업에 대한 결과를 기다린다.
동기식, 양방향 통신을 기반으로 한다.
Action Servers, Clients
긴 작업을 처리할 때 사용하는 통신 방식이다. Service와 비슷하지만, Action은 중간 결과를 보고하거나 작업이 완료되기까지 시간이 오래 걸리는 작업을 처리하기 위한 구조다.
- Server
긴 작업을 수행하는 서버다. 클라이언트가 작업을 요청하면, 그 작업의 상태를 중간 중간 보고하고
최종 결과를 반환한다.
- Client
긴 작업을 요청하는 클라이언트다. 클라이언트는 서버에게 작업을 요청하고,
작업이 완료되기를 기다리는 동안 진행 상태를 모니터링할 수 있다.
ROS2 Humble 사용법
이전에 bashrc에 위와 같이 별칭을 지정해놓았다.
source는 Bash에서 특정 스크립트 파일을 현재 Shell 세션에 로드하고 실행하는 역할을 한다.
source /opt/ros/humble/setup.bash
위 명령어를 실행해야 ROS2 Humble을 실행하는 데 필요한 여러가지 환경 변수를 현재 쉘 세션에 적용해준다.
alias를 통해 humble 명령어를 통해 ROS2 Humble 환경을 세팅한다.
Turtlesim_node 실행
ros2 node list 및 node 정보 확인
ROS Service
- 두개의 노드가 데이터를 주고 받는 방식
- 클라이언트가 서버에 요청하면 응답을 하는 방식
- 입력 또는 출력 데이터가 존재할 수 있다.
현재 상태에서 실행 가능한 Servie 목록을 보여준다.
ROS2 Service 사용
x, y 좌표와 각도에 대한 정보가 담겨 있는 것을 확인할 수 있다.
실행
ros2 service call [Service name] [Service definition] "data"
좌표와 각도를 Simulation에 적용
새로운 거북이 Spawn하는 명령어
Simulation 실행
Simulation이 실행되어 있으면 Service만 보내주면 Simulation 화면이 자동으로 바뀐다.
Service와 Service Call의 차이는 Service는 서비스를 제공하는 서버를 의미 Service Call은 Client가 그 Service에 요청을 보내는 행위를 의미
ROS Topic
Topic은 Publish와 Subscribe로 구성된다.
Topic은 한번만, 주기적으로 둘 다 발행이 가능하다.
ros2 topic list
Topic list를 확인
ros2 topic type /turtle1/pose
Turtlesim 실행 후 Topic List 조회 및 Type 확인
ros2 topic info /turtle1/pose
Topic은 Publish, Subscribe로 구성되어 있으며 info 명령어를 통해 확인 가능하다.
ros2 interface show turtlesim/msg/Pose
Turtle1이 발행하는 pose Topic 확인을 위해 turtlesim/msg/Pose 확인
linear : 선 방향
angular : 회전 방향
ros2 topic echo /turtle1/pose
ros2 topic list -t
Turtlesim 실행 예시
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: 0.0}}"
x로 2만큼 나머지는 그대로 이동하는 명령어에 해당한다.
!!! 띄어쓰기 주의할 것 (ex) x: 2.0 여기 사이도 띄워야 한다!!!)
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.0}}"
x축으로 2만큼 이동함과 동시에 z축 방향으로 1만큼 회전하는 명령어
ros2 topic pub --rate 1 /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.0}}"
--rate를 통해 주기적으로 명령을 반복 시킬 수 있다.
rqt_graph
Package 중 하나인 rqt_graph를 통해 Node의 상호 관계를 시각적으로 확인 가능하다.
ROS2 Action
Action은 Server와 Client로 구성된다.
Client에서 목표를 요청하면 목표를 달성할 때 까지 Topic으로 진행 상황에 대한 Feedback을 전송한다.
목표에 도달하면 결과를 전송한다.
* Service와 Action의 차이
1. Service
동기식 요청-응답 방식의 통신을 지원
2. Action
비동기식으로 긴 시간이 걸리는 작업을 처리하기 위한 통신
특징 | Service | Action |
통신 방식 | 동기식 | 비동기식 |
응답 | 요청에 대한 단일 응답 | 작업 중 피드백 제공 + 작업 완료 후 최종 결과 반환 |
작업 지속 시간 | 짧은 작업에 적합 | 긴 작업에 적합 |
작업 상태 확인 | 불가능 | 피드백을 통해 작업 진행 상황을 확인 가능 |
작업 취소 | 불가능 | 가능 |
예시 | 특정 좌표로 즉시 이동, 센서 값 요청 | 로봇이 경로를 따라 이동, 장시간 복잡한 계산 작업 |
'Embedded > ROS' 카테고리의 다른 글
ROS2 (6) - Class, 상속을 이용한 그래프 그리기 (pyplot, numpy) (0) | 2024.09.30 |
---|---|
ROS2 - (5) Python을 이용한 Topic, Service 구현 (0) | 2024.09.24 |
ROS2 - (4) Action, Parameter 이론 및 실습 (0) | 2024.09.23 |
ROS2 - (3) Topic, Service 이론 및 실습 (0) | 2024.09.23 |
ROS2 - (2) Message, DDS 이론 및 실습 (0) | 2024.09.23 |