两种writer的代码分析
分析module/perception里面的segmentation和fusion组件都发出了消息,都调用了writer->Write(),但是前者的消息并没有发出来,后者的消息可以在Cyber_monitor中收到。不仅这两个,apollo中凡是channel name带了inner的都属于前者。
两者的writer定义分别如下:
segmentation:
writer_ = node_->CreateWriter<LidarFrameMessage>(output_channel_name_);
fusion:
writer_ = node_->CreateWriter<PerceptionObstacles>(
comp_config.output_obstacles_channel_name());
可以看到主要区别就在传进去的消息类型模板不同。
消息定义不同
初步分析可以看到这两个模块发出的消息定义是不同的。
segmentation的消息定义如下:
class LidarFrameMessage {
public:
LidarFrameMessage() : lidar_frame_(nullptr) {
type_name_ = "LidarFrameMessage";
}
~LidarFrameMessage() = default;
...
...
};
fusion的消息定义如下:
class Percepti