基于ROS的消息发布与订阅

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: ROS消息发布与订阅

基于ROS的消息发布与订阅

1.  创建资源

开始实验之前,您需要先创建实验相关资源。

  1. 在实验室页面,单击创建资源
  2. (可选)在实验室页面左侧导航栏中,单击云产品资源列表,可查看本次实验资源相关信息(例如IP地址、子用户信息等)。

说明:资源创建过程需要3~5分钟视资源不同开通时间有所差异,ACK等资源开通时间较长。完成实验资源的创建后,您可以在云产品资源列表查看已创建的资源信息,例如:子用户名称、子用户密码、AK ID、AK Secret、资源中的项目名称等。

实验环境一旦开始创建则进入计时阶段,建议学员先基本了解实验具体的步骤、目的,真正开始做实验时再进行创建。

资源创建成功,可在左侧的资源卡片中查看相关资源信息以及RAM子账号信息

2.  进入Docker镜像

打开火狐浏览器。

通过RAM用户名密码登录页面,输入子用户密码登录账号。

登陆后选择左侧产品与服务中的云服务器ECS。

在所有云服务器中通过左下角地域找到正确的服务器并点击远程连接。

选择通过VNC远程连接。

选择重置VNC密码并设置新的密码后登录。

设置好进入各选项后进入Ubuntu桌面。

右键打开终端,输入sudo docker run -it --rm -p 6080:80 aliyun_demo命令运行镜像aliyun_demo。

运行成功后打开浏览器,在地址一栏输入127.0.0.1:6080进入镜像系统。

3.  代码部分【python实现消息的发布与订阅】

python版本的节点发布与订阅由pub1.py和sub1.py实现。

在pub1.py中首先新建一个名为pub1的节点。

if __name__ == '__main__':
    rospy.init_node("pub1")
    test1()
    rospy.spin()
    pass

在函数test1中创建/test1主题,发布的是Twist类型的消息。随后新建一个Twist消息并设置好内容后发布。

def test1():
    while True:
        pub = rospy.Publisher("/test1", Twist, queue_size=10)
        twist = Twist()
        twist.linear.x = 1.0
        twist.angular.z = 1.0
        pub.publish(twist)

在sub1.py中首先新建一个名为sub1的节点并订阅/test1主题。

if __name__ == '__main__':
    rospy.init_node("sub1")
    rospy.Subscriber("/test1", Twist, test1)
    rospy.spin()
    pass

随后在回调函数test1中打印消息。

def test1(msg):
    print(msg)
    pass

4.  代码部分【C++实现消息的发布与订阅】

C++版本的节点发布与订阅由pub2.cpp和sub2.cpp实现。

在pub2.cpp中首先新建一个名为pub2的节点。创建/test2主题,发布的是Twist类型的消息。随后新建一个Twist消息并设置好内容后发布。

#include "ros/ros.h"
#include "geometry_msgs/Twist.h"
int main(int argc, char** argv)
{
  ros::init(argc, argv, "pub2");
  ros::NodeHandle node;
  geometry_msgs::Twist msg;
  ros::Publisher pub = node.advertise<geometry_msgs::Twist>("/test2", 10);
  while (ros::ok())
  {
    ros::spinOnce();
    msg.linear.x = 1.0;
    msg.angular.z = 1.0;
    pub.publish(msg);
  }
  return 0;
};

在sub2.cpp中首先新建一个名为sub2的节点并订阅/test2主题。在回调函数test2中打印消息。

int main(int argc, char **argv)
{
  ros::init(argc, argv, "sub2");
  ros::NodeHandle node;
  ros::Subscriber sub = node.subscribe("/test2", 1, test2);
  while (ros::ok())
  {
    ros::spinOnce();
  }
  return 0;
}
void test2(const geometry_msgs::Twist::ConstPtr& msg)
{
    ROS_INFO("speed:%.2f,steer:%.2f",msg->linear.x,msg->angular.z);
}

5.  实验操作

新建终端,输出roscore启动Master。

打开终端,输入如下命令开启pub1

cd aliyun_demo
source devel/setup.bash
rosrun raceworld pub1.py

打开终端,输入如下命令开启sub1。终端中可以看到输出。

cd aliyun_demo
source devel/setup.bash
rosrun raceworld sub1.py

打开终端,输入如下命令开启pub2

cd aliyun_demo
source devel/setup.bash
rosrun raceworld pub2

打开终端,输入如下命令开启sub2。终端中可以看到输出。

cd aliyun_demo
source devel/setup.bash
rosrun raceworld sub2

打开终端,输入rostopic list命令查看当前所有rostopic。可以找到我们代码中新建的/test1和/test2主题。

分别输入rostopic info /test1和rostopic info /test2可以查看每个主题的发布者与订阅者。

实验链接:https://developer.aliyun.com/adc/scenario/271ab334484845b8acb6ddc35a007d81

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
相关文章
|
4天前
|
消息中间件 弹性计算 物联网
MQTT常见问题之发布MQTT主题消息失败如何解决
MQTT(Message Queuing Telemetry Transport)是一个轻量级的、基于发布/订阅模式的消息协议,广泛用于物联网(IoT)中设备间的通信。以下是MQTT使用过程中可能遇到的一些常见问题及其答案的汇总:
|
4天前
|
JavaScript 前端开发 API
第二十九章 使用消息订阅发布实现组件通信
第二十九章 使用消息订阅发布实现组件通信
|
6月前
|
传感器 JSON 物联网
什么是MQTT遗嘱消息?如何配置和处理遗嘱消息?
什么是MQTT遗嘱消息?如何配置和处理遗嘱消息?
325 0
什么是MQTT遗嘱消息?如何配置和处理遗嘱消息?
|
4天前
|
传感器 监控 网络协议
MQTT 发布、订阅模式介绍
【2月更文挑战第17天】
111 6
MQTT 发布、订阅模式介绍
|
4天前
|
移动开发 小程序 Go
【社区每周】小程序消息订阅插件升级为消息订阅接口(2022年8月第五期)
【社区每周】小程序消息订阅插件升级为消息订阅接口(2022年8月第五期)
21 0
|
4天前
|
消息中间件 Java
RabbitMQ中的消息发布-订阅模式是什么?如何实现?
RabbitMQ中的消息发布-订阅模式是什么?如何实现?
51 0
|
9月前
|
XML 机器人 C++
【4. ROS的主要通讯方式:Topic话题与Message消息】(2)
【4. ROS的主要通讯方式:Topic话题与Message消息】(2)
157 0
|
9月前
|
传感器 机器人 C++
【4. ROS的主要通讯方式:Topic话题与Message消息】(1)
【4. ROS的主要通讯方式:Topic话题与Message消息】(1)
213 0
EMQ
|
消息中间件 传感器 存储
MQTT 发布/订阅模式介绍
MQTT发布/订阅模式区别于传统的客户端/服务器模式,它使发布者与订阅者分离,发布者与订阅者不需要建立直接联系。
EMQ
927 0
MQTT 发布/订阅模式介绍
|
机器人
ROS快速入门第三讲——ROS的Subscriber订阅者
ROS快速入门第三讲——ROS的Subscriber订阅者
201 0
ROS快速入门第三讲——ROS的Subscriber订阅者