mqtt_bridge 官方介绍
mqtt_bridge provides a functionality to bridge between ROS and MQTT in bidirectional.
mqtt_bridge uses ROS message as its protocol. Messages from ROS are serialized by json (or messagepack) for MQTT, and messages from MQTT are deserialized for ROS topic. So MQTT messages should be ROS message compatible. (We use rosbridge_library.internal.message_conversion for message conversion.)
This limitation can be overcome by defining custom bridge class.
ROS官方提供了一个叫做mqtt_bridge的功能包,这个功能包提供了ROS与MQTT的双向通信功能。该包主要通过Python3 语言实现(这里划个重点),以下是官网地址:http://wiki.ros.org/mqtt_bridge

在ROS系统中我们希望通过mqtt的方式进行通信,在Topic中进行读写操作。我们采用的方式就是通过ROS官方推出的mqtt_bridge软件包实现。
安装ROS (非ROS2) 操作环境:Ubuntu 20.04.5
一、前置操作:
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list' - sudo apt install curl # if you haven't already installed curl
- curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo apt update 二、安装
我们无可视化图形界面,只需要ROS-Base即可
sudo apt install ros-noetic-ros-base
三、环境配置
您必须在使用 ROS 的每个bash终端中获取此脚本。
source /opt/ros/noetic/setup.bash
或者将该语句写进.bashrc配置中,以至每次启动新shell时会自动获取此脚本
- echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
- source ~/.bashrc
roscore
一、前置条件 :
- sudo apt install python3-pip
- sudo apt install ros-noetic-rosbridge-library
- sudo apt install mosquitto mosquitto-clients
二、安装mqtt_bridge
从ROS官方安装软件包(因为本机服务器没有vpn所以无法去git下载项目)
sudo apt install ros-noetic-mqtt-bridge
三、环境配置
安装完成之后,去配置 dev-requirements.txt 文件 (最新版将该文件删掉了)
- cd /opt/ros/noetic/share/mqtt_bridge
- vim /opt/ros/noetic/share/mqtt_bridge/requirements.txt
- # thanks to rospypi project, we can install ros packages in pure python
- # See: https://github.com/rospypi/simple
- --extra-index-url https://rospypi.github.io/simple/
- catkin-pkg
- geometry-msgs
- inject>=4.0
- mock
- msgpack-python>=0.4.8
- paho-mqtt>=1.2
- pymongo
- pytest
- pyyaml
- rosgraph
- rosgraph-msgs
- roslib
- rosmsg
- rospy<1.15 # 1.15 is for python3
- rostest
- sensor-msgs
- std-msgs
四、安装Python模块
pip3 install -r requirements.txt
五、修正错误(当前版本有一层config/config/,会报错找不到文件)
mv /opt/ros/noetic/share/mqtt_bridge/config/config/* /opt/ros/noetic/share/mqtt_bridge/config
六、启动节点
roslaunch mqtt_bridge demo.launch
发布
- rostopic pub /ping std_msgs/Bool "data: true"
-
- rostopic pub /echo std_msgs/String "data: 'hello'"
订阅
- rostopic echo /pong
- data: True
- ---
-
- rostopic echo /back
- data: hello
- ---
若完全按照以上教程还是出现报错情况则有可能的情况
一、安装mqtt_bridge时报错: Python版本不一致
主要原因是ros默认使用python2,而mqtt_bridge包使用的是python3编写的,因此需要用python3进行安装。解决办法如下:
- vim /root/.bashrc
- #末尾添加如下
- alias python=python3
此时你还不一定能用,因为你的pip3不一定是最新版本,所以可能无法找到比较新的依赖,而mqtt_bridge包却又使用比较新的依赖。因此要更新pip3:
sudo python3 -m pip install --upgrade pip
二、安装ROS时报错 :
1.创建ROS工作空间
- $ mkdir -p ~/catkin_ws/src
- $ cd ~/catkin_ws/
- $ catkin_make
刷新配置 :
source devel/setup.bash
2.ROS的工具包初始化 : 有可能是因为一些工具包没有进行初始化而造成的报错
安装依赖
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
初始化 rosdep
- sudo apt install python3-rosdep
-
- sudo rosdep init
- rosdep update