參考:NCRL_MQTT


MQTT Server (Broker)

外網

首先查詢自己外網ip,交大都是(140.113.X.X):

$ cd /etc/mosquitto/config.d/ $ sudo vim default.conf

寫完 default.conf 後重啟 mosquitto 服務

$ sudo systemctl restart mosquitto.service

內網

首先查詢內網ip (192.168.X.X):
登入路由器做port fowarding:

設定完路由器設定 mosquitto

$ cd /etc/mosquitto/config.d/ $ sudo vim default.conf

寫完 default.conf 後重啟 mosquitto 服務

$ sudo systemctl restart mosquitto.service

Client

Client OS ubuntu 20.04

Client OS not ubuntu 20.04

1. Prerequisites

For Linux : $ sudo apt-get install docker.io For Rpi : $ curl -fsSL https://get.docker.com/ | sh # 打完下面這行要logout $ sudo usermod -aG docker ${使用者名稱}
  • download ncrl_mqtt repo
$ cd # download repo for docker usage $ git clone https://github.com/leeandy0822/ncrl_mqtt.git $ cd ncrl_mqtt # run docker $ source docker_run.sh #catkin_make and load env parameters $ source env.sh


Authorization

1. broker 端新增 password file

  • move to /etc/mosquito
$ cd /etc/mosquito # 新增一個 password file $ sudo mosquitto_passwd -c <password file name> <name> # example $ sudo mosquitto_passwd -c password ncqq # 打密碼和確認密碼 $ vim password # username:log $ sudo vim acl

2. 重啟 broker 端 server

$ sudo service mosquitto restart

3. 所有 client 都要新增 password 設定

$ cd ws/src/mqtt_client/config $ vim params.yaml # 在 broker 下面新增 user: <name> 和 pass: <password>並打上

帳號密碼要用在broker設定好
以下為實驗室例子:


讀取topic

啟動mqtt_client以讀取數據,每個client都要打

$ roslaunch mqtt_client standalone.launch

可以用以下方式檢查是否能成功讀取

ROS Input MQTT ROS Output
/ping/ros pingpong/ros /pong/ros

client1:

$ rostopic pub -r 1 /ping/ros geometry_msgs/Point "x: 3.0 y: 3.0 z: 3.0"

client2:

$ rostopic echo /pong/ros

接下來內容為無人機讀取


Upstart

我們的樹梅派連接dongle,因為要再不同網域下ssh連到樹梅派有點麻煩,所以使用較簡單的方法,在開啟時同時啟動mqtt和mavros

以下指令皆在無人機上的樹梅派輸入當 client1

$ cd catkin_ws/src/mqtt_client/launch $ vim launch_both.launch

$ sudo apt install ros-noetic-robot-upstart $ rosrun robot_upstart install --master "http://localhost:11311" --setup /home/ubuntu/formation_ws/devel/setup.bash mqtt_client/launch/launch_both.launch --job upstart_test --symlink

設定MQTT參數:

$ cd catkin_ws/src/mqtt_client $ vim parmas.yaml

可以選其他topic與mqtt連接
重啟mqtt_client服務:

$ sudo service upstart_test restart

以下指令皆在其他電腦輸入當 client2

設定MQTT參數:

$ cd catkin_ws/src/mqtt_client $ vim parmas.yaml

啟動mqtt_client以讀取數據

$ roslaunch mqtt_client standalone.launch

在終端機開啟其他分頁,並輸入想要看得topic,例如:

$ rostopic echo /mavros/state

將mqtt與ros的橋架好後即可做數值讀取, 飛控


備註:

部分文章直接引用實驗室內容 https://hackmd.io/_ktvIEz5S4-YAGB62iy8Yw?view

Select a repo