Engineering/ROS

ROS2 Node Interface, Parameter, Namespace

luckydipper 2025. 1. 14. 21:05

지난 포스팅에서 Package와 Node에 관해 정리했다.
요약하면, Package는 Node들의 집합과 이를 실행하는 launch file로 된 것이고, Node는 우리가 RCL(ROS Client Library)를 활용하여 만드는 Process이다. Node(Process) 간의 통신 방식은 3가지이다. Topic, Service, Action 관계는 아래 그림과 같다.

https://cafe.naver.com/openrt/24086

Node Interface

Node 간 데이터를 주고받는 형식이다. Interface에는 IDS(Interface Definition Language)와 msg, srv, action이 있다. msg는 Topic에서 주고받는 데이터, srv는 service에서 주고받는 데이터, action은 action에서 주고받는 데이터이다. 이 데이터들은 Interface file에 저장돼 있다. 아래 파일은 그 예시이다.

//filename.msg || filename.srv || filename.action
field_type1 field_name1
field_type2 field_name2
field_type3 field_name3
--- // 서비스와 action은 아래 bar로 feedback 과 response에 관한 interface도 정의해야 한다. 

Node Parameter

Parameter는 Node안에 있는 Parameter Server이다. 전역변수로 해당 노드의 필요한 정보를 Get 하고 Set 할 수 있다. 따로 컴파일하지 않고 고칠 수 있는 부분이다.

//example
ros2 param list
ros2 param describe <>

node를 실행할 때 3가지 방식으로 parameter를 줄 수 있다. 대체하거나, 세팅하거나, 파일로 줄 수 있다.

// remapped using the syntax -r <old name>:=<new name>.
// --ros-args -p param_name:=param_value //setting
// --ros-args --params-file demo_params.yaml // from file => 
ros2 param dump /turtlesim // turtlesim noded안의 parameter setting을 다운 받음

Namespace vs ROS_DOMAIN_ID

Parameter는 Node안에 있는 Parameter Server이다. 전역변수로 해당 노드의 필요한 정보를 Get 하고 Set 할 수 있다. 따로 컴파일하지 않고 고칠 수 있는 부분이다. 같은 네트워크를 공유할 경우 namespace는 다른 rqt에서도 보인다. 그러나 DOMAIN ID를 나누면, 다른 default domain id에선 안 보인다. 

// Domain ID
export ROS_DOMAIN_ID=11 //0~101
// Namespace
ros2 run turtlesim turtlesim_node --ros-arg -r __ns:=/namespace1

ps.

  • rosout이라는 topic에 의해 Node의 log를 볼 수 있다. DEBUG, INFO, WARN, ERROR, FATAL

ref.

'Engineering > ROS' 카테고리의 다른 글

ROS2 표준 시간, 좌표계  (0) 2025.01.12
ROS2 참고 사이트  (0) 2025.01.10
ROS2 빌드, 파일 시스템  (0) 2025.01.08
Docker로 ROS를 사용하면 안 되는 이유  (0) 2025.01.06
ROS2, DDS와 QoS  (0) 2025.01.04