(四)自定义消息
定义一条定长的消息
在这里我创建了一个新的程序包
在新建的目录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();
}
}
运行结果