Cancel 테스트용 Action Client 만들기

1. Cancel 기능 실습 개요 이번 실습에서는 실행 중인 Action Goal을 중간에 취소하는 방법을 확인합니다. ROS 2 Action은 Client가 Server에 Goal을 보내고, Server는 작업을 수행하면서 Feedback을 보내다가 마지막에 Result를 반환하는 구조입니다. 여기서 Cancel 기능은 이미 실행 중인 Goal을 중간에 취소할 때 사용합니다. 주의할 점은 일반적인 ROS 2 CLI 환경에서는 실행 중인 Action Goal을 직접 취소하는 … Read more

ROS 2 Python Topic 실습 : RobotStatus 메시지로 로봇 상태 주고받기

1. 최종 목표 이번 실습에서 만들 구조는 다음과 같습니다. 전체 동작 흐름은 다음과 같습니다. Publisher는 로봇 상태를 보냅니다. Subscriber는 이 메시지를 받아서 출력합니다. 2. 워크스페이스 생성 먼저 ROS 2 워크스페이스를 만듭니다. 현재 구조는 이렇게 됩니다. 3. msg 폴더 생성 RobotStatus.msg 파일을 넣을 msg 폴더를 만듭니다. 4. RobotStatus.msg 작성 파일을 생성합니다. 내용은 다음과 같이 작성합니다. 각 … Read more

Python 기본 타입 메시지 Publisher / Subscriber 예제

이번 실습에서는 직접 만든 메시지 타입을 사용해서 Publisher와 Subscriber가 통신하도록 구성합니다. 사용할 메시지 구조는 다음과 같습니다. 최종 실행 구조는 다음과 같습니다. 1. 워크스페이스 생성 먼저 ROS 2 워크스페이스를 만듭니다. 구조는 다음과 같습니다. 2. 인터페이스 패키지 생성 사용자 정의 메시지는 일반 Python 패키지가 아니라 별도의 인터페이스 패키지에 두는 것이 정석입니다. 생성 후 구조는 대략 다음과 같습니다. … Read more

ROS 2 개발자를 위한 C/C++ 기초강의 #1

ROS 2를 제대로 다루기 위해서는 C++ 문법에 대한 기본기가 필요합니다. ROS 2의 핵심 클라이언트 라이브러리인 rclcpp는 C++ 기반으로 작성되어 있으며, 실제 로봇 제어, 센서 처리, 드론 제어, 실시간 데이터 처리, 메시지 송수신 코드를 작성할 때 C++ 문법을 자연스럽게 사용하게 됩니다. 특히 ROS 2에서는 단순히 문법을 외우는 것보다 객체지향 구조, 포인터와 참조, 스마트 포인터, 클래스, 콜백 함수, … Read more

로봇 개발자를 위한 Python 기초 교육 #3

21. JSON 다루기 로봇 설정이나 웨이포인트 파일은 JSON 형식으로 저장하는 경우가 많습니다. 예를 들어 다음과 같은 JSON 파일이 있다고 가정합니다. Python에서 JSON을 읽으려면 json 모듈을 사용합니다. Python 딕셔너리를 JSON 파일로 저장할 수도 있습니다. 한글이 들어간 JSON을 저장할 때는 다음처럼 쓰는 것이 좋습니다. 1) open(“config.json”, “w”, encoding=”utf-8″) config.json 파일을 엽니다. 주의할 점은 “w” 모드는 기존 파일이 … Read more

C++ Service Client 작성 실습 : 모바일 로봇 긴급정지 요청 보내기

1. 실습 목표 이번 실습에서는 C++로 모바일 로봇의 긴급정지 서비스를 호출하는 구조를 작성합니다. 패키지는 이미 생성되어 있다고 가정합니다. 작성할 파일 구조는 다음과 같습니다. 실습 동작은 단순합니다. 클라이언트가 /emergency_stop 서비스에 요청을 보냅니다. 서버는 다음과 같이 응답합니다. 이번 실습에서는 기본 std_srvs가 아니라, 이미 정의된 사용자 인터페이스 패키지인 my_first_package_msgs를 사용합니다. 2. 작업 공간 확인 작업 공간은 ros2_study를 사용합니다. … Read more

ROS 2 C++ Action Server / Client 실습 #1

1. 실습 목표 이번 실습에서는 ROS 2 Humble에서 C++을 사용하여 다음 내용을 직접 작성하고 실행합니다. 실습 예제는 모바일 로봇에 적용하기 쉬운 목표 거리만큼 전진하기 예제로 구성합니다. 2. 전체 구조 사용할 패키지는 다음과 같습니다. 역할은 다음과 같습니다.                                       패키지    … Read more

TurtleBot3 Waffle 시뮬레이션에서 RViz와 rqt로 카메라 토픽 확인하기

TurtleBot3는 ROS 기반 교육·연구용 모바일 로봇 플랫폼이고, Burger / Waffle / Waffle Pi처럼 모델을 바꿔가며 실습할 수 있습니다. ROBOTIS 공식 e-Manual에서도 TurtleBot3를 ROS 기반의 확장 가능한 모바일 로봇 플랫폼으로 설명하고 있으며, ROS 2 환경 설정 예시도 제공합니다. 이번 실습에서는 TurtleBot3 Waffle 시뮬레이션을 실행한 뒤, RViz와 rqt 플러그인으로 카메라 토픽을 확인합니다. 이 글에서 확인할 내용은 다음과 같습니다. … Read more

SLAM 기본 개념, Gazebo 기반 SLAM 실행

모바일 로봇이 “내 위치”와 “지도”를 동시에 알아내는 방법 모바일 로봇이 실내에서 자율주행을 하려면 두 가지를 알아야 합니다. 첫째, 내가 지금 어디에 있는가? 둘째, 주변 환경이 어떻게 생겼는가? 문제는 처음 들어간 공간에서는 로봇이 지도를 모릅니다. 지도도 없는데 위치를 알아야 하고, 위치도 정확히 모르는데 지도를 만들어야 합니다. 이 닭과 달걀 같은 문제를 푸는 기술이 바로 SLAM, 즉 Simultaneous Localization and Mapping입니다. … Read more

ROS 2 에서 CMakeLists.txt 이해하기

1. CMakeLists.txt란? CMakeLists.txt는 ROS 2 패키지를 빌드할 때 사용하는 설정 파일입니다. 쉽게 말하면 다음 역할을 합니다. ROS 2 Humble에서는 보통 colcon build 명령으로 워크스페이스를 빌드합니다. 이때 C++ 패키지나 인터페이스 패키지의 CMakeLists.txt를 읽어서 빌드 규칙을 처리합니다. 2. Python 패키지는 보통 CMakeLists.txt를 사용하지 않는다 ROS 2에서 Python 패키지는 보통 ament_python 빌드 타입을 사용합니다. 예를 들어 my_first_package가 Python … Read more