ros1 自定义Publisher消息编程实现示例

news2024/12/26 23:52:48

整理步骤

cd进入工作空间下的代码空间, 创建功能包,并配置依赖
在功能包里面的代码空间里编写C++代码文件
在cmakelist文件里面配置编译规则
cd到工作空间,编译工作空间,source设置环境变量
打开roscore, 运行海龟仿真节点,运行功能包里发布者的节点

话题模型

在这里插入图片描述

1. 创建功能包

 cd ~/catkin_ws/src
catkin_create_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim
  1. 新增发布代码

在 ~/catkin_ws/src/learning_topic/src 目录下,创建 velocity_publisher.cpp 文件

velocity_publisher.cpp 文件内容如下:

//代码
/**
 * 该例程将发布turtle1/cmd_vel话题,消息类型geometry_msgs::Twist
 */
 //引入包
#include <ros/ros.h>
#include <geometry_msgs/Twist.h>
 
int main(int argc, char **argv)
{
    // ROS节点初始化
    ros::init(argc, argv, "velocity_publisher");
 
    // 创建节点句柄
    ros::NodeHandle 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(1);

    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("Publsh turtle velocity command[%0.2f m/s, %0.2f rad/s]", 
                vel_msg.linear.x, vel_msg.angular.z);
 
        // 按照循环频率延时
        loop_rate.sleep();
    }
 
    return 0;
}

3.配置发布者代码编译规则

打开功能包 learning_topic 中的 CMakeLists.txt 文件,设置需要编译的代码和生成的可执行文件,以及设置链接库

在这里插入图片描述

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

4. 编译功能包

cd ~/catkin_ws

catkin_make

设置环境变量

source devel/setup.bash

编译如果报错看看是否是权限问题,切换到root 用户试试

5 测试验证

  1. 启动ros 主节点
roscore
  1. 启动小乌龟节点
rosrun turtlesim turtlesim_node
  1. 启动发布小乌龟位置消息的节点
rosrun learning_topic velocity_publisher

启动找不到功能包报错试试 如果出现 [rospack] Error: package ‘learning_topic’ not found
错误,输入命令 gedit ~/.bashrc,然后在末尾添加 source
/home/XXX/catkin_ws/devel/setup.bash,XXX为自己的用户名,保存该文件,然后重启终端。

在这里插入图片描述

到这基本上已经完成一个简单的自定义消息节点的实现。

6 再编译

假如说我们需要调整下里面的代码,比如改变小乌龟移动的速度,我们就改变

 // 设置循环的频率
    ros::Rate loop_rate(1);

将1 改成10 或者100

然后重新编译

cd ~/catkin_ws

catkin_make

然后重启

rosrun learning_topic velocity_publisher

我们就可以看到小乌龟的移动速度变快了。其他的自定义发布消息同理。

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

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

相关文章

简析安科瑞无功补偿在化工企业设计与应用

叶根胜 安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;随着各种扩产、技术改造等活动的发展&#xff0c;化工企业用电设备功率大、能耗高&#xff0c;导致用电设备增加、负荷增加、负荷性质发生变化&#xff0c;加上线路损耗和变压损耗等因素。整个企业电网的功率…

Mysql进阶-视图篇

介绍 视图&#xff08;View&#xff09;是一种虚拟存在的表。视图中的数据并不在数据库中实际存在&#xff0c;行和列数据来自定义视图的查询中使用的表&#xff0c;并且是在使用视图时动态生成的。 通俗的讲&#xff0c;视图只保存了查询的SQL逻辑&#xff0c;不保存查询结果。…

C#解析XML并反序列化为Model的方法

虽然现在json大行其道&#xff0c;但是xml格式依旧占据着广阔的编程世界&#xff0c;不管光伏锂电激光卫星汽车等等工业领域&#xff0c;基本上都是以xml为主&#xff0c;广大的.NET开发人员有很多被xml折磨的都要转java了&#xff0c;这篇小作文就来玩一种迅速完成xml到model的…

【接口测试】最全Jmeter跨线程调用变量+签名接口测试实战(超细整理)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 跨线程调用变量 …

Android Studio(项目收获)

取消按钮默认背景色 像按钮默认背景色为深蓝色&#xff0c;即使使用了background属性指定颜色也不能生效。 参考如下的解决方法&#xff1a; 修改/res/values/themes.xml中的指定内容如下&#xff1a; <style name"Theme.TianziBarbecue" parent"Theme.Mater…

4-Tomcat服务器及标准Web项目结构

4-Tomcat服务器及标准Web项目结构 文章目录 4-Tomcat服务器及标准Web项目结构Web服务器组成Web项目的标准结构根目录下可以放置的文件及文件夹WEB标准结构Web的url组成部分和项目中资源的对应关系 Tomcat服务器部署Tomcat部署Web项目的三种方式IDEA部署项目APP到Tomcat的方式概…

