ROS Topic (话题通信总结)

2023-05-16

拿到一个功能包,先运行一下(以turtlesim为例子):

rusrun turtlesim turtlesim_node

然后使用 rqt_graph 和rostopic list 大致了解有哪些话题和节点:

可以看到 主要有/turtle1/cmd_vel等三个话题,接着使用 rostopic list -v 继续研究:

可以看消息的类型和订阅者发布者,比如说/turtle1/cmd_vel是乌龟的速度话题,但是没有人发布这个话题,于是我们尝试去驱动乌龟去运动

(若话题比较少,rostopic list -v非常好用,如果较多,可以使话题单个查看指令 rostopic info 和rostopic type)

首先要去获取消息的数据形式,如果是对方是发布者可以使用rostopic echo [话题名],如果对方是订阅者,则:

直接发布话题

使用 rostopic pub [话题名] [消息类型名] [参数改变]

看似复杂,其实只有 rostopic pub [话题名] ,剩下的狂按Tab补齐就行了

然后你自己去修改参数就好了,不过乌龟只动一次,若想循环运动

rostopic pub -r 3 /turtle1/cmd_vel........(Tab自动补齐)

-r是循环发布,3是发布频率

rostopic echo -n  1 /turtle2/pose

可以实现话题单次查看

2.代码实现:

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

int main(int argc, char *argv[])
{
ros::init(argc, argv,"fabuzhe");
ros::NodeHandle nh;
ros::Publisher pub=nh.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel",1);
geometry_msgs::Twist yundong;

while(ros::ok())
{

yundong.linear.x=1;
yundong.angular.z=1;
pub.publish(yundong);


    
}
return 0;
}

效果和方法1是相同的,比较简单,随便找一个publisher的代码,把消息类型一改就行了。

结果展示为:小乌龟在绕圈

同理,也可以写出订阅乌龟位姿的代码(/turtle1/pose):

#include<ros/ros.h>
#include<turtlesim/Pose.h>

void doROS(const turtlesim::Pose::ConstPtr& msg)
{
ROS_INFO("TURTLE POSE xpose: %0.4f,ypose: %0.4f",msg ->x,msg ->y);


}


int main(int argc,char *argv[])
{
ros::init(argc,argv,"dingyuezhe");
ros::NodeHandle nh;
ros::Subscriber sub =nh.subscribe<turtlesim::Pose>("/turtle1/pose",1,doROS);
ros::spin();

return 0;

}

接着写一个全向轮小乌龟(不太符合逻辑)使用PID控制到达位置:

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

double dt=0.1;
turtlesim::Pose hope_pose;
geometry_msgs::Twist sudu;
ros::Publisher pub;
void doROS(const turtlesim::Pose::ConstPtr& pose)
{
hope_pose.x=7;
hope_pose.y=7;

double dx,dy,ax,ay;
double kp=1;
dx=hope_pose.x-pose->x;
dy=hope_pose.y-pose->y;
sudu.linear.x=kp*dx;
sudu.linear.y=kp*dy;
pub.publish(sudu);

}


int main(int argc,char *argv[])
{
ros::init(argc,argv,"sum12");
ros::NodeHandle nh;
 pub=nh.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel",1);
ros::Subscriber sub =nh.subscribe<turtlesim::Pose>("/turtle1/pose",1,doROS);
ros::spin();

return 0;

}

自定义消息类型:

1在功能包下创建msg文件夹

2msg文件夹下创建xx.msg文件(比如Person.msg)

3配置编译文件,参考连接:

2.1.4 话题通信自定义msg · GitBook

4然后在工作空间的devel/include下就可以找到头文件了

然后在你的cpp文件里面就可以使用

#include "study_turtle/Person.h"

服务通信

服务的使用方法大同小异,详细看博客:

ROSservice 通信方式_-CSDN博客

