Notice
Recent Posts
Recent Comments
Link
반응형
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

인공지능 요모조모

[ROS2] 기초 개념 (1) 본문

ROKEY/ROS2

[ROS2] 기초 개념 (1)

dvl.hyeon_ 2025. 4. 23. 18:20
반응형

ROS1 vs ROS2

  ROS1 ROS2
통신 방식 자체 TCP/UDP 프로토콜
(ROS Master 필요)
DDS 기반의 분산 통신
(Middleware 사용, Master 없음)
멀티 플랫폼 리눅스 중심 리눅스, 윈도우, macOS, RTOS 등 지원
실시간성 실시간성 미지원 실시간성 고려 가능 (RTOS 호환)
보안 보안 미지원 DDS 보안 설정 가능
멀티 노드 실행 단일 머신에 최적화 네트워크 기반의 분산 시스템 최적화
빌드 시스템 catkin (CMake 기반) ament (CMake, Python 등 다양한 확장성)

ROS2 Interface

▪️노드 간 데이터를 주고받을 때 사용되는 데이터의 형태

▫️역할: .msg, .srv, .action 파일을 정의하는 전용 패키지
▫️목적: 토픽, 서비스, 액션 노드 간의 통신을 위해 데이터 구조 정의
💥일반적으로 다른 패키지에서 재사용할 수 있도록 인터페이스만 따로 분리

  토픽 서비스 액션
연속성 연속성 일회성 복합적(토픽+서비스)
방향성 단방향 양방향 양방향
동기성 비동기 동기 동기 + 비동기
다자간 연결 1:1, 1:N, N:1, N:N
(publisher : subscriber)
1:1
(server : client)
1:1
(server : client)
노드 역할 발행자
구독자
서버
클라이언트
서버
클라이언트
동작 트리거 발행자 클라이언트 클라이언트
인터페이스 msg 인터페이스 srv 인터페이스 action 인터페이스
CLI 명령어 ros2 topic
ros2 interface
ros2 service
ros2 interface
ros2 action
ros2 interface

✔️메시지 인터페이스(msg)

▪️필드 타입과 필드 이름으로 구성

fieldtype1 fieldname1

fieldtype2 fieldname2

fieldtype3 fieldname3

 

ex)

$ ros2 interface show geometry_msgs/msg/Twist
Vector3 linear
Vector3 angular

✔️서비스 인터페이스(srv)

▪️요청(request) 메시지와 응답(response) 메시지로 구성, 대시(-)로 구분

# Request

float32 x

float32 y

float32 theta

string name

---

# Response

string name

 

ex)

$ ros2 interface show turtlesim/srv/Spawn.srv
float32 x
float32 y
float32 theta
string name
---
string name

 

✔️액션 인터페이스(action)

▪️액션 목표(goal), 액션 결과(result), 액션 피드백(feedback)으로 구성, 각각 대시(-)로 구분

# Goal

float32 theta

---

# Result

float32 delta

---

# Feedback

float32 remaining

 

ex)

$ ros2 interface show turtlesim/action/RotateAbsolute.action
float32 theta
---
float32 delta
---
float32 remaining

✔️ROS 내장 자료형

내장 자료형
built-in type의 배열 정의도 가능


Package(패키지) 설계

✔️패키지 생성

$ mkdir -p ~/ros2_ws/src # 워크스페이스와 src 디렉토리 생성

$ cd ros2_ws/src # 워크스페이스 내 src 폴더로 이동

$ ros2 pkg create 패키지명 --build-type ament_python # 또는 ament_cmake

 

✔️디렉토리 구성

✔️생성된 패키지 내 코드 작성(python or c++)

 

✔️실행 설정 파일 수정

▪️Python : setup.py + package.xml
▫️setup.py에서 실행할 스크립트를 entry point에 등록
▫️package.xml에서 의존성(rclpy)등 설정

 

▪️C++ : CMakeLists.txt + package.xml
▫️CMakeLists.txt에서 add_executable() 및 install(TARGETS) 설정
▫️package.xml에 의존성 추가 (rclcpp, std_msgs 등)

 

✔️빌드(Build)

$ colcon build --packages-select 패키지명(파이썬) # 또는 패키지명(C++)

💥빌드 후에는 꼭 환경설정하기 : $ source install/setup.bash

 

✔️실행(Run)

$ ros2 run 패키지이름 실행파일이름


ROS 인터페이스 만들기

$ cd ros2_ws/src

$ ros2 pkg create ros_study_msgs --build-type ament_cmake

 

$ mkdir ~/ros2_ws/src/ros_study_msgs/{msg,srv,action} # msg, srv, action 폴더 각각 만들기

 

$ touch ~/ros2_ws/src/ros_study_msgs/msg/MyMsg.msg

+) 파일 내에서 메시지 타입과 이름 작성(ex. float32 num)

 

$ touch ~/ros2_ws/src/ros_study_msgs/srv/MySrv.srv

+) 파일 내에서 Request/Response 타입과 이름 작성

 

$ touch ~/ros2_ws/src/ros_study_msgs/action/MyAction.action

+) 파일 내에서 Goal/Result/Feedback 타입과 이름 작성

 

✔️package.xml 수정

 

▪️<buildtool_depend> : 패키지 빌드에 필요한 빌드 도구 지정

     ex) ament_cmake, ament_python, catkin

    💥인터페이스 패키지 빌드 시, IDL(Interface Definition Language) 생성에 필요한 rosidl_default_generators 추가 필요!

▪️<build_depend> : 패키지 빌드에 필요한 의존성

     ex) rclcpp, sensor_msgs, std_msgs

▪️<build_export_depend> : 다른 패키지에서 사용할 수 있게 내보낼 의존성

▪️<exec_depend> : 실행에 필요한 의존성

     ex) rclpy , rclcpp, sensor_msgs

    💥 IDL 생성에 필요한 builtin_interfaces, rosidl_default_runtime 추가 필요!

▪️<members_of_group> : 패키지가 특정 패키지 그룹(group)에 속해 있다고 명시

      ex) rosidl_interface_packages와 같은 공통 그룹

▪️<test_depend> : 테스트에만 필요한 의존성

     ex) ament_lint_auto, ament_cmake_gtest, pytest

 

예를 들어 사용자 정의 패키지가 std_msgs 메시지를 사용한다면!

<build_depend>std_msgs</build_depend>
<build_export_depend>std_msgs</build_export_depend>
<exec_depend>std_msgs</exec_depend>

 

✔️CMakeLists.txt 수정

 

▪️ set() : 변수 정의 또는 값 설정 시 사용하는 기본 함수

ex)

패키지명, 버전 등 정의, include 디렉토리 설정, 빌드 타겟용 소스 리스트, 빌드 옵션 등

set(action\_files "action/MyAction.action") 👉🏻 action 메시지 자동 생성을 위한 경로를 변수로 저장

 

✔️빌드(build)

$ cd ~/ros2_ws

$ colcon build --package-select ros_study_msgs

 

$ tree

build 결과

반응형

'ROKEY > ROS2' 카테고리의 다른 글

[ROS2] ROS2 CLI  (0) 2025.05.02
[ROS2] ROS2 Security  (0) 2025.05.02
[ROS2] ROS2 Lifecycle  (0) 2025.05.01
[ROS2] 기초 개념(2)  (0) 2025.04.23
[ROS2] BAG  (0) 2025.04.22