以geometry_msgs/Twist为例说明。
一.发布消息
1.包含消息类型的声明
# include <package_name/type_name.h>
功能包名应该是定义消息类型的包的名称,不一定是自己的包的名称。如想发布一条类型为geometry_msgs/Twist的消息(名为geometry_msgs的包所拥有的类型为Twist的消息)
# include <geometry_msgs/Twist.h>
头文件的目的是定义一个C++类,此类和给定消息类型含有相同的数据类型成员。这个类定义在一包名命名的域名空间中。实际影响:当引用C++代码中的消息类时,将使用::来区分开包名和类型名,双分号也称范围解析运算符。j即头文件定义了一个名为geometry_msgs::Twist的类。
2.创建发布者对象
发布消息的实际工作由ros::Publisher的一个对象完成。
ros::Publisher pub = node_handle.advertise<message_type>(topic_name, queue_size);
node_handle是ros::NodeHandle类的一个对象,在程序运行处创建。
message_type正式名称为模板参数,发布消息的数据类型。头文件中定义的类名(geometry_msgs::Twist类)
topic_name字符串,包含发布的话题的名称(应该和rostopic/