ROS2 Action Server에 Cancel 기능 추가하기

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

ROS 2 단위, 좌표, 시간, 파일 시스템, 빌드 시스템, 패키지 구조 정리 #1

ROS 2를 처음 배울 때 많은 분들이 바로 토픽, 서비스, 액션, 노드 코드부터 시작합니다.그런데 실제로 현장에서 문제가 생기는 지점은 의외로 코드 문법이 아닙니다. 진짜 문제는 보통 이런 곳에서 터집니다. ROS 2는 여러 노드, 여러 센서, 여러 패키지, 여러 개발자가 함께 사용하는 구조입니다.그래서 각자 마음대로 단위, 좌표계, 시간 기준, 파일 구조를 쓰면 시스템이 바로 꼬입니다. 설명할 … Read more

차동 이동 로봇 기구학과 Odometry 쉽게 이해하기 #1

1. 차동 이동 로봇이란? 차동 이동 로봇은 보통 왼쪽 바퀴와 오른쪽 바퀴를 각각 독립적으로 제어하는 로봇입니다. 가장 기본적인 형태는 다음과 같습니다. 왼쪽 바퀴와 오른쪽 바퀴의 속도 차이를 이용해서 로봇은 직진, 후진, 회전, 곡선 주행을 합니다. 2. 차동 로봇의 구동 원리 차동 로봇의 핵심은 단순합니다. 1) 양쪽 바퀴 속도가 같을 때 왼쪽 바퀴와 오른쪽 바퀴가 같은 속도로 앞으로 회전하면 로봇은 직진합니다. 반대로 두 바퀴가 같은 속도로 뒤로 회전하면 로봇은 후진합니다. 2) 오른쪽 바퀴가 … 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

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

1. Python이 로봇 개발에 많이 쓰이는 이유 로봇 개발은 보통 다음 요소들이 섞여 있습니다. 예를 들어 자율주행 로봇이라면: Python은 이 과정에서 특히 다음 작업에 좋습니다.                              분야                                … Read more

TurtleBot3 Odometry 분석

1. TurtleBot3 시뮬레이터에서 Odometry 확인하기 TurtleBot3는 Gazebo 기반 시뮬레이션을 제공합니다. TurtleBot3 Simulation Package는 turtlebot3와 turtlebot3_msgs 패키지를 필요로 하며, Gazebo 환경에서는 IMU, LDS, 카메라 같은 센서를 사용할 수 있어 SLAM이나 Navigation 실습에 적합합니다. 기본 실행 흐름은 다음과 같습니다. 환경 설정: Gazebo 월드 실행: 키보드 조종 노드 실행: Odometry 토픽 확인: 출력 예시는 대략 이런 구조입니다. 여기서 … Read more

서비스 서버 만들기

1. 서비스 서버 만들기 이제 Python 패키지에 서비스 서버 파일을 만듭니다. 파일 위치는 다음과 같습니다. 먼저 서버 파일을 생성합니다. my_service_server.py에 아래와 같은 소스 코드를 작성하시기 바랍니다. 2. 코드 설명 1) 서비스 타입 import 사용자 정의 서비스 MultiSpawn을 Python 코드에서 사용하기 위해 import 합니다. 2) 서비스 서버 생성 이 코드는 /multi_spawn 서비스를 생성합니다. 구조는 다음과 같습니다. … Read more

서비스 정의 만들기

1. 서비스 정의 만들기 이번에는 토픽이 아니라 서비스를 만들어 보겠습니다. 토픽은 계속 흐르는 데이터 통신에 적합합니다. 반면 서비스는 요청과 응답이 명확한 작업에 적합합니다. 예를 들어 다음과 같은 작업은 서비스가 잘 맞습니다. 이번 예제에서는 사용자가 숫자를 요청하면, 그 수만큼 turtle을 생성하기 위한 좌표 정보를 응답하는 서비스 구조를 만들어 보겠습니다. 2. srv 폴더 생성하기 서비스 정의 파일은 … Read more

URDF 이해

1. URDF 소개 1) URDF란? URDF는 Unified Robot Description Format의 약자입니다. ROS에서 로봇의 구조를 표현하기 위한 XML 기반 로봇 모델 설명 파일입니다. ROS 2 공식 문서에서도 URDF를 로봇의 geometry와 organization, 즉 로봇의 형상과 구성 관계를 정의하는 파일 형식으로 설명합니다. 쉽게 말하면 URDF는 로봇에게 붙이는 설계도입니다. 예를 들어 로봇에 다음과 같은 부품이 있다고 가정합니다. URDF는 이 부품들을 각각 link로 정의하고, 부품 사이의 … Read more

Xacro 기본 구조, Property, Macro, Include 실습

이번 강의에서는 ROS 2 Humble 환경에서 Python 패키지를 사용하여 모바일 로봇의 URDF/Xacro 모델을 작성하고 RViz에서 확인합니다. ROS 2에서 모바일 로봇을 시뮬레이션하거나 RViz로 시각화하려면 로봇의 구조를 컴퓨터가 이해할 수 있는 형식으로 작성해야 합니다. 이때 가장 기본이 되는 파일 형식이 URDF입니다. 하지만 URDF만으로 로봇을 작성하면 같은 코드가 많이 반복됩니다. 예를 들어 4륜 모바일 로봇을 만든다고 하면 바퀴 link와 joint를 거의 같은 … Read more