소스에서 파라미터 사용하기

여기서는 파라미터를 사용하여 액션 서버 작성 시 사용했던 소스에 특정 기능을 추가하도록 하겠습니다. 1. Python 코드에서 파라미터 선언하기 ~/ros2_study/src/my_first_package/ my_first_package/dist_turtle_action_server.py의 소스의 init()에 아래의 파라미터 선언을 추가합니다. 여기서 의미는 다음과 같습니다.                        파라미터 이름                          … 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 사용자 정의 메세지 만들기 #3

이번 글에서는 ROS 2 서비스 구조를 조금 더 확장해서, 사용자가 원하는 개수만큼 turtlesim 거북이를 생성하고 원 모양으로 배치하는 예제를 정리해 보겠습니다. 이전 단계에서는 사용자 정의 서비스 MultiSpawn.srv를 만들고, /multi_spawn 서비스를 호출하면 서버가 응답을 반환하는 구조까지 확인했습니다. 이번에는 그 서비스 서버 내부에서 turtlesim의 기본 서비스인 /spawn을 호출하여 실제로 여러 거북이를 생성하도록 구현합니다. 이번 예제의 목표는 다음과 … Read more

ROS2 사용자 정의 메세지 만들기 #2

이번 글에서는 앞에서 만든 사용자 정의 메시지 CmdAndPoseVel을 실제 토픽으로 발행하고, 이어서 사용자 정의 서비스 MultiSpawn.srv까지 만들어 보겠습니다. 핵심 목표는 다음과 같습니다. 1. 두 토픽 데이터를 하나의 토픽으로 다시 발행하기 앞에서는 /turtle1/pose와 /turtle1/cmd_vel을 각각 구독한 뒤, 두 데이터를 하나의 CmdAndPoseVel 객체에 저장했습니다. 이제는 저장만 하는 것이 아니라, 이 데이터를 새로운 토픽으로 발행하겠습니다. 새로 발행할 토픽 이름은 … Read more

ROS2 사용자 정의 메세지 만들기 #1

이번 글에서는 ROS 2에서 직접 메시지 타입을 정의하고, 이를 Python 노드에서 사용하는 방법을 정리해 보겠습니다. 예제 목표는 turtlesim의 위치 정보와 속도 명령 정보를 각각 구독한 뒤, 하나의 사용자 정의 메시지로 묶어 출력하는 것입니다. 최종적으로 다룰 내용은 다음과 같습니다. 1. 메시지 전용 패키지를 따로 만드는 이유 ROS 2에서는 토픽으로 데이터를 주고받을 때 메시지 타입이 반드시 필요합니다. … Read more

ROS2 패키지 만들고 토픽 다루기

1. 개발 도구 설치 먼저 ROS 2 Python 패키지 개발에 필요한 도구를 설치합니다. 설치가 완료되었으면 작업용 워크스페이스를 생성합니다. 2. ROS 2 워크스페이스 생성 ROS 2 작업은 보통 워크스페이스 단위로 관리합니다. 여기서 구조는 다음과 같습니다. src 폴더는 직접 작성하는 패키지들이 들어가는 공간입니다. 3. 빈 워크스페이스 빌드 아직 패키지가 없어도 워크스페이스를 먼저 빌드할 수 있습니다. 빌드 후에는 다음 폴더들이 … Read more

ROS 2 Python Service Client 사용하기

이번 글에서는 ROS 2에서 Python으로 Service Client를 만드는 방법을 정리합니다. ROS 2의 서비스는 기본적으로 다음 구조입니다. 즉, 클라이언트가 서버에 요청을 보내면 서버가 처리 결과를 응답하는 방식입니다. 이번 예제에서는 turtlesim에서 제공하는 /turtle1/teleport_absolute 서비스를 Python 코드로 호출하여 거북이의 위치를 이동시켜 보겠습니다. 1. 실행환경  준비 새로운 터미널을 실행하고 turtlesim_node를 실행합니다. 다른 터미널을 실행하여 노트북을 실행합니다. Jupyter에서 새 Python3 노트북을 … Read more