-
_ROS1_roslaunchROS/ROS1 2023. 10. 3. 23:55
roslaunch는 파일의 내용에 따라 여러 노드들을 한꺼번에 실행할 수 있다.
실행시킬 노드들의 정보는 XML형식으로 기록되어 있다.
launch파일은 다음 위치에 존재하며 .launch 확장자를 갖는다.
launch에서 사용하는 Tag는 대표적으로 node, include가 있으며 다음과 같이 사용한다.
1. node
node는 실행할 노드 정보를 입력할 때 사용되는 태그이다.
- pkg: 실행시킬 노드의 패키지를 입력하는 속성.
- type: 노드의 소스코드가 담긴 파일의 이름을 입력하는 속성.
- name: 노드의 이름을 입력하는 속성.(소스코드에서 지정한 노드의 이름을 무시하고 launch파일에 기록된 노드의 이름으로 노드기 실행.)
2. include
include는 다른 launch파일을 불러오고 싶을 때 사용하는 태그이다.
- file: 함께 실행시킬 *.launch파일의 경로를 입력하는 속성.
#node <node pkg="패키지 명" type="노드가 포함된 소스파일 명" name="노드 이름"/> #include <include file="같이 실행할 *.launch 파일 경로"/>
그럼 이전에 만들었던 my_pkg1을 가지고 한번 launch를 실행해보도록 하자.
my_pkg1.launch
# my_pkg1.launch <launch> <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node"/> <node pkg="my_pkg1" type="pub.py" name="pub"/> <node pkg="my_pkg1" type="sub.py" name="sub"/> </launch>
실행
$ roslaunch my_pkg1 my_pkg.launch
roslaunch는 내부적으로 roscore가 실행되기 때문에 따로 실행할 필요는 없다.
실행결과
3. param
param은 ROS 파라미터 서버에 변수를 등록하고 그 변수에 값을 설정하기 위한 태그이다.
- name: 등록할 변수의 이름을 입력하는 속성
- type: 등록할 변수의 타입. 사용 할 수 있는 타입의 종류는 str, int, double, bool, yaml (type을 지정하지 않으면 자동으로 str을 인식한다.)
- value: 등록할 변수의 값
<param name="변수의 이름" type="변수의 타입" value="변수 값"/>
그럼 이번에는 param을 한번 사용해보자.
새로운 launch파일을 하나 생성하고, pub.py를 조금 수정해 볼 것이다.
1) pub-sub-param.launch
<launch> <node pkg="turtlesim" type="turtlesim_node" name="turtlesim_node"/> <node pkg="my_pkg1" type="pub_param.py" name="pub_param_node"> <param name="circle_size" value="2"/> </node> <node pkg="my_pkg1" type="sub.py" name="sub_node" output="screen"/> </launch>
param_name: circle_size
param_value: (str type) 2
sub_node부분의 output="screen"은 Terminal창에 출력을 해주는 명령어이다.
2) pub_param.py
import rospy from geometry_msgs.msg import Twist def move(): rospy.init_node('my_node', anonymous=True) pub = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10) msg = Twist() linear_x = rospy.get_param('~circle_size') #launch 부분의 circle_size param을 가져온다는 의미. 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() move()
launch 파일을 실행해보면 다음과 같은 결과를 얻을 수 있다.
'ROS > ROS1' 카테고리의 다른 글
_ROS1_custom_msg (0) 2023.10.04 _ROS1_node_communication (0) 2023.10.04 _ROS1_package_pub&sub (0) 2023.10.02 _ROS1_설치_환경설정_기본실습 (0) 2023.10.01 _ROS1_기본 내용 (1) 2023.10.01