launch 파일에서 실행 인자 사용하기 #1

1. launch 파일에서 실행 인자 사용하기 ROS 2 launch 파일은 단순히 노드를 실행하는 용도만 있는 것이 아닙니다. 실행할 때 값을 외부에서 받아서 launch 파일 내부에서 사용할 수도 있습니다. 예를 들어 turtlesim의 배경색을 launch 실행 시점에 바꾸고 싶다고 가정해 보겠습니다. 이렇게 실행하면 launch 파일 안에서 background_r, background_g, background_b 값을 받아 사용할 수 있습니다. launch 파일은 다음처럼 … Read more

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

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

ROS 2 C++ 파라미터 실습

ROS 2를 사용하다 보면 같은 프로그램이라도 상황에 따라 설정값을 바꿔야 하는 경우가 자주 생깁니다. 예를 들어 모바일 로봇의 주행 속도, 제어 주기, 장애물 감지 거리, 좌표계 이름, 제어 게인 같은 값들은 매번 코드를 수정해서 다시 빌드하는 방식으로 관리하면 매우 비효율적입니다. 이때 사용하는 것이 파라미터(parameter) 입니다. ROS 2에서 파라미터는 쉽게 말해 노드가 사용하는 설정값입니다. 정수, 실수, 문자열, 불리언, 리스트 … Read more

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

7. Action Client 작성 파일 생성: 내용: 8. MoveDistance Action Client 소스 분석 1) 전체 역할 이 노드는 /move_distance Action Server에 접속한 뒤, 목표 이동 거리 값을 Goal로 전송합니다. 서버가 Goal을 수락하면 실행이 시작되고, 클라이언트는 실행 중 다음 정보를 계속 받습니다. 서버가 목표 거리에 도달하면 최종 결과를 받아 출력하고 노드를 종료합니다. 전체 흐름은 다음과 같습니다. … Read more

ROS 2 C++ 서비스 프로그래밍 이해하기

이번 실습에서는 ROS 2 Humble 환경에서 C++로 서비스 서버와 서비스 클라이언트를 작성합니다. 패키지는 이미 생성되어 있다고 가정합니다. 사용할 패키지 이름은 다음과 같습니다. 인터페이스 정의는 다음 패키지를 사용합니다. 이번 예제에서는 모바일 로봇 제어에서 자주 필요한 구조를 단순화하여, 두 개의 숫자와 명령 문자열을 서버에 보내고 결과를 응답받는 형태로 실습합니다. 예제 자체는 계산기 형태이지만, 실제 모바일 로봇에서는 다음과 같은 구조로 … Read more

ROS 2 C++ 토픽 통신 기초: 센서 데이터를 보내고 받는 퍼블리셔와 서브스크라이버 만들기

이번 실습에서는 C++로 ROS2에서 제공하는 인터페이스를 이용하여 토픽 통신하는 예제를 만들어 보겠습니다. 예제 내용은 간단합니다. temperature_publisher 노드는 1초마다 임의의 온도 값을 만들어 /temperature 토픽으로 보냅니다. temperature_subscriber 노드는 /temperature 토픽을 구독하고, 받은 온도 값을 터미널에 출력합니다. 전체 구조는 다음과 같습니다. 이번 예제에서는 ROS 2에서 기본 제공하는 std_msgs/msg/Float32 메시지를 사용합니다. 1. 퍼블리셔 노드 만들기 먼저 온도 데이터를 보내는 … Read more

RViz로 모바일 로봇 상태와 토픽 확인하기

1. RViz2란? RViz2는 ROS 2에서 사용하는 대표적인 3D 시각화 도구입니다. 모바일 로봇을 개발할 때 RViz2는 단순히 예쁜 화면을 보여주는 도구가 아닙니다. 실제 개발 현장에서는 다음과 같은 용도로 자주 사용합니다. 즉, RViz2는 모바일 로봇 개발에서 눈 역할을 합니다. 터미널에서 토픽 값을 숫자로 보는 것도 중요하지만, 로봇의 위치, 방향, 센서 데이터를 공간적으로 확인하려면 RViz2가 거의 필수입니다. 2. … Read more

ROS 2 Humble에서 Gazebo 사용법 완전 정복

1. Gazebo란 무엇인가요? Gazebo는 로봇을 실제 하드웨어 없이 가상 환경에서 테스트할 수 있는 로봇 시뮬레이터입니다. ROS 2와 함께 사용하면 다음을 실습할 수 있습니다.                          기능                                        … Read more

ROS 2 Humble에서 TurtleBot3 시뮬레이션

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

ROS2 launch 작성

1. roslaunch 기본 개념 ROS 2에서 여러 노드를 실행할 때 터미널을 여러 개 열고 하나씩 실행하면 불편합니다. 예를 들어 다음과 같은 명령을 각각 실행해야 한다고 가정해 보겠습니다. 이런 경우 launch 파일을 만들면 한 번에 실행할 수 있습니다. ROS 2의 launch 파일은 Python으로 작성하는 방식이 일반적입니다. 기본 구조는 다음과 같습니다. 이 파일은 두 개의 노드를 동시에 실행합니다. … Read more