ROS如何创建一个发布者Publisher

2023-05-16

1、创建工作环境

首先我们需要在主文件夹创建功能包

先创建一个文件夹

mkdir ~/catkin_ws
cd /catkin_ws
mkdir /src

catkin_ws为我们文件夹的名称

添加工程包需要的依赖

cd ~/catkin_ws/src
catkin_create_pkg learning_topic roscpp std_msgs geometry_msgs turtlesim

catkin_create_pkg为创建工程包,learning_topic为工程包的名称,roscpp、std_msgs、geometry_msgs、turtlesim为添加的依赖

返回根文件catkin_ws,然后在根文件中编译

cd ~/catkin_ws
catkin_make //编译
catkin_make install

编译完成后,我们需要设置环境

1 source devel/setup.bash
2 echo $ROS_PACKAGE_PATH  //查看工程包路径

在配置好编译所以需要的环境后,我们便可以开始写代码啦,我使用的是C++来创作发布者。首先我们来了解一下如何实现一个发布者吧。

如何实现一个发布者

1、初始化ROS节点;

2、向ROS Master注册节点信息,包括发布的话题名和话题中的消息类型;

3、创建消息数据;

4、按照一定频率循环消息;

在learning_topic/src中创建一个velocity_publisher.cpp文件,并编写程序。以下是C++写的发布者的代码:

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

int main(int argc, char **argv)
{
    //ROS节点初始化
    ros::init(argc,argv,"velocity_publisher")
    
    //创建节点句柄
    ros::NodeHeadle n;

    //创建一个Publisher,发布名为/turtle1/cmd_vel的topic,消息类型为geometry_msgs::Twist,队列长度为10
    ros::Publisher turtle_vel_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel",10);
    //设置循环的频率
    ros::Rate loop_rate(10);

    int count = 0;
    while(ros::ok())
    {
        //初始化geometry_msgs::Twist类型的消息
        geometry_msgs::Twist vel_msg;
        vel_msg.linear.x = 0.5;
        vel_msg.angular.z = 0.2; //设置小乌龟的线速度和角速度
        

        //发布消息
        turtle_vel_pub.publish(vel_msg);
        ROS_INFO("Publish turtle velocity command[%0.2f m/s, %0.2f rad/s]",vel_msg.linear.x, vel_msg.angular.z); //输出命令,类似于C语言的print
        
        //按照循环频率延时
        loop_rate.sleep();
    }
    return 0;
}

完成代码后我们需要配置CMakeLists.txt的编译规则。让我们了解一下CMakeLists.txt的编译规则吧。

如何配置CMakeLists.txt的编译规则

1、设置需要编译的代码和生成的可执行文件;

2、设置链接库;

我们需要在文件夹learning_topic中的CMakeLists.txt如图所示的位置加入以下代码

 具体操作步骤如下:

gedit CMakeLists
add_executable(veolcity_publisher src/velocity_publisher.cpp)
target_link_libraries(velocity_publisher ${catkin_LIBRARIES})

之后我们便可以编译并运行发布者啦,具体的操作如下:

cd ~/catkin_ws
catkin_make
source devel/setup.bash
//打开一个新的终端,运行ros
roscore
//再打开一个终端运行小乌龟节点
rosrun turtlesim turtlesim_node
//返回编译代码的终端
rosrun learning_topic velocity_publisher

运行成功后小乌龟会已线速度为0.5 m/s,角速度为0.2 rad/s做圆周运动

恭喜你完成了发布者的第一步!

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

