ROS 快速入门教程03

news2025/4/25 17:28:32

8.编写Subscriber订阅者节点

8.1 创建订阅者节点

cd catkin_ws/src/
catkin_create_pkg  atr_pkg rospy roscpp std_msgs 

ros::Subscriber sub = nh.subscribe(话题名, 缓存队列长度, 回调函数)
回调函数通常在你创建订阅者时定义。一个订阅者会监听一个话题,并在有消息到达时调用回调函数,而不用手动去执行函数。

#include<ros/ros.h>
#include<std_msgs/String.h>
void chao_callback( std_msgs::String msg)
{
  printf(msg.data.c_str());
  printf("\n");
}
int main(int argc, char **argv)
{
  ros::init(argc, argv, "ma_node");
  ros::NodeHandle nh;
  ros::Subscriber sub = nh.subscribe("ssr_node_topic", 10,chao_callback);
  while(ros::ok())
  {
    ros::spinOnce();//功能:处理回调函数
  }
     return 0;
}

打开CMakeList,添加后编译。

 add_executable(ma_node src/atr_pkg_node.cpp)
target_link_libraries(ma_node
   ${catkin_LIBRARIES}
 )

打开三个终端分别输入

roscore
rosrun ssr_pkg chao_node
rosrun atr_pkg ma_node

在这里插入图片描述
在这里插入图片描述

显示接收时间函数

#include<ros/ros.h>
#include<std_msgs/String.h>


void chao_callback( std_msgs::String msg)
{
  ROS_INFO(msg.data.c_str());
}

int main(int argc, char **argv)
{
  setlocale(LC_ALL,"");//设置中文显示
  ros::init(argc, argv, "ma_node");
  ros::NodeHandle nh;
  ros::Subscriber sub = nh.subscribe("ssr_node_topic", 10,chao_callback);
  while(ros::ok())
  {
    ros::spinOnce();//功能:处理回调函数
  }
     return 0;
}

再次运行ma_node节点。
在这里插入图片描述

8.2 多个订阅者和发布者图形化显示

当存在多个订阅者和发布者时,可以使用rqt_graph来显示逻辑关系。
在这里插入图片描述

8.3 小结

在这里插入图片描述

9.launch启动多个ROS节点

上一小节中,我们启动多个节点就需要打开多个终端,这非常繁琐。这一小节中我们使用launch来启动多个节点。
luanch文件遵循XML语法
<标记名称 属性名1= "属性值1"...>内容</标记名称>
打开vscode,在工作目录的任意子文件夹下创建launch文件
在这里插入图片描述

<launch>
<node pkg ="ssr_pkg" type="yao_node" name="yao_node"/>
<node pkg ="ssr_pkg" type="chao_node" name="chao_node"/>
<node pkg ="atr_pkg" type="ma_node" name="ma_node" output="screen"/>
</launch>

打开终端输入

roslaunch atr_pkg kaihei.launch 

在这里插入图片描述

9.2 小结

在这里插入图片描述

10.ROS机器人运动控制

机器人的运动可以分解为矢量运动和旋转运动。
矢量运动:二维平面中的各种平移。单位:米/每秒。
旋转运动:机器人进行转向。单位:弧度/每秒。
在这里插入图片描述

11.机器人运动控制的实现

第一节中我们已经下载过wpr_simulation这个源代码了。

cd catkin_ws
catkin_make #编译源代码文件
roslaunch wpr_simulation #开启演示模拟环境
#再打开一个终端输入
rosrun wpr_simulation demo_vel_ctrl#进行demo演示

本节课就要实现这样的一个效果,实现思路:
在这里插入图片描述

cd catkin_ws/src/
catkin_create_pkg  vel_pkg roscpp rospy geometry_msgs

打开vscode,在vel_pkg文件夹下的src目录里创建叫vel_node.cpp文件。

#include<ros/ros.h>
#include<geometry_msgs/Twist.h>

int main(int argc,char **argv)
{
    ros::init(argc,argv,"vel_node");
    ros::NodeHandle n;
    ros::Publisher vel_pub = n.advertise<geometry_msgs::Twist>("cmd_vel",10);

    geometry_msgs::Twist vel_msg;

    vel_msg.linear.x = 0.1;
    vel_msg.linear.y = 0.0;
    vel_msg.linear.z = 0.0;  
    vel_msg.angular.x = 0.0;
    vel_msg.angular.y = 0.0;
    vel_msg.angular.z = 0.0;

    ros::Rate r(30);
    while(ros::ok())
    {
        vel_pub.publish(vel_msg);
        r.sleep();
    }

    return 0;
}

