-
[ROS] 기본개념Engineer/Robotic 2016. 4. 14. 22:01
안녕하세요.꿈꾸는 개발자 몽키준 입니다.
이번에는 ROS에서 사용되는 기본 개념들에 대해 알아보려고 하는데요.
해당 내용은 ROS tutorials[1] 과 오로카 오프라인 모임 중 하나인 #아스라다 팀에서 배운 내용[2]을 바탕으로 정리하였으며 더 자세한 내용은 아래 reference를 참고해주세요.
Created Data : 2016.04.14
Last Updated : 2016.04.18
1. 노드(NODE)
노드란 최소 기능을 수행하는 프로세스를 말하며, 로봇은 여러개의 노드를 수행하게 된다. 각 노드 간에는 Topic 이나 service 를 이용하여 메세지를 통해 서로 통신을 하게 된다.
1-1 Node Tool
rosnode 는 CLT(Command Line Tool) 중 하나로, 실행 중인 노드의 정보를 표시하는 커멘드이다.
1-2 Command-Line Remapping Arguemnt
Node 내에 존재하는 ROS name 은 Command-Line 상에서 Remapping 이 가능하다. 즉, Command-Line 에서 다양한 설정을 가진 동일한 Node 를 실행시킬 수 있다. syntax name:=new_name 형식으로 인수(Argument) 리매핑을 통해 노드 간에 전달이 가능하다.
ex) rosrun rospy_tutorials talker chatter:=/wg/chatter
1-3 Pushing down
환경 변수 ROS_NAMESPACE를 이용하여 실행되는 노드의 namespace 를 변경할 수 있는데 이런 효과를 Child node 에 Pushing down 한다고 한다.
1-4 노드 파라미터 할당
Private parameter를 Command-Line 에서 Singleunderscore, '_' 를 가지고 직접 할당할 수 있다.
rosrun rospy_tutorials talker _param:=1.0
1-5 스페셜 키(Special Keys)
__name
노드의 이름을 위한 예약어로 노드의 실제 이름을 알고 있지 않더라도 노드 이름 리매핑과 같은 명령을 수행할 수 있다.
__log
노드의 로그 파일의 위치를 지정할 수 있는 예약어이지만 실제 사용은 제한적이다. 주로 roslaunch 와 같은 ROS 툴에서 사용된다.(Not encouraged)
__ip & __hostname
ROS_IP 와 ROS_HOSTNAME을 지칭하는 예약어로 환경 변수 설정과 같은 특별한 경우에만 사용된다.(Not encouraged)
__master :
ROS_MASTER 를 지칭하는 예약어로 환경 변수 설정과 같은 특별한 경우에만 사용된다.(Not encouraged)
__ns
ROS_NAMESPACE를 지칭하는 예약어로 환경 변수 설정과 같은 특별한 경우에만 사용된다.(Not encouraged)
2. 메세지(Messages)
노드간에 주고 받는 데이터 포맷을 의미하는 용어로 integer, float, boolean 과 같은 데이터 타입을 가지고 있다.
2-1 msg
위치 : ~/catkin_ws/src/[package]/msg
int64 num
2-2 srv
위치 : ~/catkin_ws/src/[package]/srv
int64 A <--- input
int64 B
---
int64 result <--- output
2-3 rosmsg
Command line tool 로 msg 정보를 보여준다.
$> rosmsg --show [package_name]
3. 토픽(Topic)
1:1, 1:N, N:N 노드간에 메세지를 주고받는 단방향 통신으로 발행자(Publisher) 와 Subscriber 로 구성된다. 이때 roscore는 새로 등록되는 Publisher 또는 Subscriber 를 이미 등록되어 실행되고 있는 노드들에게 알려주는 역할만 수행하며 실제 메세지는 노드간(Publisher/Subscriber) 간에 통신이 이뤄진다.
4. 서비스
1:1 또는 1:N 노드간에 메세지를 주고받는 양방향 통신으로 데이터를 요청하는 Client 와 이를 수행하는 서버로 구성된다.
- reference -
[1] ros tutorial
[2] ros 강의 by 표윤석님
[3] roscpp api
'Engineer > Robotic' 카테고리의 다른 글
[ROS] install roscore (0) 2016.09.22 [ROS] run node with gdb (0) 2016.08.23 [ROS] 노드 리매핑 (0) 2016.06.01 [ROS] catkin 빌드 후 패키지를 못찾는 문제 (2) 2016.05.31 [ROS] 시작하며... (0) 2015.12.21