ROS如何创建一个发布者Publisher 的相关文章

  • 刚下好ROS,如何从零开始实现px4的无人机仿真

    刚刚入门ROS开发 xff0c 作为刚刚挺过艰难的ubuntu安装 ros安装的萌新来说 xff0c 你应该正处于ROS开发的初始过渡阶段 一方面 xff0c 你庆幸你解决了许多安装新系统的许多bug xff0c 跨过了阻拦了无数人入门RO
  • 信号与系统——matlab

    一 信号的matlab表示与绘图 1 连续信号绘图 xff0c 例 xff1a t 61 0 0 0001 5 a 61 5 b 61 0 8 x 61 a exp b t sin pi t 注意是 plot t x 绘制出信号关于变量t的
  • 无人车仿真:带反馈的绕圈路径实现

    前期入门ros xff0c 无论是无人机还是无人车等的控制 xff0c 基本都是先以仿真学习为主 xff0c 成熟的仿真理解与功能实现 xff0c 再搬到现实世界的无人车无人机就变得简单随意 xff0c 也能减少许多不必要的硬件损坏 但是很
  • stm32中C语言知识巩固

    此文知识来源于江科大老师b站视频讲解 C语言数据类型 需要注意的是 xff0c 在51单片机中int是16位的 xff0c 32单片机中int是32位的 后面两行是对其重命名 xff0c 因为左边的数据类型名字比较长 xff0c 且有很多名
  • Rviz中控制机器人模型运动(arbotix)

    前言 xff1a 通过 URDF 结合 rviz 可以创建并显示机器人模型 xff0c 不过 xff0c 当前实现的只是静态模型 xff0c 如何控制模型的运动呢 xff1f 在此 xff0c 可以调用 Arbotix 实现此功能 简介 A
  • Gazebo仿真环境搭建(04)

    Gazebo 中创建仿真实现方式有两种 1 直接添加内置组件创建仿真环境 1 1启动 Gazebo 并添加组件 1 2保存仿真环境 添加完毕后 xff0c 选择 file gt Save World as 选择保存路径 功能包下 world
  • 树莓派4b安装ubuntu18.04和ros-melodic(一)

    因为用到了树莓派这个集成计算机 xff0c 所以买了张sd卡自己配置了一下环境 每个人环境都不一样 xff0c 但是大体方法流程都是一样 xff0c 我用了一周的时间配置好的 xff0c 说实话真的很麻烦所以在这里我把方法分享给大家 xff
  • 集成学习详解

    入门小菜鸟 xff0c 希望像做笔记记录自己学的东西 xff0c 也希望能帮助到同样入门的人 xff0c 更希望大佬们帮忙纠错啦 侵权立删 目录 一 集成学习的产生原因与相关定义 1 产生原因 2 相关定义 xff08 1 xff09 同质
  • 深度学习之优化算法

    入门小菜鸟 xff0c 希望像做笔记记录自己学的东西 xff0c 也希望能帮助到同样入门的人 xff0c 更希望大佬们帮忙纠错啦 侵权立删 目录 一 优化算法与深度学习 1 优化算法对于深度学习的意义 2 优化算法与深度学习的关系 3 优化
  • Redis常用命令(超详细整理)

    1 字符串string操作命令 Redis中字符串类型常用命令 xff1a SET key value 设置指定的key值 GET key 获取指定key的值 SETEX key seconds value 设置指定key的值 xff0c
  • linux/android中aplay/arecord用法以及命令

    linux xff1a 1 查看声卡 xff1a root 64 sos dom0 aplay l List of PLAYBACK Hardware Devices card 0 broxtontdf8532 broxton tdf853
  • linux怎么查看防火墙状态

    1 通过SSH连接登录linux系统 2 输入如下命令 xff1a systemctl status firewalld 3 敲回车即可查看防火墙的状态 xff0c 如下状态表示防火墙已经关闭 4 又或输入命令 xff1a service
  • 一闪一闪的星星特效效果

    首先让我们看一下一闪一闪的星星特效效果如下图 xff1a 让我们先看一下布局 xff1a span class token tag span class token tag span class token punctuation lt s
  • 实现红绿灯的效果

    首先看一下效果如下 xff1a html部分 xff1a span class token tag span class token tag span class token punctuation lt span div span spa
  • 图书管理系统数据库SQL设计思路

    1 x1f58d 需求分析 一个图书管理系统包括用户信息维护 图书馆信息 图书信息维护 书籍借出 书籍归还 借书记录 支付查询等 此系统功能用户可以借书 续借 归还 查询书籍 增加 修改和删除 2 x1f58b 需求 1 用户信息维护 xf
  • jQuery夹娃娃小游戏

    点击开始 xff0c 爪子开始往下移夹娃娃首先让我们看一下它的效果图如下 xff1a 页面布局代码如下 xff1a span class token tag span class token tag span class token pun
  • 酒店管理系统数据库SQl设计思路

    第一节 x1f58d 需求分析 一个酒店管理系统包括很多个模块 xff0c 首先我们先要分析一下需求 一 实时房态图 动态生成实时房态图 在房态图上进行房态修改 换房操作 xff0c 续住操作 选择房间进行散客 团队预定 散客 团队入住 散
  • 超经典的20道SQL题目(附加解题思路)

    最近学了SQL的内容 xff0c 老师也给我们发了练习题 xff0c 感觉在做题的过程中得到了提高 xff0c 所以将题目和我自己的答案分享一下 xff0c 希望对大家有所帮助 我使用的是SQL Server 2014 Management
  • 《酒店管理系统》项目总结

    一 项目模块 二 业务流程图 三 业务流程功能实现 1 首先客人接待 xff1a 实时房态图 xff0c 可以直观的显示出所有客房的状态 2 客人预定 xff1a 根据客人的基本资料做预订 xff0c 在房态图上的客房添加一个预定的标识 3
  • Java基础语法

    一 基础语法 Java大小写敏感 比如HelloWorld和Helloworld是不一样的 包名 Package 公司 组织 个人的域名的反向 xff0c 一般是英文字母 英文字母必须是小写 类名 xff08 ClassName xff09