ROS功能包查找

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS Topic (话题通信总结) 的相关文章

  • ROS中使用VLP16激光雷达获取点云数据

    ROS中使用VLP16激光雷达获取点云数据 个人博客地址 本文测试环境为 Ubuntu20 04 ROS Noetic 需要将激光雷达与PC连接 然后在设置 gt 网络 gt 有线中将IPv4改为手动 并且地址为192 168 1 100
  • 无人飞行器智能感知竞赛--模拟器安装

    开发环境 win11 wsl2 注意事项 请配合视频使用 如果不看视频会对下面的配置过程迷惑 因为一开始我是想安装在ubuntu18 04的 中途发现ubuntu18 04没有ros noetic 所以转入ubuntu20 04配置 视频链
  • ROS诸多调试工具总结1

    ROS有许多调试工具来为ROS调试你的工具 1 rosnode 参数 用法 作用 list rosnode list 查看当前运行了哪些节点 info rosnode info node name 查看该节点发布 接受哪些话题以及服务 ki
  • ROS2踩坑记录

    Vscode 显示 找不到module 以此选择 设置 Python 在setting json中编辑 在 python autoComplete extraPaths 中添加额外的第三方库路径 如 opt ros foxy lib pyt
  • Ubuntu16.04安装ROS Kinetic详细步骤

    文章目录 ROS安装 配置Ubuntu软件仓库 设置sources list 设置密钥 更新Debian软件包索引 安装ROS 初始化 rosdep 环境配置 构建工厂依赖 测试安装 开发环境 ROS安装 ROS Kinetic只支持Wil
  • ROS rosdep update 出错方法 不需要翻墙切换之类的解决方法 ‘https://raw.githubusercontent.com/ros/rosdistro/master/inde

    系统 ubuntu18 rosdep update参考的这篇文章 https blog csdn net weixin 43311920 article details 114796748 utm source app app versio
  • 清华大学开源软件镜像站网址

    清华大学 TUNA 协会原名清华大学学生网管会 注册名清华大学学生网络与开源软件协会 是由清华大学网络技术和开源软件爱好者 技术宅组成的团体 现阶段向校内外提供开源软件镜像等服务 清华大学 TUNA 协会清华大学 TUNA 协会原名清华大学
  • 解决ros安装 使用roscore命令测试问题

    本人安装教程完成ROS的安装后 在进行测试如图1命令 出现 解决办法输入完命令1后要输入命令2才行 即可测试成功 测试成功的界面如下
  • 树莓派配置wifi做热点方法

    http wiki jikexueyuan com project raspberry pi wifi html
  • 局域网下ROS多机通信的网络连接配置

    1 在路由器设置中固定各机器IP地址 在浏览器中输入路由器的IP地址 例如TP LINK路由器的IP为 192 168 1 1 进入登录页面后 输入用户名和密码登录 用户名一般为admin 密码为自定义 在 基本设置 gt LAN设置 gt
  • 程序“catkin_init_workspace”尚未安装。 您可以使用以下命令安装: sudo apt install catkin

    程序 catkin init workspace 尚未安装 您可以使用以下命令安装 sudo apt install catkin 问题如图 先贴上解决后的效果 运行环境 ubuntu 16 04 ros版本 kinetic 问题解释 这个
  • 服务数据的定义和使用

    1 自定义数据服务 在包下创建srv文件夹 在文件夹下创建Person srv 在Person srv下输入以下内容 代表数据类型 string name uint8 age uint8 sex uint8 unknown 0 uint8
  • ubuntu18.04命令安装ros2

    ROS2官方文档 本教程为apt get命令安装方式 官网教程有点问题 借鉴一下大佬的安装方式 文章目录 1 安装ROS2 1 1 安装秘钥相关指令 1 2 授权秘钥 1 3 添加ROS2软件源 1 4 安装 2 设置环境 可选但是推荐 2
  • 如何将视频或图像序列转换为包文件?

    我是 ROS 新手 我需要转换预先存在的视频文件 或者large可以连接到视频流中的图像数量 bagROS 中的文件 我在网上找到了这段代码 http answers ros org question 11537 creating a ba
  • 无法在 ROS 中使用本地安装的 Protocol Buffer

    我已经安装了协议缓冲区 https developers google com protocol buffers 本地 ROS包的目录结构如下 CMakeLists txt package xml include addressbook p
  • Caught exception in launch(see debug for traceback)

    Caught exception in launch see debug for traceback Caught exception when trying to load file of format xml Caught except
  • 在 Ubuntu 18.10 上安装 ROS Melodic

    I can t是唯一对 Cosmic 与 Wayland 和 Melodic 的组合感兴趣的人 我会坦白说 我似乎已经在 XPS 13 9370 上成功管理了此操作 或者至少安装脚本 最终 成功完成 然而 有一个非常棘手的解决方法 无论结果
  • catkin_make后找不到ROS包

    我根据 ROS 的 Wiki 页面创建了一个 ROS 工作区 我还使用创建了一个包catkin create pkg在我刚刚创建的工作区下 然后 按照 ROS Wiki 中的步骤使用以下命令构建包catkin make 构建包后 我插入命令
  • 如何订阅“/scan”主题、修改消息并发布到新主题?

    我想通过订阅message ranges来改进turtlebot3的LDS 01传感器 通过应用一些算法修改messange ranges并将其发布到新主题 如下所示 但是当我运行编码时出现错误 错误是 遇到溢出的情况 错误是 运行时警告
  • VideoCapture 未检测到 uEye 摄像头

    我的 uEye 相机遇到了一个问题 使用我的笔记本电脑摄像头 id 0 或 USB 上的网络摄像头 id 1 此行完美运行 TheVideoCapturer open 1 TheVideoCapturer 属于 VideoCapture 类

随机推荐