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
整体流程图
- 安装mqtt_bridge 和 mosquitto 模块
- 通过mqtt_bridge 的 demo_params.yaml 配置文件可知Ros内部topic与外部的映射关系,我们想/echo发布数据
一、功能介绍
在ROS系统中我们希望通过mqtt的方式进行通信,在Topic中进行读写操作。我们采用的方式就是通过ROS官方推出的mqtt_bridge软件包实现。
二、安装ROS
安装ROS (非ROS2) 操作环境:Ubuntu 20.04.5
一、前置操作:
- 查看本机版本号:cat /etc/issue
- 下载对应的ROS版本:ROS/Installation - ROS Wiki
- 设置国内镜像
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 -
- 确保您的 Debian 软件包索引是最新的
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
三、安装mqtt_bridge
一、前置条件 :
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
四、测试ROS内部Topic
发布
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
---
五、启动shifu并编写mqtt配置文件
五、报错解决
若完全按照以上教程还是出现报错情况则有可能的情况
一、安装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