ros中话题消息topic的定义与使用

简介

话题消息的自定义是一个语言,他能根据不同的语言变换不同的形式

1.定义msg文件

文件夹位置:功能包中
创建一个名为msg的文件夹用来存储自定义消息
在这里插入图片描述
在msg中创建自定义消息文件,文件的后缀为.msg
在这里插入图片描述
文件内容:

string name
uint8 sex
uint8 age
uint8 unknown = 0
uint8 male = 1
unit8 famale = 2

在这里插入图片描述

2.在package.xml文件中添加功能包依赖

<build_depend>message_generation</build_depend>//构建依赖
<exec_depend>message_runtine</exec_depend>//运行依赖

3. 在CMakeLists.txt添加编译选项

  • find_package
    message_generation
    在这里插入图片描述
    声明ROS消息、服务和操作
    在这里插入图片描述
    声明ROS动态重新配置参数
    在这里插入图片描述
    至此添加完成
    如果在devel/include文件夹下生成头文件说明创作消息成功
    在这里插入图片描述

使用实例

发布者

#include <ros/ros.h>
#include <learning_topic/Person.h>

int main(int argc, char** argv )
{
	ros::init(argc, argv, "person_publisher");
	ros::NodeHandle n;
	ros::Publisher person_info_publisher = n.advertise<learning_topic::Person>("/person_info", 10);
	ros::Rate loop_rate(1);
	while(ros::ok())
	{
		learning_topic::Person person_msg;
		person_msg.name = "zhang";
		person_msg.age = 21;
		person_msg.sex = learning_topic::Person::male;
		person_info_publisher.publish(person_msg);
		ROS_INFO("Publish Person Info: name:%s age:%d sex: %d",person_msg.name.c_str(), person_msg.age, person_msg.sex);
		loop_rate.sleep();
	}
}

订阅者

#include <ros/ros.h>
#include <learning_topic/Person.h>
void personCallback(const learning_topic::Person::ConstPtr& msg)
{
	ROS_INFO("Subscribe Person Info: name:%s age:%d sex: %d",
		msg->name, msg->age, msg->sex);
}
int main(int argc, char **argv)
{
	ros::init(argc, argv, "person_subscriber");
	ros::NodeHandle n;
	ros::Subscriber person_info_subscriber = n.subscribe("/person_info",10,personCallback);
	ros::spin();
	return 0;
}

1.修改CMakeLists.txt

在build模块添加下面代码

add_executable(person_subscriber src/person_subscriber.cpp)
target_link_libraries(person_subscriber ${catkin_LIBRARIES})
add_dependencies(person_subscriber ${PROJECT_NAME}_generate_messages_cpp)

add_executable(person_publisher src/person_publisher.cpp)
target_link_libraries(person_publisher ${catkin_LIBRARIES})
add_dependencies(person_publisher ${PROJECT_NAME}_generate_messages_cpp)

2.编译

回到工作空间
执行catkin_make

3.修改环境变量

source devel/setup.bash

4.执行

rosrun learning_topic person_publisher
在这里插入图片描述
出现以上错误,是因为没有运行roscore
打开roscore即可

执行结果

在这里插入图片描述

总结

在这里插入图片描述

使用的注意事项

需要在使用到自定义话题的节点的CMakeLists.txt部分中添加

add_dependencies(节点可执行目标文件 ${PROJECT_NAME}_generate_messages_cpp)

在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wuming先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值