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之QtCreator开发环境搭建

    文章目录 系统环境 官方教程 安装 卸载 使用 导入工作空间 构建与运行 编写测试程序 系统环境 操作系统 Ubuntu20 04 ROS版本 Noetic 官方教程 按照官方教程或者下面笔记中的内容均能进行环境搭建 笔记中另外做了部分补充
  • rosrun 和 roslaunch 的时候 TAB 的自动补全出现问题

    rosrun 和 roslaunch 的时候 TAB 的自动补全出现问题 rospack Warning error while crawling home sun boost filesystem status Permission de
  • GG-CNN代码学习

    文章目录 1 源码网址 https github com dougsm ggcnn 2 数据集格式转化 下载后的康奈尔数据集 解压完之后里面的格式 里面的 tiff图像通过 txt文件转化得到 python m utils dataset
  • Hypervisor介绍及在智能驾驶的应用

    转自Hypervisor 智能座舱和智能驾驶融合的关键技术 腾讯新闻
  • 激光雷达LMS111在ROS上的使用

    LMS111 10100 在ROS上的测试与使用 准备工作 设备 硬件 LMS111 101000激光雷达 软件 ubuntu16 04 ROS 开始 设备连接 将激光雷达与处理器 电脑 工控机等 通过以太网连接好 激光雷达默认的IP地址为
  • ROS 笔记(01)— Ubuntu 20.04 ROS 环境搭建

    ROS 官网 https www ros org ROS 中文官网 http wiki ros org cn 1 系统和 ROS 版本 不同的 ROS 版本所需的 ubuntu 版本不同 每一版 ROS 都有其对应版本的 Ubuntu 切记
  • 在Ubuntu 14.04.2 LTS上安装Qt

    Qt是一个跨平台的应用程序框架 广泛用于开发具有GUI界面的应用软件以及命令行工具 几乎所有操作系统都可以使用Qt 如Windows Mac OS X Android等 用于开发Qt应用程序的主要编程语言是C 但是可以使用诸如Python
  • Ubuntu16.04及ROS Kinetic环境下安装使用RealSense SR300

    Ubuntu16 04及ROS Kinetic环境下安装使用RealSense SR300 1 准备条件 需要安装Ubuntu16 04及ROS Kinetic 2 安装驱动 安装realsense的驱动流程可以根据Github上的官方推荐
  • 《学习篇》学会这18个常用ROS命令集合就能入门ROS了

    常用ROS命令概述 ROS常用命令可以按照其使用场景分为ROSshell命令 ROS执行命令 ROS信息命令 ROS catkin命令与ROS功能包命令 虽然很难从一开始就很熟练地使用所有的命令 但是随着使用的次数增多 你会发现常用的几个R
  • 《机器人操作系统入门》课程代码示例安装出错解决方法

    问题描述 学习 机器人操作系统入门 课程时 在Ubuntu 16 04 上安装了kinetic 安装ROS Academy for Beginners时依赖总是报错 如下所示 rosdep install from paths src ig
  • 如何将视频或图像序列转换为包文件?

    我是 ROS 新手 我需要转换预先存在的视频文件 或者large可以连接到视频流中的图像数量 bagROS 中的文件 我在网上找到了这段代码 http answers ros org question 11537 creating a ba
  • 在 CLion 中设置 ROS 包

    我正在使用 CLion C IDE 来编辑 ROS 包 我可以通过打开CMakeLists txt文件 但是 我收到一个错误 FATAL ERROR find package catkin 失败 在工作区和 CMAKE PREFIX PAT
  • 无法加载 LZ4 支持的 Python 扩展。 LZ4 压缩将不可用

    我是 ROS 新手 我刚刚打开终端并输入roscore和另一个终端并键入rostopic node我收到这个错误 上面写着 无法加载 LZ4 支持的 Python 扩展 LZ4 压缩将不可用 我搜索并去了https pypi org pro
  • 什么是 void `std::allocator`?即:`std::allocator`

    自动生成ROS 机器人操作系统 message C 头文件包含如下类型定义 typedef std msgs Header
  • 从 pcl::PointCloud 中删除点

    我是 PCL 新手 我正在使用 PCL 库 并且正在寻找一种从点云中提取点或将特定点复制到新点的方法 我想验证每个点是否符合条件 并且我想获得仅包含优点的点云 谢谢 使用 ExtractIndices 类 将要删除的点添加到 PointIn
  • 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
  • catkin_make后找不到ROS包

    我根据 ROS 的 Wiki 页面创建了一个 ROS 工作区 我还使用创建了一个包catkin create pkg在我刚刚创建的工作区下 然后 按照 ROS Wiki 中的步骤使用以下命令构建包catkin make 构建包后 我插入命令
  • catkin_make 编译报错 Unable to find either executable ‘empy‘ or Python module ‘em‘...

    文章目录 写在前面 一 问题描述 二 解决方法 参考链接 写在前面 自己的测试环境 Ubuntu20 04 一 问题描述 自己安装完 anaconda 后 再次执行 catkin make 遇到如下问题 CMake Error at opt
  • 如何使用 PyQT5 连接和分离外部应用程序或对接外部应用程序?

    我正在使用 ROS 为多机器人系统开发 GUI 但我对界面中最不想做的事情感到困惑 在我的应用程序中嵌入 RVIZ GMAPPING 或其他屏幕 我已经在界面中放置了一个终端 但我无法解决如何向我的应用程序添加外部应用程序窗口的问题 我知道
  • 安装 ROS 时 Cmake 未检测到 boost-python

    我一直在尝试在我的 Mac 上安装 ROS 并根据不同版本的 boost 使用不同的库解决了错误 然而 似乎有一个库甚至没有检测到 boost python 这是我得到的错误 CMake Error at usr local share c

随机推荐