我是靠谱客的博主 坚强溪流,最近开发中收集的这篇文章主要介绍ros中话题消息topic的定义与使用简介1.定义msg文件2.在package.xml文件中添加功能包依赖3. 在CMakeLists.txt添加编译选项使用实例总结使用的注意事项,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 简介
  • 1.定义msg文件
  • 2.在package.xml文件中添加功能包依赖
  • 3. 在CMakeLists.txt添加编译选项
  • 使用实例
    • 发布者
    • 订阅者
    • 1.修改CMakeLists.txt
    • 2.编译
    • 3.修改环境变量
    • 4.执行
    • 执行结果
  • 总结
  • 使用的注意事项

简介

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

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)

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

最后

以上就是坚强溪流为你收集整理的ros中话题消息topic的定义与使用简介1.定义msg文件2.在package.xml文件中添加功能包依赖3. 在CMakeLists.txt添加编译选项使用实例总结使用的注意事项的全部内容,希望文章能够帮你解决ros中话题消息topic的定义与使用简介1.定义msg文件2.在package.xml文件中添加功能包依赖3. 在CMakeLists.txt添加编译选项使用实例总结使用的注意事项所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部