ROS

Ubuntu16.04 ROS Kinetic - launch파일에서 파라미터 전달 실습

donie 2020. 12. 22. 22:25

1. launch 파일 작성

~/xycar_ws/src/my_pkg1/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="2"/>
	</node>
	<node pkg="my_pkg1" type="sub.py" name="sub_node" output="screen"/>
</launch>

 

2. publish 노드 작성

기존 pub.py 파일을 복사하여 pub_param.py를 작성하였다.

원래 실행권한이 있는 파일이었기 때문에 따로 chmod를 해주지 않아도 실행이 가능하다.

여기서 수정을 할 때 visual block mode를 사용하였다. (참고 : 2020/12/10 - [프로그래머스 자율주행스쿨] - TIL 20.12.09 - vim editor )

기존은 그냥 main단에서 실행했던 부분을 함수로 만들기 위해 tab키를 여러 줄에 적용하고 싶었는데,

tab키 시작행에서 <CTRL-V>누른 후 tab키 끝행으로 화살표키를 이용해 이동, I<tab><esc><esc>를 입력하니 시작행~끝행까지 전부 앞에 tab이 입력되었다.

#!/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()
	#msg.linear.x = 2.0
	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)

if __name__ == '__main__':
	try:
		move()
	except rospy.ROSInterruptException:
		pass

 

그리고 vi에디터의 tab간격이 너무 넓어서 ~/.vimrc에서 탭간격을 4로 수정하였다.

set ts=4

 

3. roslaunch 실행

roslaunch my_pkg1 pub-sub-param.launch

결과는 아래와 같다.

 

roslaunch파일에서 param태그의 value값을 5로 수정하여 실행한 결과는 다음과 같다.