ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • _ROS1_roslaunch
    ROS/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

    paramROS 파라미터 서버에 변수를 등록하고 그 변수에 값을 설정하기 위한 태그이다.

    • 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
Designed by Tistory.