Priceless

[ROS1] ROS1 launch 본문

ROS1 & ROS2

[ROS1] ROS1 launch

Hyun__ 2023. 10. 8. 21:36

Launch 파일

Launch 파일이란

여러 노드를 함께 실행 시킬 수 있는 파일

특정 패키지에서 launch 파일을 실행할 수 있다

roslaunch [option] <pkg name> <launch file name>

 

*.launch 파일

노드들의 정보가 XML 파일로 기록되어 있다

<launch>
	<node> ~~ </node>
	<node> ~~ </node>
</launch>

 

node 태그

실행할 노드 정보를 입력할 수 있다

<node pkg = "pkg 이름" type="file 이름" name=:"node 이름" />

 

include 태그

다른 launch 파일을 불러올 수 있다

<include file="path to launch file"/>

 

param 태그

ROS 파라미터 서버에 변수를 등록하고 변수 값을 설정한다

<param name="변수 이름" type="변수 타입" value="변수 값" />

ROS 파라미터 서버에 등록된 변수는 노드 코드에서도 사용할 수 있다

private 변수이므로 변수 앞에 '~(물결)'을 붙인다

 

launch 파일의 위치

package의 전체적인 구조는 아래와 같다

package 내에 src 폴더와 launch 폴더가 있다

 

이전 예제 과정을 포함하면 다음과 같다

 

launch 파일 작성

이전에 했던 노드들을 한  launch 파일에 작성하면 

터미널을 여러 개 동작할 필요 없이 수행할 수 있다

 

pub-sub.launch

<launch>
    <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node"/>
    <node pkg="my_pkg1" type="pub.py" name="pub_node"/>
    <node pkg="my_pkg1" type="sub.py" name="sub_node" output="screen"/>
 </launch>

파라미터 수정

param 태그를 사용하여 launch 파일 내에서 파라미터를 별도로 수정할 수 있다

기존 코드를 수정하지 않고도 launch 파일만 수정하여 값을 바꿀 수 있다

 

USB 카메라 구동과 파라미터 세팅을 위한 launch 파일(단순 예시)

5개의 파라미터를 설정한다(autoexposure, exposure, image_width, image_height, camera_frame_id)

usb_cam.launch

<launch>
    <node name="usb_cam" pkg="usb_cam" type="cam_node" output="screen">
        <param name="autoexposure" value="false"/>
        <param name="exposure" value="150"/> 
        <param name="image_width" value="640" /> 
        <param name="image_height" value="480" />
        <param name="camera_frame_id" value="usb_cam" />
    </node>
</launch>

launch 파일에서 파라미터 전달

launch 파일을 수정하면 거북이의 회전반경이 변하는 파일을 작성한다

pub-sub-param.launch

<launch>
    <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node"/>
    <node pkg="my_pkg1" type="pub_param.py" name="node_param">
        <param name="circle_size" value="4"/> # 파라미터를 선언한다
    </node>
    <node pkg="my_pkg1" type="sub.py" name="sub_node" output="screen">
 </launch>

 

기존의 pub.py 코드에서

외부 전역 변수를 받을  수 있는 코드를 추가한 pub_param.py을 새로 만든다

pub_param.py

#!/usr/bin/env python3

import rospy
from geometry_msgs.msg import Twist

rospy.init_node('my_node', anonymous=True) # create a node
pub = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10)

msg = Twist()

linear_X=rospy.get_param('~circle_size') # launch 파일에서 값을 직접 받아온다
msg.linear.x = linear_X

#msg.linear.x = 2.0
msg.linear.y = 0.0
msg.linear.z = 0.0
msg.angular.x = 0.0
msg.angular.y = 0.0
msg.angular.z = 1.8

rate = rospy.Rate(1)

while not rospy.is_shutdown():
        pub.publish(msg)
        rate.sleep()

그 결과 기존보다 큰 반지름을 가진 원이 나타난다

~circle_size는 launch 파일에서 값을 받아오는 것이다