<aside> 💡 출처 : https://www.robotstory.co.kr/king/?vid=898
</aside>
ROS2는 UDP를 기반으로 DDS-RTPS 프로토콜을 통해 통신합니다. 그러므로 웹브라우저같은 TCP를 기반으로 통신하는 어플리케이션은 원래 ROS와 커뮤니케이션이 불가합니다. 하지만 이를 가능하게 하는 모듈이 있는데 바로 rosbridge 패키지입니다. rosbridge는 ROS 환경에서 실행되는 노드로, 웹소켓을 생성하여 ROS와 비ROS 사이에 JSON 형식으로 통신함으로써 ROS의 범용성을 높여줍니다.
예제를 통해 확인해보도록 합시다. ROS2 버전은 foxy 이고, 파이썬에서 roslibpy 모듈을 통해 비ROS 환경에서 ROS와 통신해보겠습니다.
우선 다음 명령어를 통해 rosbridge 패키지를 설치합니다.
$ sudo apt install ros-foxy-rosbridge-suite
pip를 통해 roslibpy 모듈도 설치합시다.
$ sudo pip install roslibpy
다음으로 ros2의 launch 명령어를 통해 브릿지 서버를 실행합니다.
$ ros2 launch rosbridge_server rosbridge_websocket_launch.xml
9090 포트를 통해 웹소켓이 생성되었습니다!
우선 발행자(Publisher) 모듈을 만들어 토픽을 발행해 보겠습니다.
$ touch publisher.py && xed publisher.py
import time
import roslibpy
client = roslibpy.Ros(host='localhost', port=9090)
client.run()
publisher = roslibpy.Topic(client, 'topic', 'std_msgs/String')
while client.is_connected:
publisher.publish(roslibpy.Message({'data': 'Hello World!'}))
print('Sending message...')
time.sleep(1)
publisher.unadvertise()
client.terminate()