当前位置: 首页 > news >正文

ROS笔记

自定义消息的发布

1.创建空间+包

1.创建ROS工作空间

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
source devel/setup.bash
创建工作空间,编译设置环境

2.创建工作空间中的ROS包

cd ~/catkin_ws/src
catkin_create_pkg your_package std_msgs rospy roscpp message_generation

 创建一个名为your_package的ROS包,依赖于std_msgsrospyroscppmessage_generation.

2。创建自定义消息文件

定义消息结构

cd ~/catkin_ws/src/your_package/msg
touch Person.msg

在msg里输入

string name
int32 age
float32 height

 3.配置CMakeLists.txt和package.xml

修改CMakeLists.txt

cd ~/catkin_ws/src/your_package
gedit CMakeLists.txt

CMakeLists.txt文件中添加

add_message_files(FILESPerson.msg
)generate_messages(DEPENDENCIESstd_msgs
)find_package(catkin REQUIRED COMPONENTSroscpprospystd_msgsmessage_generation
)catkin_package(CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
)add_executable(publisher_node src/publisher_node.cpp)
target_link_libraries(publisher_node ${catkin_LIBRARIES})

修改package.xml

gedit package.xml

package.xml文件中添加 

<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>

4. 编写发布者代码

 1.创建发布者节点文件

cd ~/catkin_ws/src/your_package/src
touch publisher_node.cpp

2.编辑发布者节点文件

gedit publisher_node.cpp

在打开的publisher_node.cpp文件中输入 

#include <ros/ros.h>
#include "your_package/Person.h"  // 包含自定义消息头文件int main(int argc, char **argv)
{ros::init(argc, argv, "publisher_node");ros::NodeHandle nh;ros::Publisher pub = nh.advertise<your_package::Person>("person_topic", 10);ros::Rate rate(1);  // 设置发布频率while (ros::ok()){your_package::Person person;person.name = "ganqianzhao";person.age = 22;person.height = 1.75;pub.publish(person);ROS_INFO("发布消息:%s, %d, %.2f", person.name.c_str(), person.age, person.height);rate.sleep();}return 0;
}

5. 编译和运行

编译项目

cd ~/catkin_ws
catkin_make
source devel/setup.bash

运行ROS核心

roscore

 运行发布者节点

rosrun your_package publisher_node

6. 查看发布的消息 

rostopic list  列出当前所有活跃的主题

查看消息内容:rostopic echo /person_topic    会实时显示发布到/person_topic主题上的消息内容,包括姓名、年龄和身高信息.

http://www.lryc.cn/news/516926.html

相关文章:

  • 在 Linux 上调试 C++ 程序
  • 让跨 project 联查更轻松,SLS StoreView 查询和分析实践
  • 20240107-类型转换
  • 关于Linux PAM模块下的pam_listfile
  • OKHttp调用第三方接口,响应转string报错okhttp3.internal.http.RealResponseBody@4a3d0218
  • 弱电与电力工程领域,如何通过工程项目管理软件提升效率
  • 引领实时数据分析新时代:阿里云实时数仓 Hologres
  • 什么是中间件中间件有哪些
  • css中的部分文字特性
  • PyQt5 UI混合开发,控件的提升
  • IP查询于访问控制保护你我安全
  • SpringBoot数据层解决方案
  • 前端数据模拟器 mockjs 和 fakerjs
  • Python 类 Class
  • PHP语言的并发编程
  • 小米智能哑铃上市,代理 IP 视角下的智能健身新篇
  • 业务日志设计
  • 对话|全年HUD前装将超330万台,疆程技术瞄准人机交互“第一屏”
  • 【论文笔记】QLoRA: Efficient Finetuning of Quantized LLMs
  • 计算机网络之---物理层的基本概念
  • Burpsuite20241102macM1版安装
  • 缓存常见问题
  • C++ 入门第25天:线程池(Thread Pool)基础
  • 微信小程序中的 storage(本地存储)和内存是两个完全不同的存储区域
  • WLAN基本原理与配置
  • KaliLinux 2022.1安装和相关配置
  • HarmonyOS开发:ArkTS初识
  • Unity的四种数据持久化方式
  • 机器学习笔记 - 单幅图像深度估计的最新技术
  • Postman接口测试02|接口用例设计