基于ROS的消息发布与订阅

本文涉及的产品
资源编排,不限时长
无影云电脑企业版,4核8GB 120小时 1个月
无影云电脑个人版,1个月黄金款+200核时
简介: 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

相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
相关文章
|
6月前
|
机器人 Shell 开发者
`roslibpy`是一个Python库,它允许非ROS(Robot Operating System)环境(如Web浏览器、移动应用等)与ROS环境进行交互。通过使用`roslibpy`,开发者可以编写Python代码来远程控制ROS节点,发布和订阅话题,以及调用服务。
`roslibpy`是一个Python库,它允许非ROS(Robot Operating System)环境(如Web浏览器、移动应用等)与ROS环境进行交互。通过使用`roslibpy`,开发者可以编写Python代码来远程控制ROS节点,发布和订阅话题,以及调用服务。
|
机器人
ROS快速入门第三讲——ROS的Subscriber订阅者
ROS快速入门第三讲——ROS的Subscriber订阅者
290 0
ROS快速入门第三讲——ROS的Subscriber订阅者
|
存储 C++ Python
ROS入门笔记(十):编写与测试简单的消息发布器和订阅器(C++)
ROS入门笔记(十):编写与测试简单的消息发布器和订阅器(C++)
440 0
ROS入门笔记(十):编写与测试简单的消息发布器和订阅器(C++)
|
C++ Python
【古月21讲】ROS入门系列(2)——发布者Publisher、订阅者Subscriber的编程实现+自定义话题消息编程实现
【古月21讲】ROS入门系列(2)——发布者Publisher、订阅者Subscriber的编程实现+自定义话题消息编程实现
445 0
【古月21讲】ROS入门系列(2)——发布者Publisher、订阅者Subscriber的编程实现+自定义话题消息编程实现
|
3月前
|
Ubuntu 机器人 Linux
|
2月前
|
自动驾驶 安全 机器人
ROS2:从初识到深入,探索机器人操作系统的进化之路
前言 最近开始接触到基于DDS的这个系统,是在稚晖君的机器人项目中了解和认识到。于是便开始自己买书学习起来,感觉挺有意思的,但是只是单纯的看书籍,总会显得枯燥无味,于是自己又开始在网上找了一些视频教程结合书籍一起来看,便让我对ROS系统有了更深的认识和理解。 ROS的发展历程 ROS诞生于2007年的斯坦福大学,这是早期PR2机器人的原型,这个项目很快被一家商业公司Willow Garage看中,类似现在的风险投资一样,他们投了一大笔钱给这群年轻人,PR2机器人在资本的助推下成功诞生。 2010年,随着PR2机器人的发布,其中的软件正式确定了名称,就叫做机器人操作系统,Robot Op
91 14
|
2月前
|
XML 算法 自动驾驶
ROS进阶:使用URDF和Xacro构建差速轮式机器人模型
【11月更文挑战第7天】本篇文章介绍的是ROS高效进阶内容,使用URDF 语言(xml格式)做一个差速轮式机器人模型,并使用URDF的增强版xacro,对机器人模型文件进行二次优化。
|
2月前
|
自动驾驶 安全 机器人
ROS2:从初识到深入,探索机器人操作系统的进化之路
【11月更文挑战第4天】ROS2的学习过程和应用,介绍DDS系统的框架和知识。
116 1
|
8月前
|
传感器 人工智能 算法
ROS机器人操作系统
ROS机器人操作系统
191 1
|
3月前
|
传感器 数据可视化 机器人
【ROS速成】半小时入门机器人ROS系统简明教程之可视化系统(三)
半小时入门机器人ROS系统简明教程之可视化系统
146 0

相关产品

  • 资源编排
  • 推荐镜像

    更多