Note: This tutorial assumes that you have completed the previous tutorials: building a ROS package.
(!) Please ask about problems and questions regarding this tutorial on Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags.

ROS Node 이해하기

Description: 이 자습서는 ROS graph의 개념을 소개하고 roscore, rosnode, rosrun을 다루고 있습니다.

Tutorial Level: BEGINNER

Next Tutorial: Understanding ROS topics


이 튜토리얼을 위해 가벼운 시뮬레이터를 사용할 예정이니 아래의 명령어를 통해 설치하기 바랍니다.

$ sudo apt-get install ros-<distro>-ros-tutorials

<distro>를 자신의 배포판 이름으로 대체하십시오. (e.g. hydro, groovy, electric, fuerte etc.)

Quick Overview of Graph Concepts

  • Nodes: A node is an executable that uses ROS to communicate with other nodes.

  • Messages: ROS data type used when subscribing or publishing to a topic.

  • Topics: Nodes can publish messages to a topic as well as subscribe to a topic to receive messages.

  • Master: Name service for ROS (i.e. helps nodes find each other)

  • rosout: ROS equivalent of stdout/stderr

  • roscore: Master + rosout + parameter server (parameter server will be introduced later)


노드는 Rospackage안의 실행파일 보다 그렇게 많지 않습니다. Ros client 라이브러리를 통해 다른 Node로 통신을 합니다.

또한, Node는 구독(Subscribe) 및 발행을 할 수 있으며

Client Libraries

ROS client 라이브러리는 다른 언어로 짜인 Node간의 통신을 가능하게 합니다.

  • rospy = python client library
  • roscpp = c++ client library


roscore 실행은 ROS를 사용할 때 가장 먼저 해야하는 일입니다.

Please run:

$ roscore

아래와 비슷한 출력을 볼수 있습니다:

  • ... logging to ~/.ros/log/9cf88ce4-b14d-11df-8a75-00251148e8cf/roslaunch-machine_name-13039.log
    Checking log directory for disk usage. This may take awhile.
    Press Ctrl-C to interrupt
    Done checking log file disk usage. Usage is <1GB.
    started roslaunch server http://machine_name:33919/
    ros_comm version 1.4.7
     * /rosversion
     * /rosdistro
    auto-starting new master
    process[master]: started with pid [13054]
    setting /run_id to 9cf88ce4-b14d-11df-8a75-00251148e8cf
    process[rosout-1]: started with pid [13067]
    started core service [/rosout]

만약 roscore가 초기화 되지 않는다면, 네트워크 환경 설정 문제일 수 있습니다. 자세한 사항은 Network Setup - Single Machine Configuration

혹은 roscore가 실행되지 않고 Permission 메세지를 보낸다면, ~/.ros 폴더를 재귀적으로 관리자 권한으로 바꿔주십시오.

$ sudo chown -R <your_username> ~/.ros

Using rosnode

Open up a new terminal, and let's use rosnode to see what running roscore did...

roscore가 하는 일에 대해 알아보기 위해 터미널을 열고 rosnode 명령어를 사용해 봅시다.

Note: When opening a new terminal your environment is reset and your ~/.bashrc file is sourced. If you have trouble running commands like rosnode then you might need to add some environment setup files to your ~/.bashrc or manually re-source them.

rosnode는 현재 실행 중인 Node에 대한 정보를 보여줍니다.

rosnode list 명령어는 실행 중인 Node를 보여줍니다.

$ rosnode list
  • You will see:
  • /rosout

위는 rosout node 하나가 실행 중인 모습을 보여줍니다. rosout은 언제나 실행되고 있으며, node의 debugging 출력을 모으고 기록합니다.

rosnode info 명령어는 특별한 Node의 정보를 반환합니다.

$ rosnode info /rosout

아래는 rosout이 /rosout_agg을 발행하고 있는 정보를 보여줍니다.

  • ------------------------------------------------------------------------
    Node [/rosout]
     * /rosout_agg [rosgraph_msgs/Log]
     * /rosout [unknown type]
     * /rosout/set_logger_level
     * /rosout/get_loggers
    contacting node http://machine_name:54614/ ...
    Pid: 5092

그럼, 다른 Node에 대해 알아보기 위해 rosrun 에 대해 알아보겠습니다.

Using rosrun

rosrun은 package안의 node를 직접 실행 할 수 있게 해줍니다. (Package Path를 몰라도 됩니다.)


$ rosrun [package_name] [node_name]

그러면 turtlesim package안의 turtlesim_node 노드를 사용해 봅시다.

새로운 터미널 창에서 아래와 같이 입력합니다:

$ rosrun turtlesim turtlesim_node

아래와 같은 창을 볼 수 있을 것 입니다:

  • turtlesim.png

NOTE: 거북이의 모습이 ROS 버전에 따라 다를 수 있습니다.many types of turtle.

In a new terminal:

$ rosnode list

You will see something similar to:

  • /rosout

ROS의 장점은 command-line을 통해 Node의 이름을 명명할 수 있다는 점입니다..

Close the turtlesim window to stop the node (or go back to the rosrun turtlesim terminal and use ctrl-C). Now let's re-run it, but this time use a Remapping Argument to change the node's name:

$ rosrun turtlesim turtlesim_node __name:=my_turtle

Now, if we go back and use rosnode list:

$ rosnode list
  • You will see something similar to:
  • /rosout

Note: If you still see /turtlesim in the list, it might mean that you stopped the node in the terminal using ctrl-C instead of closing the window, or that you don't have the $ROS_HOSTNAME environment variable defined as described in Network Setup - Single Machine Configuration. You can try cleaning the rosnode list with: $ rosnode cleanup

/my_turtle node를 확인 할 수 있습니다. 다음으로 rosnode 명령어의 ping을 사용해 봅시다.

$ rosnode ping my_turtle
  • rosnode: node is [/my_turtle]
    pinging /my_turtle with a timeout of 3.0s
    xmlrpc reply from http://aqy:42235/     time=1.152992ms
    xmlrpc reply from http://aqy:42235/     time=1.120090ms
    xmlrpc reply from http://aqy:42235/     time=1.700878ms
    xmlrpc reply from http://aqy:42235/     time=1.127958ms


  • roscore = ros+core : master (provides name service for ROS) + rosout (stdout/stderr) + parameter server (parameter server will be introduced later)
  • rosnode = ros+node : ROS tool to get information about a node.
  • rosrun = ros+run : runs a node from a given package.

지금까지 ROS node가 어떻게 동작되는지에 대해 알아 보았습니다.

다음 자습서로 이동합니다. how ROS topics work

Wiki: ko/ROS/Tutorials/UnderstandingNodes (last edited 2019-10-08 06:05:43 by Kang Wonjin)