从本文开始,从头阅读VINS源代码。
本节主要阅读feature_tracker_node.cpp中的主函数main(),代码实现了feature_tracker节点初始化,配置文件yaml参数读取,topic订阅与发布。
本文只探讨针孔模型。
VINS-Mono/Fusion代码学习系列:
从零学习VINS-Mono/Fusion源代码(一):主函数
从零学习VINS-Mono/Fusion源代码(二):前端图像跟踪
从零学习VINS-Mono/Fusion源代码(三):IMU预积分公式推导
从零学习VINS-Mono/Fusion源代码(四):误差卡尔曼滤波
从零学习VINS-Mono/Fusion源代码(五):VIO初始化
从零学习VINS-Mono/Fusion源代码(六):后端优化
从零学习VINS-Mono/Fusion源代码(一):主函数
1 系统节点结构
vins-mono源码:https://github.com/HKUST-Aerial-Robotics/VINS-Mono
首先,利用rqt_graph查看ros下系统整体节点图,给出了各个topic的发布和订阅关系。

2 主函数main()
主函数的部分主要是搭建一个ros框架,定义节点、订阅者、发布者,读取配置文件参数,通过回调函数对订阅到的图像信息进行处理。
其整体流程如下图所示:

int main(int argc, char **argv)
{
ros::init(argc, argv, "feature_tracker");//节点名称
ros::NodeHandle n("~");//n句柄
ros::console::set_logger_level(ROSCONSOLE_DEFAULT_NAME, ros::console::levels::Info);
//读取配置参数
readParameters(n);
//在VINS-Mono中 NUM_OF_CAM=1,只有单目
for (int i = 0; i < NUM_OF_CAM; i++)
trackerData[i].readIntrinsicParameter(CAM_NAMES[i]);//读相机内参
if(FISHEYE)
{
for (int i = 0; i < NUM_OF_CAM; i++)
{
trackerData[i].fisheye_mask = cv::imread(FISHEYE_MASK, 0);
if(!trackerData[i].fisheye_mask.data)
{
ROS_INFO("load mask fail");
ROS_BREAK();
}
else
ROS_INFO("load mask success");
}
}
//订阅图像,回调函数img_callback
ros::Subscriber sub_img = n.

本文深入剖析VINS-Mono/Fusion源代码中的feature_tracker_node.cpp文件,详细解读了主函数main()的功能实现,包括节点初始化、配置文件参数读取、图像主题订阅与发布等关键步骤。
最低0.47元/天 解锁文章
2293

被折叠的 条评论
为什么被折叠?