随机推荐

  • Java中的分支语句

    一 前言 本篇文章讲解的知识点是 xff1a 分支语句 xff0c 希望大家能掌握 二 分支语句 提示 xff1a if else 语句可以看作有4种形式 xff1a 1 if 语句 代码 xff1a span class token ke
  • Linux 下ALSA音频工具amixer,aplay,arecord使用

    ALSA音频工具amixer aplay arecord ALSA音频工具编译安装 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • Java中的循环语句

    一 前言 本篇文章主要讲解Java知识点是 xff1a 循环语句 希望大家读完这篇文章之后能掌握以下几种循环语句的知识点 二 循环语句 提示 xff1a 循环语句分为以下几种 xff1a 1 for循环 循环场景 xff1a 更适用于明确循
  • Java数组

    对于所有的编程语言来说数组都是相对比较重要的数据结构之一 在Java中数组主要用来存放一组固定大小的相同类型的数据 xff08 一 xff09 数组变量的声明 数组声明有两种写法 xff1a dataType span class toke
  • 运用C在Linux系统中写贪吃蛇小游戏

    最近在学习Linux操作系统的运用 通过写下贪吃蛇这个小游戏 xff0c 加深对c语言的理解以及Linux操作系统的运用 在文章中逐步解析贪吃蛇的整个构建逻辑 并将它记录下来 1 运用ncurses库编写贪吃蛇小游戏 在开始编译贪吃蛇小游戏
  • Vue3入门级别笔记-适用于入门

    前言 xff1a Vue3快速上手 1 Vue3简介 2020年9月18日 xff0c 发布Vue js3 0版本 xff0c 代号 xff1a One Plece xff08 海贼王 xff09 2 Vue3带来了什么 性能升级 打包大小
  • 前端全模块常见面试题与答案详解

    x1f353 作者主页 xff1a x1f496 仙女不下凡 x1f496 x1f353 学习建议 xff1a 以下 x1f447 内容不建议死记硬背 xff0c 而且内容太多也记不住 xff0c 建议了解链接里面的详情解释之后在理解我总结
  • 一、Echart图表 之 基本使用及配置项

    x1f353 作者主页 xff1a x1f496 仙女不下凡 x1f496 x1f353 前言介绍 xff1a 以下 x1f447 内容是我个人对于该技术的总结 xff0c 如有不足与错误敬请指正 xff01 x1f353 欢迎点赞 x1f
  • 三、Echart图表 之 X轴(xAxis)与 Y轴(yAxis)配置项大全

    x1f353 作者主页 xff1a x1f496 仙女不下凡 x1f496 x1f353 前言介绍 xff1a 以下 x1f447 内容是我个人对于该技术的总结 xff0c 如有不足与错误敬请指正 xff01 x1f353 欢迎点赞 x1f
  • 二、Echart图表 之 title配置项大全

    x1f353 作者主页 xff1a x1f496 仙女不下凡 x1f496 x1f353 前言介绍 xff1a 以下 x1f447 内容是我个人对于该技术的总结 xff0c 如有不足与错误敬请指正 xff01 x1f353 欢迎点赞 x1f
  • 四、Echart图表 之 颜色color配置项大全

    x1f353 作者主页 xff1a x1f496 仙女不下凡 x1f496 x1f353 前言介绍 xff1a 以下 x1f447 内容是我个人对于该技术的总结 xff0c 如有不足与错误敬请指正 xff01 x1f353 欢迎点赞 x1f
  • 五、Echart图表 之 legend图例组件配置项大全

    x1f353 作者主页 xff1a x1f496 仙女不下凡 x1f496 x1f353 前言介绍 xff1a 以下 x1f447 内容是我个人对于该技术的总结 xff0c 如有不足与错误敬请指正 xff01 x1f353 欢迎点赞 x1f
  • linux/clearlinux/ubuntu curl 命令详解

    介绍 xff1a cURL是一个利用URL语法在命令行下工作的文件传输工具 xff0c 1997年首次发行 它支持文件上传和下载 xff0c 所以是综合传输工具 xff0c 但按传统 xff0c 习惯称cURL为下载工具 cURL还包含了用
  • 六、Echart图表 之 tooltip提示框组件配置项大全

    x1f353 作者主页 xff1a x1f496 仙女不下凡 x1f496 x1f353 前言介绍 xff1a 以下 x1f447 内容是我个人对于该技术的总结 xff0c 如有不足与错误敬请指正 xff01 x1f353 欢迎点赞 x1f
  • 常用方法——9.js中无区别分割中英文逗号的字符串成为数组

    x1f348 作者主页 xff1a x1f496 仙女不下凡 x1f496 x1f348 前言介绍 xff1a 以下 x1f447 内容都是我个人对于前端知识的总结 xff0c 会定期更新欢迎持续关注 xff01 x1f348 欢迎点赞 x
  • 6.常见报错-已解决:v-on event ‘@showSizeChange‘ must be hyphenated

    x1f33a 作者主页 xff1a x1f331 仙女不下凡 x1f331 x1f33a 欢迎点赞 x1f44d 收藏 留言 x1f4dd 如有错误敬请指正 xff01 v span class token operator span on
  • 记录·linux系统中硬盘的挂载与格式化

    一 首先为虚拟机添加新硬盘 xff1a 1 单击 硬盘 开始进行硬盘的添加 xff1a 这时新添加的硬盘还不能用 xff0c 我们还需继续进行对磁盘的第二个步骤 xff1a 分区 二 磁盘的分区 1 这时我们需使用 lsblk 命令 xff
  • 记录 · linux系统创建RAID

    目标需求 xff1a 创建RAID卷设备名为md127 级别5 xff0c 使用2个硬盘建立RAID 1个硬盘作为热备份 并创建成ext3系统文件 xff0c 最后挂载到 mnt md127 一 说明 一般创建RAID卷有两种方法 xff0
  • 记录 · Samba服务部署

    Samba 服务器可以使用户在异构网络操作系统之间进行文件共享 Samba 服务器提供了在Windows 环境下共享 Linux 中用户目录的一个工具 在Linux 中安装Samba 后 xff0c Windows 用户只需进行简单的用户登
  • ROS如何创建一个发布者Publisher

    1 创建工作环境 首先我们需要在主文件夹创建功能包 先创建一个文件夹 mkdir catkin ws cd catkin ws mkdir src catkin ws为我们文件夹的名称 添加工程包需要的依赖 cd catkin ws src