...
POST No. 2590339
터틀봇 OpenCR과 SBC 역할
2019-02-07 16:52:03 mgkim3070

터틀봇3 와플파이 사용중입니다.

OpenCR과 Raspberry Pi가 사용되는데 각 보드의 역할 및 ROS 구조가 어떻게 되는지 궁금합니다.

OpenCR에는 아두이노 기반의 turtlebot3_core 펌웨어가 올라가는것 같고,

Raspberry Pi에는 ROS의 bringup package가 구동되는 것 같습니다. 

 

1. OpenCR도 ROS 노드이고, RaspberryPi bringup도 또다른 ROS 노드가 되어 정보를 주고받는 것인가요?

 

2. 만약 그렇다면 OpenCR에 올라가는 펌웨어가 구동되는 것은 전원이 켜진 순간이며, 그때 OpenCR 노드가 생성되는 것이고, bringup package가 실행될때는 Raspberry Pi의 노드가 생성되고, 기존에 실행된 OpenCR의 노드와 커넥션을 만드는 것인가요?

 

3. Master node에서 보이는 node list에 뜨는 turtlebot3_core, turtlebot3_diagnostics, turtlebot3_lds는 RaspberryPi의 노드인가요, 아니면 OpenCR의 노드인가요?

 

4. 위의 추론이 맞다면, Raspberry Pi의 bringup package에서 하는 일은 remote PC와 OpenCR간의 무선 네트워크 연결밖엔 없는 건가요? (라즈베리캠 및 라이다 기능 제외) 

2019-02-07 16:52:03
mgkim3070
2019-02-08 13:05:13 유기웅

안녕하세요.

 

1. OpenCR과  Raspberry Pi(이하 RP)는 서로 serial 통신을 합니다. RP에서 실행시키는 core.launch 파일에 포함되어 있는 rosserial 패키지는 해당 serial 통신 정보를 TCP/IP 통신으로 변환하여 ROS 노드를 생성합니다.

2. 펌웨어가 구동되는 순간부터 코드는 동작하지만 노드는 생성되지 않습니다. 추후 core.launch 파일을 동작시켜야만 노드가 생성됩니다. 

3. turtlebot3_core는 RP에서 실행시킨 rosserial_python 노드의 이름이지만 실제 동작은 OpenCR에서 수행됩니다. 나머지 두개는 RP에서 돌아가는 노드입니다.

4. RP는 OpenCR과의 시리얼 통신 데이터를 ROS 노드로 변환시켜주는 일을 함과 동시에 remotePC와의 동일 네트워크 상에 존재 함으로서 로봇의 정보를 교환하는 일을 합니다.

감사합니다.
comment
2019-02-08 13:20:41 mgkim3070
정성스러운 답변 감사합니다. 답변주신 내용중, 펌웨어가 구동되는 순간부터 코드는 동작하나, 노드는 생성되지 않는다고 하셨는데, turtlebot3_core 스케치 코드 setup 함수에서 처음에 nh.initNode()를 수행하는데, 혹시 OpenCR에 올라가는 펌웨어가 이 코드가 아닌가요?
2019-02-08 13:20:41
mgkim3070
2019-02-08 13:05:13
ykw4463
2019-02-08 13:39:04 유기웅
네. 코드를 따라가시면 initNode 함수에서는 하드웨어와 변수 초기화 정도밖에 하지 않습니다.
https://github.com/ROBOTIS-GIT/OpenCR/blob/1b9b1b7051aa9c7a4e41338fcdf0496c59f37abb/arduino/opencr_arduino/opencr/libraries/turtlebot3_ros_lib/ros/node_handle.h#L159

ros에서 확인하실 수 있는 노드는 rosserial 패키지 안의 serial_node.py에서 초기화 됩니다.

OpenCR에 올라가는 펌웨어는 그 코드가 맞습니다.
comment
2019-02-08 14:07:54 mgkim3070
와, 감사합니다. 완전 깔끔하게 이해되었습니다
2019-02-08 14:07:54
mgkim3070
2019-02-08 13:39:04
ykw4463
답변달기
웹에디터 시작 웹 에디터 끝