LoginSignup
29
8

More than 5 years have passed since last update.

mqtt_bridge を作ったよ!

Last updated at Posted at 2016-12-05

簡単な設定で ROS と MQTT を連携できる mqtt_bridge パッケージを作成しました。

主な機能

  • ROS Message 互換の MQTT <--> ROS 連携
  • MQTT における TLS 機能
  • カスタム Bridge の作成機能
  • json または msgpack ベースの MQTT フォーマット。カスタムフォーマットも指定可能。
  • MQTT のトピックパスへの動的な prefix 設定

準備

MQTT Broker の mosquitto とそのクライアントをインストールします。

# apt-get install mosquitto mosquitto-clients

mqtt_bridge は ROS の Package Directory に登録されていないので、 git clone して catkin_make, rodsep install してください。

$ cd ~/catkin_ws/src
$ git clone https://github.com/groove-x/mqtt_bridge
$ cd ~/catkin_ws
$ catkin_make --pkg mqtt_bridge
$ rosdep install mqtt_bridge

デモ

ROS トピックで配信されたメッセージを MQTT へ転送し、それを受信して、改めて ROS メッセージとして配信しなおします。

設定ファイルを作成

下記のような設定ファイルを作成し、

mqtt:
  client:
    protocol: 4      # MQTTv311
  connection:
    host: localhost
    port: 1883
    keepalive: 60
  private_path: device/001
selializer: msgpack:dumps
deselializer: msgpack:loads
bridge:
  # ping pong
  - factory: mqtt_bridge.bridge:RosToMqttBridge
    msg_type: std_msgs.msg:Bool
    topic_from: /ping
    topic_to: ping
  - factory: mqtt_bridge.bridge:MqttToRosBridge
    msg_type: std_msgs.msg:Bool
    topic_from: ping
    topic_to: /pong
  # echo back
  - factory: mqtt_bridge.bridge:RosToMqttBridge
    msg_type: std_msgs.msg:String
    topic_from: /echo
    topic_to: echo
  - factory: mqtt_bridge.bridge:MqttToRosBridge
    msg_type: std_msgs.msg:String
    topic_from: echo
    topic_to: /back
  # private path
  - factory: mqtt_bridge.bridge:RosToMqttBridge
    msg_type: std_msgs.msg:String
    topic_from: /private/echo
    topic_to: ~/echo
  - factory: mqtt_bridge.bridge:MqttToRosBridge
    msg_type: std_msgs.msg:String
    topic_from: ~/echo
    topic_to: /private/back

launch ファイルを記述します。

<launch>
  <arg name="use_tls" default="false" />
  <node name="mqtt_bridge" pkg="mqtt_bridge" type="mqtt_bridge_node.py" output="screen">
    <rosparam file="$(find mqtt_bridge)/config/demo_params.yaml" command="load" />
    <rosparam if="$(arg use_tls)" file="$(find mqtt_bridge)/config/tls_params.yaml" command="load" ns="mqtt" />
  </node>
</launch>

デモノードを実行

デモノードを起動します。

$ roslaunch mqtt_bridge demo.launch

動作確認

ROS の /echo トピックに "hello" を publish すると、

$ rostopic pub /echo std_msgs/String "data: 'hello'"

MQTT の echo トピックに "hello" が転送され、

$ mosquitto_sub -t 'echo'
{"data": "hello"}

それがさらに ROS の /back トピックに配信されます。

$ rostopic echo /back
data: hello
---

You can also see MQTT messages using mosquitto_sub

まとめ

ROS, MQTT 間を手軽にブリッジするための mqtt_bridge パッケージを作成しました。詳しくは mqtt_bridge の README をご確認下さい。なお、ROS, MQTT 間をブリッジするにあたって rosbridge_library で実装されている ROS Message のシリアライザを利用したのですが、便利ですね。

29
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
8