响应式编程-基本介绍

响应式编程-基本介绍 什么是响应式编程 响应式宣言&#xff08;The Reactive Manifesto&#xff09; 对响应式系统进行了定义&#xff1a;响应式系统是具备以下特质即时响应性&#xff08;Responsive&#xff09;、回弹性&#xff08;Resilient&#xff09;、弹性&#xff08…

Freeswitch API调用方式

1.API调用方式 可以复制下面内容成.bat文件直接在windows下运行&#xff0c;修改成对应的ip加端口。 echo off SETLOCAL :_starting cls set inputecho echo 1 add agent 21009 11 uuid_check 21009 21 list users 31 check modules …

JAVA中类和对象的认识

1、面向对象的初步认知 1.1 什么是面向对象 Java是一门纯面向对象的语言(Object Oriented Program&#xff0c;简称OOP)&#xff0c;在面向对象的世界里&#xff0c;一切皆为对象。面 向对象是解决问题的一种思想&#xff0c;主要依靠对象之间的交互完成一件事情。用面向对象的…

LabVIEW示波器连续触发编程

LabVIEW示波器连续触发编程 niScopeEX Fetch Forever范例利用了如何设置硬件和驱动的优点来进行连续采集。 当NI-SCOPE设备被设置为采集预触发扫描&#xff0c;设备上的板载内存被用作一个环形缓冲。这样&#xff0c;无论触发何时到来&#xff0c;设备都可以追踪和检索所有要求…

Ubuntu开机无法进入系统,文件根系统目录空间不足导致?

前言&#xff1a; 自己电脑上装的是Win11和Ubuntu20双系统&#xff0c;平时就是切换着用。 偶然有次&#xff0c;Ubuntu提示文件根系统目录空间不足&#xff0c;自己没在意。 结果下次开机进入Ubuntu时候&#xff0c;芭比Q了。。进不了系统 这样的事情发生很多次了&#xff0c;…

密度聚类与层次聚类

大家好&#xff0c;我是带我去滑雪&#xff01; 密度聚类&#xff08;Density-based Clustering&#xff09;和层次聚类&#xff08;Hierarchical Clustering&#xff09;是两种不同的聚类方法&#xff0c;用于将数据集中的数据点分组成簇。 目录 一、密度聚类 &#xff08;…

高频时序数据仓库-在线课堂二

详细了解天软高频时序数据仓库的构架及性能后&#xff0c;本周天软在线课堂将带来高频时序数据仓库的应用展示。扫描图片二维码可报名参会。

MATLAB|热力日历图

目录 日历图介绍&#xff1a; 热力日历图的特点&#xff1a; 应用场景&#xff1a; 绘图工具箱 属性 (Properties) 构造函数 (Constructor) 公共方法 (Methods) 私有方法 (Private Methods) 使用方法 日历图介绍&#xff1a; 热力日历图是一种数据可视化形式&#xf…

Pioneer电源维修PM36218B-10P-1-8PH-J

开关电源出现不启振的时候&#xff0c;我们通常需要查看开关频率是否正确、保护电路是否断路、电压反馈电路、电流反馈电路又没问题&#xff0c;开关管是否击穿等。 pioneer电源维修时&#xff0c;PWM模块为UC3843&#xff0c;检测未发现其他异常&#xff0c;在R(220K)上并接一…

美妆行业如何通过自媒体提升品牌曝光

自媒体的出现使美妆行业的推广方式产生了变化&#xff0c;自媒体平台的用户年轻化、用户基数大、消费力较强&#xff0c;能够接受新鲜事物&#xff0c;为美妆品牌带来广阔的市场和消费人群。 因此自媒体平台的内容运营十分重要&#xff0c;今天媒介盒子就来和大家聊聊&#xf…

VBA技术资料MF80:选择文件及文件夹

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

ARPG----C++学习记录03 Section7位置,偏移,函数

Pawn 新建一个Pawn的c类Bird&#xff0c;并且新建一个蓝图 添加一个Capsule&#xff08;胶囊&#xff09; 不知道要加啥头文件&#xff0c;去网站找https://docs.unrealengine.com/5.3/en-US/API/Runtime/Engine/Components/UCapsuleComponent/SetCapsuleSize/ 包含文件名字的头…

【vue3/高德地图】实现地图打点/自定义点位图标/地理围栏实现

<template><div class"app-container"><div id"container"></div></div> </template><script setup> import AMapLoader from amap/amap-jsapi-loader; /*在Vue3中使用时,需要引入Vue3中的shallowRef方法(使用s…

Microsoft Edge浏览器不兼容解决办法

找到 Edge 的安装位置&#xff0c;一般在 C:\Program Files (x86)Microsoft Edge\Application\ 这个目录&#xff0c;把 edge.exe 或msedge.exe 修改为 chrome.exe 再重启电脑。