노드를 실행하는 방법 중 가장 간단한 방법은 run 명령어를 사용하는 것입니다. run 명령어는 단일 노드 하나를 실행할 수 있으며, 명령어에 옵션을 추가하여 파라미터를 전달 할 수도 있습니다. 하지만, 명령어가 너무 길어지고 복잡해지는 등의 문제로 자주 사용하지 않습니다.
ros2 run <package_name> <node_name>
또한, 단일 노드만을 실행시킬 수 있는 명령어이기에 여러 노드를 실행해야 한다면 하나하나 새로운 콘솔 창을 열어 명령어를 입력해야만 하는 불편함이 생기게 됩니다.
노드를 실행하는 다른 방법으로는 launch 파일을 작성하여 해당 파일을 launch 명령어로 실행하는 방법이 있습니다. run 명령어와는 달리 한 번에 여러 노드를 실행하거나 파라미터를 미리 작성해 둔 파일로 전달할 수 있습니다.
ros2 launch <package_name> <launch_file_name>
launch 명령어만 보아선 run 명령어와의 차이점이 잘 느껴지지 않을 수 있습니다. 차이점을 확인하기 위해 간단한 예시 launch 파일을 한 번 살펴보겠습니다.
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
return LaunchDescription([
Node(
package='py_pubsub',
namespace='',
executable='listener',
name='listener'
),
Node(
package='py_pubsub',
namespace='',
executable='talker',
name='talker'
),
])
py_pubsub 패키지의 listener 노드와 talker 노드를 실행하는 launch 파일 예시입니다. 해당 파일을 launch 명령어로 실행하게 되면 하나의 명령어로 listener와 talker 2개의 노드를 실행하게 됩니다. 한 번에 여러 개의 노드 또는 launch 파일을 실행해야 하거나 별도의 설정 파일을 파라미터로 함께 전달하고 싶을 때 주로 사용됩니다.
launch 파일은 Python, XML, YAML 중 하나로 구성할 수 있습니다.
<aside> 💡 파라미터 또는 매개변수는 노드의 설정으로 생각할 수 있습니다. 예를 들어, 모터를 제어하는 노드에 모터를 움직일 방향과 속도를 파라미터로 전달할 수 있습니다. ROS에서는 전달할 파라미터들을 YAML 파일로 미리 저장해두었다가, 노드를 실행할 때 같이 전달할 수 있습니다.
</aside>