알 수 없는 사용자 2022. 5. 1. 16:22

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 파일