数据接收

开启算法后VIO会通过双目数据和IMU数据计算自身位姿,并通过话题方式输出结果(同步串口输出)。

一.算法输出数据

1.里程计

话题名:/baton_mini/stereo3/odometry or /baton_mini/stereo4/odometry Type: nav_msgs/msg/Odometry

2.带特征点的图像

话题名:/baton_mini/stereo3/feature_img or /baton_mini/stereo4/feature_img Type: sensor_msgs/msg/Image

3.历史轨迹

话题名:/baton_mini/stereo3/path_odom or /baton_mini/stereo4/path_odom Type: nav_msgs/msg/Path

这个话题需要有接收者接收里程计话题消息才会发出

4.点云

话题名:/baton_mini/stereo3/pointcloud or /baton_mini/stereo4/pointcloud Type: sensor_msgs/msg/PointCloud2

视觉的点云是纯视觉点云,比较抽象,作用不大。

二.简单demo

1.注册话题接收回调:

以下代码已stereo3为例,stereo4同理

 rclcpp::init(argc, argv);
 auto node_options = rclcpp::NodeOptions();
 nh = rclcpp::Node::make_shared("stereo3_receive", node_options);
 rclcpp::Subscription<sensor_msgs::msg::PointCloud2>::SharedPtr sub_stereo3_pointcloud = 
          nh->create_subscription<sensor_msgs::msg::PointCloud2>("/baton_mini/stereo3/pointcloud", 50, std::bind(&stereo3_pointcloud2_callback, std::placeholders::_1));
 
 rclcpp::Subscription<sensor_msgs::msg::Image>::SharedPtr sub_stereo3_img = 
         nh->create_subscription<sensor_msgs::msg::Image>("/baton_mini/stereo3/feature_img", 50, std::bind(&stereo3_img_callback, std::placeholders::_1));
 
 rclcpp::Subscription<nav_msgs::msg::Odometry>::SharedPtr sub_stereo3_odom = 
        nh->create_subscription<nav_msgs::msg::Odometry>("/baton_mini/stereo3/odometry", 50, std::bind(&stereo3_odom_callback, std::placeholders::_1));
 
 

2.编写回调函数

void stereo3_odom_callback(const nav_msgs::msg::Odometry::SharedPtrmsg){
    //todo
}
void stereo3_img_callback(const sensor_msgs::msg::Image::SharedPtr){
    //todo
}
void stereo3_pointcloud2_callback(const sensor_msgs::msg::PointCloud2::SharedPtr){
    //todo
}