- RovioliNode的构造函数中实例化datasource_flow_,
- datasource_flow_类型DataSourceFlow
- 需要相机和imu的配置信息
- aslam::NCamera
- vi_map::Imu
- DataSourceFlow的构造函数中实例化datasource_
- datasource_类型DataSource
- 使用createAndConfigureDataSourcefromGFlags实例化
- 这里面决定使用bag和是实时topic数据
- DataSourceRosbag
- DataSourceRostopic
- 使用外部参数FLAGS_datasource_type决定
- 这里面决定使用bag和是实时topic数据
- 调用datasource_flow_的attachToMessageFlow
- 注册datasource_中的IMU和IMG回调函数
- 使用flow->registerPublisher得到imu和img分别的回调函数
- message_flow_topics::IMAGE_MEASUREMENTS
- message_flow_topics::IMU_MEASUREMENTS
- 使用registerXXXCallback注册这个回调函数到DataSource中
- 这是DECLARE_SENSOR_CALLBACK制造的函数
- 使用flow->registerPublisher得到imu和img分别的回调函数
- 注册datasource_中的IMU和IMG回调函数
- main函数中调用rovio_localization_node.start()开始接收数据
- 把传感器的rostopic和对应回调函数连接起来
- 对应回调函数中再调用之前DECLARE_SENSOR_CALLBACK函数里生成的回调函数
- 这个生成的回调函数再调用之前registerXXXCallback传入的message_flow_topics回调函数
- 也就是现在imu和img的rostopic和imu和img的message_flow_topics连接上了
- 接受到某个传感器的rostopic就能调用对应的message_flow_topics回调函数
- RovioFlow接收传感器的message_flow_topics消息
- 收到后调用rovio::RovioInterface处理传感器数据的函数
- processImuUpdate
- processImageUpdate
- 收到后调用rovio::RovioInterface处理传感器数据的函数
- ImuCameraSynchronizerFlow(synchronizer_flow_)接收传感器的message_flow_topics消息
- synchronizer_flow_是RovioliNode的成员
- 收到后把消息加入到ImuCameraSynchronizer(synchronizing_pipeline_)中
- synchronizing_pipeline_是ImuCameraSynchronizerFlow的成员
- addCameraImage
- addImuMeasurements
- FeatureTrackingFlow只有在需要生成定位地图的时候才需要
- rovio本身不使用任何描述符,但起结果作为定位地图时,需要额外提取描述符
- ImuCameraSynchronizer不断发布message_flow_topics::SYNCED_NFRAMES_AND_IMU
- 有一些frame会被丢弃,不被用于后面的处理
- 不断检查imubuf里面的内容
- 消息类型vio::SynchronizedNFrameImu
- FeatureTrackingFlow接收消息并使用FeatureTracking处理消息
- 处理消息后发出message_flow_topics::TRACKED_NFRAMES_AND_IMU消息
- 消息类型vio::SynchronizedNFrameImu
- SyncedNFrameThrottlerFlow接收message_flow_topics::TRACKED_NFRAMES_AND_IMU
- 使用SyncedNFrameThrottler的shouldPublishNFrame判断这个消息是否可以继续传下去
- 时间间隔小于FLAGS_vio_throttler_max_output_frequency_hz就不用于定位了
- 发出消息message_flow_topics::THROTTLED_TRACKED_NFRAMES_AND_IMU
- 消息类型vio::SynchronizedNFrameImu
- 使用SyncedNFrameThrottler的shouldPublishNFrame判断这个消息是否可以继续传下去
- MapBuilderFlow接收message_flow_topics::TRACKED_NFRAMES_AND_IMU
- LocalizerFlow接收message_flow_topics::THROTTLED_TRACKED_NFRAMES_AND_IMU
- 调用Localizer的localizeNFrame开始定位
- 定位结果用message_flow_topics::LOCALIZATION_RESULT发出
- 消息类型vio::LocalizationResult
- RovioFlow接收message_flow_topics::LOCALIZATION_RESULT
- 调用rovio::RovioInterface的processGroundTruthUpdate更新滤波器状态
- MapBuilderFlow接收message_flow_topics::LOCALIZATION_RESULT
- DataPublisherFlow接收message_flow_topics::LOCALIZATION_RESULT
- 每一个ImuCameraSynchronizer发出的frame都会被提取描述符
- 只有通过SyncedNFrameThrottlerFlow的frame才被用于定位
- rovio::RovioInterface的registerStateUpdateCallback注册RovioFlow::processRovioUpdate
- 在RovioFlow的attachToMessageFlow完成
- processRovioUpdate接收到rovio::RovioState数据
- 处理和转换后把数据发送到message_flow_topics::ROVIO_ESTIMATES
- 消息类型RovioEstimate
- MapBuilderFlow接收message_flow_topics::ROVIO_ESTIMATES
- DataPublisherFlow接收message_flow_topics::ROVIO_ESTIMATES
- FeatureTrackingFlow接收message_flow_topics::ROVIO_ESTIMATES
- 数据传给FeatureTrackingFlow的FeatureTracking
maplab系列4:数据流
猜你喜欢
转载自blog.csdn.net/ziliwangmoe/article/details/83271372
今日推荐
周排行