ROS 基于MQTT的通信方式mqtt_bridge | 九七的ROS

基于MQTT的通信方式mqtt_bridge

一、功能介绍

  ROS官方提供了一个叫做mqtt_bridge的功能包,这个功能包提供了ROS与MQTT的双向通信功能。该包主要通过Python3 语言实现(这里划个重点),以下是官网地址:http://wiki.ros.org/mqtt_bridge
  mqtt_bridge可以获取ROS Topic的消息,并固定格式发送给MQTT服务器,基于MQTT协议的传输方式进行双向通信。由于固定了Topic的消息,所以不论在接收和发送都无需进行再次编码,十分的方便。(MQTT协议原理请参考其他相关文档,不作赘述)

二、代码实现

实现过程中是有一些非常yue的坑,一定要仔细。

1.从Github下载mqtt_bridge包源代码

https://github.com/groove-x/mqtt_bridge

2.配置相关环境

sudo apt install python3-pip
sudo apt install ros-melodic-rosbridge-library
sudo apt install mosquitto mosquitto-clients

我用的melodic,其他版本自行修改。这里不算多坑,一般就是网络不行,即可。

3.安装相关依赖

官方给的教程是这样的

pip3 install -r requirements.txt

但这一步有坑!!!一定会报错,主要原因是ros默认使用python2,而mqtt_bridge包使用的是python3编写的(这里明白为什么上面划重点了吧),因此需要用python3进行安装。解决办法如下:
主目录找到.bashrc文件,Crtl+H显示隐藏文件就看到了。打开后,末尾加入一行代码:

alias python=python3

此时你还不一定能用,因为你的pip3不一定是最新版本,所以可能无法找到比较新的依赖,而mqtt_bridge包却又使用比较新的依赖。因此要更新pip3:

sudo python3 -m pip install --upgrade pip

这时候,安装就没问题了,如果还有什么问题的话,那就是老规矩,了。直接执行即可。

sudo pip3 install -r requirements.txt

4.编译

这个就不需要多说了,可以放入自己已有的工作空间,或者新建,进行编译:

catkin_make

5.配置环境变量后即可使用

source devel/setup.bash

启动自带的demo

roslaunch mqtt_bridge demo.launch

6.大坑!!!

我们用的时候会发现在编写factory的tpye时候肯定是复制ROS Topic的type,但是!他们的书写方式根本不一样!yaml里面的数据类型写法是mqtt_bridge自己的,和ros里面的tpye并不一样!!!
比如ros里面:geometry_msgs/Twist
在mqtt_bridge里面却是:geometry_msgs.msg:Twist
如果不这么写它连数据格式都找不到,巨坑啊有没有!就好比你在写C++代码本来是int a,结果人家要你写成integer a。关键是人家还不告诉你要这么写!要不是博主当时小学数学找规律的灵感突然附身,怎么也想不到这个。

来自:九七的ROS(转载请注明出处)

你可能感兴趣的:(九七的ROS,mqtt_bridge,mqtt,ros,通信)