ROS(로봇 운영 체제)는 로봇 애플리케이션을 개발하는 데 필요한 다양한 도구와 라이브러리를 제공합니다. 그 중에서도 launch 파일은 여러 ROS 노드를 동시에 실행하고, 이를 관리하는 데 필수적인 역할을 해요. 이 글에서는 ROS launch 파일의 기본 개념과 사용법을 상세히 설명하고, 실제 예제를 통해 직관적으로 이해할 수 있도록 돕겠습니다. 초보자부터 전문가까지 모든 ROS 사용자에게 유용한 정보가 될 거예요.
1. ROS Launch 파일의 개념
먼저, Launch 파일이란 무엇인지부터 알아볼게요. ROS에서 여러 노드를 동시에 실행할 수 있는 XML 형식의 스크립트를 의미해요. 이 파일을 사용하면 하나의 명령으로 여러 노드를 실행할 수 있고, 매개변수를 설정하거나 노드 간의 관계를 정리하는 등의 다양한 기능을 제공하죠. roslaunch와 rosrun의 차이점도 이해하는 것이 중요해요. rosrun은 단일 노드를 실행할 때 사용하는 반면, roslaunch는 다수의 노드를 관리할 수 있다는 점에서 더욱 유용하답니다.
2. Launch 파일의 기본 구조
Launch 파일은 XML 문법으로 작성되며, 기본적으로 <launch> 태그로 시작하고 끝나요. 이 구조를 이해하는 것이 중요해요. 노드를 실행하기 위해서는 <node> 태그를 사용하여 실행할 노드의 패키지명, 노드 타입, 노드 이름, 출력 방식 등을 정의할 수 있어요. 예를 들어, <node pkg=”패키지명” type=”노드타입” name=”노드이름” output=”screen” />와 같이 작성하면, 지정한 노드가 실행되면서 출력을 화면에 표시할 수 있답니다. 또한, <param> 태그를 통해 ROS 네트워크에서 사용할 변수를 정의하는 것도 중요한 기능이에요.
3. Launch 파일 작성 과정
이제 본격적으로 Launch 파일을 작성해볼 차례예요. 먼저, launch 파일을 저장할 디렉토리를 생성해야 해요. 일반적으로 패키지 내에 launch라는 폴더를 생성해서 그 안에 파일을 저장하죠. 예를 들어, 간단한 launch 파일을 작성해볼까요? 두 개의 노드를 동시에 실행하는 예제를 만들어보면, 다음과 같은 코드를 사용할 수 있어요:
<launch>
<node pkg="my_package" type="my_node1" name="node1" output="screen" />
<node pkg="my_package" type="my_node2" name="node2" output="screen" />
</launch>
이렇게 작성한 후, CMakeLists.txt 파일도 수정해야 해요. launch 파일이 올바르게 실행되도록 하기 위해, install 경로에 launch 폴더를 추가해야 한답니다.
4. Launch 파일의 고급 기능
이제 Launch 파일의 고급 기능에 대해 알아볼게요. 네임스페이스를 사용하면 노드를 그룹화하고, 충돌을 피할 수 있어요. 예를 들어, 특정 노드들을 그룹으로 묶어서 관리하면, 노드 간의 혼란을 줄일 수 있죠. 또한, launch 파일에서 사용할 수 있는 인수와 환경 변수 설정 방법도 중요해요. 이를 통해 설정을 유연하게 조정할 수 있답니다. 마지막으로, 다른 launch 파일을 포함시켜 재사용성을 높이는 것도 고려해보세요.
5. 실전 예제: Gazebo와 RViz 함께 실행하기
자, 이제 실제로 Gazebo와 RViz를 함께 실행하는 launch 파일을 작성해볼까요? Gazebo는 로봇 시뮬레이션을 위한 툴이고, RViz는 시각화 도구로 많이 사용돼요. 두 프로그램을 동시에 실행하면 로봇 개발에 많은 도움이 되죠. 아래와 같은 launch 파일을 작성해보세요:
from launch import LaunchDescription
from launch.actions import ExecuteProcess
def generate_launch_description():
return LaunchDescription([
ExecuteProcess(cmd=["gazebo"], output="screen"),
ExecuteProcess(cmd=["ros2", "run", "rviz2", "rviz2"], output="screen"),
])
이렇게 작성한 후, 터미널에서 해당 launch 파일을 실행하면 Gazebo와 RViz가 동시에 실행되는 것을 확인할 수 있어요. 만약 에러가 발생하면 패키지 경로 문제일 가능성이 높아요. 이럴 땐, 패키지가 올바르게 설정되었는지 확인해보세요.
결론
이 글에서는 ROS의 launch 파일을 활용하여 여러 노드를 효율적으로 관리하고 실행하는 방법에 대해 알아보았어요. Launch 파일은 ROS 프로젝트의 복잡성을 줄이고, 코드의 재사용성을 높이며, 개발자에게 많은 시간을 절약해주죠. 앞으로의 ROS 개발에 있어 launch 파일의 중요성을 인식하고, 이를 활용한 다양한 프로젝트에 도전해 보세요. ROS 생태계에서의 성공적인 개발을 기원할게요!