(四)自定义消息

定义一条定长的消息

在这里我创建了一个新的程序包
在这里插入图片描述
在新建的目录msg下新建m消息文件
在这里插入图片描述
编写消息文件
在这里插入图片描述
修改程序包目录下的package.xml文件
在这里插入图片描述
修改程序包目录下的CMakeLists.txt文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注:
一定要修改四个地方,不然肯定会出问题的。

使用自定义消息

使用自定义消息类型的发布器

#include <ros/ros.h>
#include <example_ros_msg/ExampleMessage.h>
#include <math.h>
int main(int argc,char **argv)
{
	ros::init(argc,argv,"example_ros_message_publisher");
	ros::NodeHandle n;
	ros::Publisher my_publisher_object=n.advertise<example_ros_msg::ExampleMessage>("example_topic",1);
	example_ros_msg::ExampleMessage my_new_message;
	ros::Rate naptime(1.0);
	my_new_message.header.stamp=ros::Time::now();
	my_new_message.header.seq=0;
	my_new_message.header.frame_id="base_frame";
	my_new_message.demo_int=1;
	my_new_message.demo_double=100.0;
	double sqrt_arg;
	while(ros::ok())
	{
		my_new_message.header.stamp=ros::Time::now();
		my_new_message.header.seq++;
		my_new_message.demo_int*=2;
		sqrt_arg=my_new_message.demo_double;
		my_new_message.demo_double=sqrt(sqrt_arg);
		
		my_publisher_object.publish(my_new_message);
		naptime.sleep();
	}
}

在程序包的CMakeLists.txt中的配置信息
在这里插入图片描述
运行结果
在这里插入图片描述

定义、使用一条变长的消息

注意里面的push_back函数就行了,就是每次吧一个数加入到变长变量中去,因此每次输出的变量的长度都会加一。

#include <ros/ros.h>
#include <example_ros_msg/VecOfDoubles.h>
int main(int argc,char **argv)
{
	ros::init(argc,argv,"vector_publisher");
	ros::NodeHandle n;
	ros::Publisher my_publisher_object=n.advertise<example_ros_msg::VecOfDoubles>("vec_topic",1);
	example_ros_msg::VecOfDoubles vec_msg;
	vec_msg.dbl_vec.resize(3);
	double counter=0;
	vec_msg.dbl_vec[0]=1.414;
	vec_msg.dbl_vec[1]=2.71828;
	vec_msg.dbl_vec[2]=3.1416;
	vec_msg.dbl_vec.push_back(counter);
	ros::Rate naptime(1.0);
	while(ros::ok())
	{
		counter+=1.0;
		vec_msg.dbl_vec.push_back(counter);
		my_publisher_object.publish(vec_msg);
		naptime.sleep();
	}
}

运行结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值