数据接收
开启算法后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
}