Sunday, Jan 3, 2016
####본 내용은 개념적인것임으로 기존에 설명된 자료들을 이야기 하고 넘어가도록 하겠다. 한국어로 설명된 카페의 내용이다. http://cafe.naver.com/openrt/2468 ####이하 내용은 wiki.ROS.org 에 게시된 튜토리얼을 대충 번역한것이다. http://wiki.ros.org/ROS/Tutorials/UnderstandingNodes
###사전작업
이 튜토리얼을 위해서 우리는 가벼운 시뮬레이터를 사용할것이다.
$ sudo apt-get install ros-<distro>-ros-tutorials
<distro>
부분을 당신이 사용하는 배포판으로 대체해서 사용하면 된다.(e.g. hydro, groovy, electric, fuerte etc.)
###그래프컨셉을 빠르게 리뷰하기
###Nodes 노드
노드는 로스 패키지내에서 실행 가능한것 이상이 아니다. 로스 노드는 로스 클라이언트 라이브러리를 사용해서 다른 노드들과 통신한다. 노드들은 토픽을 발행하거나 구독 할 수 있다. 노드들은 서비스를 제공하거나 사용할 수 있다.
###Client Libraries
로스 클라이언트 라이브러리는 서로 다른 언어로 작성된 노드끼리 통신 할 수 있도록 해준다.
rospy = python client library
roscpp = c++ client library
###roscore
roscore 는 로스르 이용해서 실행해야할 첫번째것이다.
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
SUMMARY
========
PARAMETERS
* /rosversion
* /rosdistro
NODES
auto-starting new master
process[master]: started with pid [13054]
ROS_MASTER_URI=http://machine_name:11311/
setting /run_id to 9cf88ce4-b14d-11df-8a75-00251148e8cf
process[rosout-1]: started with pid [13067]
started core service [/rosout]
만약 로스코어가 초기화 되어있지 않았으면 아마 당신은 네트워크 설정 문제가 있을것이다.Network Setup - Single Machine Configuration 만약 로스코어가 초기화 되지 않고 퍼미션이 부족하다는 메세지를 보았으면 아마도 ~/.ros 경로를 루트가 소유하고 있을것이다. 다음 명령어도 해결 할수 있다.
$ sudo chown -R <your_username> ~/.ros
###Using rosnode
roscore를 켜둔채로 새로운 터미널을 열어서 로스 노드를 사용해 보자
rosnode
는 ROS에서 현재 동작중인 노드들에 대한 정보를 보여준다.
$ rosnode list
/rosout
이것은 우리에게 rosout
한개의 노드만이 실행중이라고 보여준다. 이것은 항상 실행되며 노드에 대한 디버깅 출력되 로그를 모은다.
rosnode
명령어는 특정 노드에 대한 정보만 리턴 할 수도 있다.
$ rosnode info /rosout
Node [/rosout]
Publications:
* /rosout_agg [rosgraph_msgs/Log]
Subscriptions:
* /rosout [unknown type]
Services:
* /rosout/set_logger_level
* /rosout/get_loggers
contacting node http://machine_name:54614/ ...
Pid: 5092
이제 더 많은 노드들을 봐보자, 이것을 위해 우리는 rosrun을 이용해서 다른 노드들을 가져와 볼 것 이다.
###Using rosrun
rosrun
은 패키지 이름을 이용해서 직접적으로 패키지에 있는 노드를 구동 할 수 있게 해준다.(알고 있는 패키지 경로에 대해서만).
Usage:
#rosrun [package_name] [node_name]
$ rosrun turtlesim turtlesim_node
당신은 turtlesim 창을 볼 수 있을것이다.
In a new terminal:
$ rosnode list
/rosout
/turtlesim
강력한 로스의 기능중 하나는 커맨드라인에서 노드의 이름을 다시 할당 할수 있는것이다.
turtlesim window를 닫아 노드를 중단시키고 (혹은 터미널에서 컨트롤+C를 누르고 재실행하는데 다음과 같이 아규먼트를 줄것이다.
$ rosrun turtlesim turtlesim_node __name:=my_turtle
이제 다시 노드들의 리스트를 보면
$ rosnode list
/rosout
/my_turtle
제대로 안닫긴 노드가 리스트에 보일때는 $ rosnode cleanup
을 이용해서 클린업 할 수 있다.
rosnode 를 이용해서 노드에다가 핑을 날려볼수도 있다.
$ 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
###Review What was covered:
Now that you understand how ROS nodes work, let’s look at how ROS topics work. Also, feel free to press Ctrl-C to stop turtlesim_node.