cmake里添加后编译。

add_executable(vel_node src/vel_node.cpp)
add_dependencies(vel_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(vel_node
  ${catkin_LIBRARIES}
)

分别在两个终端里输入:

roslaunch wpr_simulation wpb_simple.launch 
rosrun vel_pkg  vel_node 

便能看到小车在缓慢向前移动。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2342590.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在 macOS 上合并 IntelliJ IDEA 的项目窗口

在使用 IntelliJ IDEA 开发时&#xff0c;可能会打开多个项目窗口&#xff0c;这可能会导致界面变得混乱。为了提高工作效率&#xff0c;可以通过合并项目窗口来简化界面。本文将介绍如何在 macOS 上合并 IntelliJ IDEA 的项目窗口。 操作步骤 打开 IntelliJ IDEA: 启动你的 I…

基于多用户商城系统的行业资源整合模式与商业价值探究

随着电子商务的蓬勃发展&#xff0c;传统的单一商家电商模式逐渐显现出一定的局限性。为了解决商家成本过高、市场竞争激烈等问题&#xff0c;多用户商城系统应运而生&#xff0c;成为一种新型的电商平台模式。通过整合行业资源&#xff0c;这种模式不仅极大地提升了平台和商家…

Three.js + React 实战系列 : 从零搭建 3D 个人主页

可能你对tailiwindcss毫不了解&#xff0c;别紧张&#xff0c;记住我们只是在学习&#xff0c;学习的是作者的思想和技巧&#xff0c;并不是某一行代码。 在之前的几篇文章中&#xff0c;我们已经熟悉了 Three.js 的基本用法&#xff0c;并通过 react-three-fiber 快速构建了一…

如何用大模型技术重塑物流供应链

摘要 在数字化转型加速的背景下&#xff0c;大模型技术凭借其强大的数据分析、逻辑推理和决策优化能力&#xff0c;正成为物流供应链领域的核心驱动力。本文深入探讨大模型如何通过需求预测、智能调度、供应链协同、风险管控等关键环节&#xff0c;推动物流行业从 "经验驱…

【银河麒麟高级服务器操作系统】磁盘只读问题分析

系统环境及配置 系统环境 物理机/虚拟机/云/容器 虚拟机 网络环境 外网/私有网络/无网络 私有网络 硬件环境 机型 KVM Virtual Machine 处理器 Kunpeng-920 内存 32 GiB 整机类型/架构 arm64 固件版本 EFI Development Kit II / OVMF 软件环境 具体操作系统版…

机器视觉的智能手机屏贴合应用

在智能手机制造领域&#xff0c;屏幕贴合工艺堪称"微米级的指尖芭蕾"。作为影响触控灵敏度、显示效果和产品可靠性的关键工序&#xff0c;屏幕贴合精度直接决定了用户体验。传统人工对位方式已无法满足全面屏时代对极窄边框和超高屏占比的严苛要求&#xff0c;而Mast…

AIM Robotics电动胶枪:智能分配,让机器人点胶涂胶精准无误

在现代工业自动化和智能制造领域&#xff0c;精确的液体分配技术正成为提升生产效率和产品质量的重要因素。AIM Robotics作为这一领域的创新者&#xff0c;提供了多种高效、灵活的点胶涂胶分配解决方案。本文将带您了解AIM Robotics的核心技术、产品系列以及在各行业的成功应用…

负环-P3385-P2136

通过选择标签&#xff0c;洛谷刷一个类型的题目还是很方便的 模版题P3385 P3385 【模板】负环 - 洛谷 Tint(input())def bellman(n,edges,sta):INFfloat(inf)d[INF]*(n1)d[sta]0for i in range(n-1):for u,v,w in edges:ncostd[u]wif ncost<d[v]:d[v]ncostfor u,v,w in e…

抖音的逆向工程获取弹幕(websocket和protobuf解析)

目录 声明前言第一节 获取room_id和ttwid值第二节 signture值逆向python 实现signature第三节 Websocket实现长链接请求protubuf反序列化pushFrame反序列化Response解压和反序列化消息体Message解析应答ack参考博客声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的…

WPF 图片文本按钮 自定义按钮

效果 上面图片,下面文本 样式 <!-- 图片文本按钮样式 --> <Style x:Key="ImageTextButtonStyle" TargetType="Button"><Setter Property="Background" Value="Transparent"/><Setter Property="BorderTh…

Diffusion inversion后的latent code与标准的高斯随机噪音不一样

可视化latents_list如下; 可视化最后一步与标准的噪声&#xff1a; 能隐约看出到最后一步还是会有“马”的形状 整个代码&#xff08;及可视化代码如下&#xff09;&#xff1a; ## 参考freeprompt(FPE)的代码 import os import torch import torch.nn as nn import torch.n…

江湖密码术:Rust中的 bcrypt 加密秘籍

前言 江湖险恶,黑客如雨,昔日密码“123456”早被各路大侠怒斥为“纸糊轻功”。若还执迷不悟,用明文密码闯荡江湖,无异于身披藏宝图在集市上狂奔,目标大到闪瞎黑客双眼。 为护你安然度过每一场数据风波,特献上一门绝学《Rust加密神功》。核心招式正是传说中的 bcrypt 密…

Milvus(3):数据库、Collections说明

1 数据库 Milvus 在集合之上引入了数据库层&#xff0c;为管理和组织数据提供了更有效的方式&#xff0c;同时支持多租户。 1.1 什么是数据库 在 Milvus 中&#xff0c;数据库是组织和管理数据的逻辑单元。为了提高数据安全性并实现多租户&#xff0c;你可以创建多个数据库&am…

【Hive入门】Hive数据模型与存储格式深度解析:从理论到实践的最佳选择

目录 1 Hive数据模型全景图 2 Hive存储架构解析 3 存储格式对比矩阵 4 存储格式选择决策树 5 ORC文件结构剖析 6 Parquet与ORC技术对比 7 最佳实践指南 7.1 建表示例模板 7.2 性能优化 8 总结 1 Hive数据模型全景图 模型核心组件解析&#xff1a; Database&#xff1…

2025能源网络安全大赛CTF --- Crypto wp

文章目录 前言simpleSigninNumberTheory 前言 大半年以来写的第一篇文章&#xff01;&#xff01;&#xff01; simpleSignin 题目&#xff1a; from Crypto.Util.number import * from gmpy2 import * import osflag bxxx p next_prime(bytes_to_long(os.urandom(128))…

Godot开发2D冒险游戏——第二节:主角光环整起来!

变量的作用域 全局变量&#xff0c;局部变量&#xff0c;导出变量&#xff08;可以在检查器当中快速查看&#xff09; 为玩家添加移动动画 现在游戏的玩家还只是在滑行&#xff0c;我们需要再添加玩家每个方向上的移动效果 删除原先的Item节点&#xff0c;创建一个动画精灵…

.NETCore部署流程

资料下载&#xff1a;https://download.csdn.net/download/ly1h1/90684992 1.下载托管包托管捆绑包 | Microsoft Learn&#xff0c;下载后点击安装即可。 2.安装IIS 3.打开VS2022&#xff0c;新建项目&#xff0c;选择ASP.NET Core Web API 5.Program修改启动项&#xff0c;取…

数据结构——二叉树,堆

目录 1.树 1.1树的概念 1.2树的结构 2.二叉树 2.1二叉树的概念 2.2特殊的二叉树 2.3二叉树的性质 2.4二叉树的存储结构 2.4.1顺序结构 2.4.2链式结构 3.堆 3.1堆的概念 3.2堆的分类 3.3堆的实现 3.3.1初始化 3.3.2堆的构建 3.3.3堆的销毁 3.3.4堆的插入 3.3.5…

龙虎榜——20250424

指数依然是震荡走势&#xff0c;接下来两天调整的概率较大 2025年4月24日龙虎榜行业方向分析 一、核心主线方向 化工&#xff08;新能源材料产能集中&#xff09; • 代表标的&#xff1a;红宝丽&#xff08;环氧丙烷/锂电材料&#xff09;、中欣氟材&#xff08;氟化工&…

CentOS 7 安装教程

准备&#xff1a; 软件&#xff1a;VMware Workstation 镜像文件&#xff1a;CentOS-7-x86_64-bin-DVD1.iso &#xff08;附&#xff1a;教程较为详细&#xff0c;注释较多&#xff0c;故将操作的选项进行了加粗字体显示。&#xff09; 1、文件–新建虚拟机–自定义 2、硬盘…