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

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

ROS2 Action Server에 Cancel 기능 추가하기

앞에서 만든 Action Server는 Goal을 받고 Feedback을 발행한 뒤 성공 상태로 종료됩니다. 하지만 아직 중요한 기능이 하나 빠져 있습니다. 바로 Cancel 처리입니다. 현재 코드는 Client가 작업 취소 요청을 보내도 서버가 이를 확인하지 않습니다.즉, 작업이 시작되면 중간에 멈출 수 없습니다. 실제 로봇 시스템에서는 이것이 꽤 위험한 구조입니다. 예를 들어 다음과 같은 상황을 생각해 볼 수 있습니다.   … Read more

ROS2 Action Server 만들기 #1

1. 간단한 Action Server 만들기 이제 my_first_package 안에 Action Server 파일을 만듭니다. 먼저 cd ~/ros2_study/src/my_first_package/my_first_package/ 로 이동하여 dist_turtle_action_server.py 파일을 생성합니다. 기본 구조는 다음과 같습니다. VS Code에서 dist_turtle_action_server.py 파일을 불러와서 아래의 코드를 작성합니다. 아직 turtlesim을 움직이지는 않고, Action Goal을 받으면 바로 성공 처리 후 빈 Result를 반환하는 구조입니다. 이 소스는 다음과 같은 역할을 합니다. 즉, 이 코드는 … Read more

ROS 2 C++ 실행 인자 사용하기

ROS 2 노드를 만들다 보면 같은 프로그램이라도 실행할 때마다 다른 조건으로 동작시켜야 할 때가 있습니다. 예를 들어 모바일 로봇의 이동 속도를 바꾸거나, 반복 횟수를 다르게 주거나, 테스트 모드로 실행해야 할 수 있습니다. 이때 사용할 수 있는 대표적인 방법이 실행 인자(command line arguments) 입니다. C++ 프로그램은 실행될 때 main() 함수에서 외부 입력값을 받을 수 있습니다. 여기서 argc는 실행 … Read more

ROS 2 Humble에서 TurtleBot3 시뮬레이션

1. 목표 이번 글에서는 ROS 2 Humble 환경에서 TurtleBot3을 Gazebo 시뮬레이션으로 실행하고, 키보드 조종, SLAM, Navigation2까지 실습하는 전체 과정을 다룹니다. 최종적으로 다음을 할 수 있어야 합니다. 2. 실습 환경 권장 환경은 아래와 같습니다.         항목                                      … Read more

ROS 2 MultiThreadedExecutor와 Action Server로 Turtlesim 거리 이동 구현하기

이번 단계에서는 ROS 2 Action Server를 실제 turtlesim 제어에 연결합니다. 앞에서는 Action Server가 Goal을 받고 Result와 Feedback을 반환하는 구조를 확인했다면, 이번에는 다음 기능을 함께 구현합니다. 이 구조는 단순한 예제가 아니라 실제 로봇 이동 제어의 기본 패턴입니다.특히 모바일 로봇, 드론, AGV, AMR에서 “목표 지점까지 이동하면서 진행 상태를 계속 확인하는 구조”와 매우 비슷합니다. 1. 전체 구조 이번 … Read more

ROS2 MultiThread 기초

1. 왜 MultiThreadedExecutor가 필요한가요? ROS 2 노드는 기본적으로 하나의 실행 흐름에서 callback을 처리합니다. ROS 2 노드는 보통 이렇게 실행합니다. 이 코드는 내부적으로 기본 Executor를 사용합니다. 대부분의 기본 동작은 사실상 이런 구조입니다. 즉, callback이 여러 개 있어도 하나의 thread에서 순서대로 처리됩니다. 예를 들어 노드 안에 이런 것들이 있다고 해보겠습니다. 기본 실행에서는 이 callback들이 동시에 실행되지 않습니다. 이런 식입니다. … Read more

ROS2 Action Server 만들기 #2

1. Feedback 기능 추가하기 이 코드는 Action Server의 기본 구조만 확인하는 코드입니다. 아직 다음 기능은 없습니다. 그래서 실행해도 거북이는 움직이지 않습니다.다만 Action Server가 정상적으로 Goal을 받고 성공 응답을 반환하는지는 확인할 수 있습니다. Action의 핵심은 작업이 진행되는 동안 중간 상태를 계속 받을 수 있다는 점입니다. 이를 확인하기 위해 Feedback을 발행하는 코드를 추가합니다. 추가된 핵심 코드는 다음입니다. … Read more

ROS 2 Action 정의 만들기

1. ROS 2 Action의 개념 ROS 2에서 Action은 시간이 오래 걸리는 작업을 처리할 때 사용하는 통신 방식입니다.Service는 요청을 보내면 결과가 바로 돌아오는 구조에 가깝지만, Action은 작업이 진행되는 동안 중간 상태를 계속 받을 수 있습니다. Action은 크게 다음과 같은 흐름으로 동작합니다. 예를 들어 turtlesim을 특정 거리만큼 이동시키는 작업을 생각해 보겠습니다.거북이가 목표 거리까지 이동하는 동안 남은 거리를 … Read more

ROS2 파라미터

1. 파라미터 개념 ROS 2에서 파라미터(parameter)는노드 내부 동작을 외부에서 “실시간으로 조정”할 수 있는 핵심 기능입니다. 기존 ROS1에서는 중앙 Parameter Server가 있었지만,ROS 2에서는 다음과 같이 구조가 변경되었습니다: 즉, 다음과 같이 이해하시면 됩니다: “노드 내부 변수 값을 코드 수정 없이 외부에서 바꿀 수 있는 기능” 2. 왜 파라미터를 사용하는가 (실무 관점) 다음과 같은 상황에서 매우 중요합니다:       … Read more