rosbridge
https://carla.readthedocs.io/projects/ros-bridge/en/latest/ros_installation_ros1/
http://wiki.ros.org/rosbridge_suite/Tutorials/RunningRosbridge
http://wiki.ros.org/rosbridge_suite/Tutorials/DevelopingRosbridge
참고
예제
https://github.com/nickvaras/rosbridge-websocket-examples
from ws4py.client.threadedclient import WebSocketClient
예제 설명 : 웹 소켓을 통해 rosbridge를 사용하여 모바일 로봇을 제어하기 위한 베어본 예제 미니 드라이버 세트.
ws4py라는 library 를 이용한 rosbridge 예제다. 따라서 server가 따로 없음, roscore처럼 떠있는 상태
ubuntu18.04 bionic , ros1 melodic ,
코드
<launch>
<arg name="port" default="9090" />
<arg name="address" default="0.0.0.0" />
<arg name="ssl" default="false" />
<arg name="certfile" default=""/>
<arg name="keyfile" default="" />
<arg name="retry_startup_delay" default="5" />
<arg name="fragment_timeout" default="600" />
<arg name="delay_between_messages" default="0" />
<arg name="max_message_size" default="None" />
<arg name="unregister_timeout" default="10" />
<arg name="websocket_external_port" default="None" />
<arg name="use_compression" default="false" />
<arg name="authenticate" default="false" />
<arg name="websocket_ping_interval" default="0" />
<arg name="websocket_ping_timeout" default="30" />
<arg name="websocket_null_origin" default="true" />
<arg name="topics_glob" default="[*]" />
<arg name="services_glob" default="[*]" />
<arg name="params_glob" default="[*]" />
<arg name="bson_only_mode" default="false" />
<!-- Output: screen, log -->
<arg name="output" default="screen" />
<!-- Valid options for binary_encoder are "default", "b64" and "bson". -->
<arg unless="$(arg bson_only_mode)" name="binary_encoder" default="default"/>
<group if="$(arg ssl)">
<node name="rosbridge_websocket" pkg="rosbridge_server" type="rosbridge_websocket" output="$(arg output)">
<param name="certfile" value="$(arg certfile)" />
<param name="keyfile" value="$(arg keyfile)" />
<param name="authenticate" value="$(arg authenticate)" />
<param name="port" value="$(arg port)"/>
<param name="address" value="$(arg address)"/>
<param name="retry_startup_delay" value="$(arg retry_startup_delay)"/>
<param name="fragment_timeout" value="$(arg fragment_timeout)"/>
<param name="delay_between_messages" value="$(arg delay_between_messages)"/>
<param name="max_message_size" value="$(arg max_message_size)"/>
<param name="unregister_timeout" value="$(arg unregister_timeout)"/>
<param name="use_compression" value="$(arg use_compression)"/>
<param name="websocket_ping_interval" value="$(arg websocket_ping_interval)" />
<param name="websocket_ping_timeout" value="$(arg websocket_ping_timeout)" />
<param name="websocket_external_port" value="$(arg websocket_external_port)" />
<param name="websocket_null_origin" value="$(arg websocket_null_origin)" />
<param name="topics_glob" value="$(arg topics_glob)"/>
<param name="services_glob" value="$(arg services_glob)"/>
<param name="params_glob" value="$(arg params_glob)"/>
</node>
</group>
<group unless="$(arg ssl)">
<node name="rosbridge_websocket" pkg="rosbridge_server" type="rosbridge_websocket" output="$(arg output)">
<param name="authenticate" value="$(arg authenticate)" />
<param name="port" value="$(arg port)"/>
<param name="address" value="$(arg address)"/>
<param name="retry_startup_delay" value="$(arg retry_startup_delay)"/>
<param name="fragment_timeout" value="$(arg fragment_timeout)"/>
<param name="delay_between_messages" value="$(arg delay_between_messages)"/>
<param name="max_message_size" value="$(arg max_message_size)"/>
<param name="unregister_timeout" value="$(arg unregister_timeout)"/>
<param name="use_compression" value="$(arg use_compression)"/>
<param name="websocket_ping_interval" value="$(arg websocket_ping_interval)" />
<param name="websocket_ping_timeout" value="$(arg websocket_ping_timeout)" />
<param name="websocket_external_port" value="$(arg websocket_external_port)" />
<param name="topics_glob" value="$(arg topics_glob)"/>
<param name="services_glob" value="$(arg services_glob)"/>
<param name="params_glob" value="$(arg params_glob)"/>
<param name="bson_only_mode" value="$(arg bson_only_mode)"/>
</node>
</group>
<node name="rosapi" pkg="rosapi" type="rosapi_node" output="$(arg output)">
<param name="topics_glob" value="$(arg topics_glob)"/>
<param name="services_glob" value="$(arg services_glob)"/>
<param name="params_glob" value="$(arg params_glob)"/>
</node>
</launch>
rosbridge 에 대한 내용은 크게는 없고
launch 파일로 rosbridge 를 키는데 종류가 3개 있다.
1 tcp , 2 udp , 3 websocket
근데 주로 web소켓을 많이 쓰는거 같으니 web 소켓통신만 정리할거임.

rosbridge_websocket.launch 파일을 보면 여러 설정할 수 있는 부분들이 있고
젤로 중요한게 위 사진에 port 랑 address임.
rosbridge 키는법
roslaunch rosbridge_server rosbridge_websocket.launch <- 3.websocket을 킬때 이거 사용
ps>
포트번호를 키면서 지정하고 싶으면
roslaunch rosbridge_server rosbridge_websocket.launch port:=10000 <- 포트 10000번으로 websocket을 켜라 의미
예제파일을 보면
이런식으로 되어 있음. adress/port 넣어서 'my_websocket_client' 로 객체 선언하고 my_websocket_client.~~~ 이런식으로 커넥트도 하고, jason 파일로 data도 받는 중
driver_use.py 파일

여기는 ws4py 라이브러리를 클래스에 상속시키고 ,
상속된 ws4py 코드에 인자로 전달받은 address랑 port 를 넘겨줘서 접근하게끔 사용함.
빨간선이 상속 노란선이 인자
driver.py 파일
