ros publish msg no copy pub sub工作 - maohaihua/ros_study GitHub Wiki

从Nodelet发布

如果希望no-copy pub/sub工作,您必须将消息发布为shared_ptr。
有关更多详细信息,请参阅进程内发布和订阅。

Intraprocess Publishing(进程内发布)

当发布服务器和订阅服务器作用在相同节点的同一个话题,roscpp可以跳过序列化/反序列化步骤(可能节省大量的处理和延迟)。但只有当消息被发布为shared_ptr,才会这样处理。
示例:

ros::Publisher pub = nh.advertise<std_msgs::String>("topic_name", 5); std_msgs::StringPtr str(new std_msgs::String); str->data = "hello world"; pub.publish(str);

注意,当用这种方式发布,你和roscpp之间的隐性契约:你不可以修改你发送后的消息,因为指针会直接传递到用户的任何进程内。如果你想发送另一条消息,你必须分配一个新的。