파일을 하나 실행할 때 → rosrun
그런데 파일이 여러 개라면?? 그 갯수만큼 rosrun을 해주어야 하나???
여러 개의 파일 이름을 한 파일에 담아 roslaunch로 실행시켜주면 된다.
*.launch 파일 내용에 따라 여러 노드들을 한꺼번에 실행시킬 수 있다.
이 *.launch 파일은 실행시킬 노드들의 정보가 XML 형식으로 기록되어 있다.
package 디렉토리 내에 launch 디렉토리가 있고 그 안에 *.launch 확장자의 파일이 있다.
roslaunch 사용법
$ roslaunch [패키지 이름] [실행시킬 launch 파일 이름]
*.launch에서 사용하는 Tag : node
실행할 노드 정보를 입력할 때 사용한다.
<node pkg="패키지 명" type="노드가 포함된 소스파일 명" name="노드 이름" />
- pkg : 실행시킬 노드의 패키지 이름
- type : 노드의 소스코드가 담긴 파이썬 파일의 이름 (이 때 반드시 파이썬 파일은 실행권한이 있어야 한다.)
- name : 노드의 이름을 입력하는 속성 (소스코드에서 지정한 노드의 이름을 무시하고, launch 파일에 기록된 노드의 이름으로 노드가 실행된다.)
*.launch에서 사용하는 Tag : include
다른 launch 파일을 불러오고 싶을 때 사용한다.
<include file="같이 실행할 *.launch 파일 경로" />
- file : 함께 실행시킬 *.launch 파일의 경로를 입력하는 속성
<pub-sub.launch 파일 작성>
$ gedit 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>
roscore는 내부적으로 자동으로 실행시켜 주기 때문에 코드 내에 적지 않아도 된다.
<launch 파일 실행>
$ roslaunch my_pkg1 pub-sub.launch
*.launch에서 사용하는 Tag : param
ROS 파라미터 서버에 변수를 등록하고 그 변수에 값을 설정하기 위한 태그
<param name="변수의 이름" type="변수의 타입" value="변수 값" />
- name : 등록할 변수의 이름
- type : 등록할 변수의 타입 (int, str, double, bool, yaml,,,)
- value : 등록할 변수의 값
ROS 파라미터 서버에 등록된 변수는 노드 코드에서 불러와 사용할 수 있다.
예시: print(rospy.get_param('~변수 name')) #private parameter는 앞에 '~'를 붙인다.
<launch 파일에서 파라미터 전달하기>
launch 파일 있는 곳에 가서
$ gedit 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="2"/>
</node>
<node pkg="my_pkg1" type="sub.py" name="sub_node" output="screen"/>
</launch>
pub_param.py
#!/usr/bin/env python
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 = 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()
if __name__ == '__main__':
try:
move()
except rospy.ROSInterruptException:
pass
실행하기
$ roslaunch my_pkg1 pub=sub-param.launch
launch 파일에서 circle_size를 변경해주면 거북이가 그리는 원의 크기가 달라진다.
'ROS' 카테고리의 다른 글
ROS - 1:N, N:1, N:N 통신 (0) | 2022.03.01 |
---|---|
ROS - 노드 통신을 위한 패키지 만들기 (0) | 2022.03.01 |
ROS - turtlesim, publisher, subscriber (0) | 2022.03.01 |
ROS 설치 및 환경설정 (0) | 2022.02.28 |
ROS 명령어 (0) | 2022.02.28 |