launch

정승균·2020년 12월 22일
0

ROS

목록 보기
4/14
post-thumbnail

Ⅰ. launch file


  • 여러개의 노드를 일일이 rosrun할 필요 없이 launch 파일을 작성하여 roslaunch로 동시에 실행 가능
  • 파라미터 값을 노드에 전달 가능

1. launch file 위치

  • launch라는 디렉토리를 직접 생성 후 그 안에 작성

2. launch file 형식

  • 확장자는 *.launch
  • 여기서 name="노드 명" 은 소스파일 안에서 지정한 name보다 우선시 됨
<launch>
  <include file="같이 실행할 *launch의 경로"/>
  ...
  <node pkg="패키지명" type="노드가 포함된 소스파일 명" name="노드 명"/>
  ...
</launch>

3. launch file 실행

  • $ roslaunch package_name launch_file
  • roscore를 따로 실행 할 필요 없음

Ⅱ. turtlesim으로 실습


  • launch 디렉토리 생성 후 이동
jsg@jsg-ubuntu:~$ roscd my_pkg1
jsg@jsg-ubuntu:~/xycar_ws/src/my_pkg1$ mkdir launch
jsg@jsg-ubuntu:~/xycar_ws/src/my_pkg1$ cd 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>
  • $ roslaunch my_pkg1 pub-sub.launch 실행


Ⅲ. launch file로 파라미터 설정


1. launch file에 param tag 넣기

<launch>
  <node pkg="패키지명" type="노드가 포함된 소스파일 명" name="노드 명">
    <param name="변수 명" type="변수 타입" value="변수 값"/>
    <param name="변수 명" type="변수 타입" value="변수 값"/>
    ...
  </node>
</launch>
  • type 에는 str, int, double, bool, yaml 이 있고 생략시 str으로 인식
  • 소스코드에서 이 파라미터 값을 rospy.get_param('~name') 으로 불러올 수 있음

2. turtle의 회전반경 조절

  • launch 디렉토리 안에 다음과 같이 pub-sub-param.launch 생성
<launch>
    <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node"/>
    <node pkg="my_pkg1" type="pub_param.py" name="pub_node_param">
        <param name="circle_size" value="2"/>
    </node>
    <node pkg="my_pkg1" type="sub.py" name="sub_node" output="screen"/>
</launch>
  • src 디렉토리 안에 다음과 같이 pub_param.py 생성
#! /usr/bin/env python
# -*- coding: utf-8 -*-

import rospy
from geometry_msgs.msg import Twist

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

msg = Twist()
# 파라미터를 launch에서 불러옴
linear_x = rospy.get_param('~circle_size')
msg.linear.x = linear_x 
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()
  • roslaunch my_pkg1 pub-sub-param.launch 로 실행
value="2"value="4"

0개의 댓글