AIRVO视觉里程计每天一函数代码解析

本文解析了AIRVO视觉里程计的主函数逻辑,分析了其代码优点和缺点,如模块化、异常处理、ROS日志系统使用等。同时,提出了测试函数的组织结构建议,包括使用测试框架、编写测试用例、设置和清理环境,以及如何在项目中组织测试代码。
摘要由CSDN通过智能技术生成

主函数流程图逻辑

流程图有助于快速梳理清楚一个系统的思路,流程图有以下优点:

  1. 图比代码更清晰
  2. 沟通协作更顺畅(这也是题主比较关注的一点)

主函数注释

AirVO主函数代码如下:

int main(int argc, char **argv) {
    // 初始化ROS节点,指定节点名为 "air_vo_ros"
    ros::init(argc, argv, "air_vo_ros");

    // 设置ROS日志级别为Info
    ros::console::set_logger_level(ROSCONSOLE_DEFAULT_NAME, ros::console::levels::Info);

    // 如果命令行参数数量大于1,发出警告
    if (argc > 1) {
        ROS_WARN("Arguments supplied via command line are ignored.");
    }

    // 从ROS参数服务器获取左右摄像机图像话题
    std::string left_topic, right_topic;
    ros::param::get("~left_topic", left_topic);
    ros::param::get("~right_topic", right_topic);

    // 创建ROS节点句柄
    ros::NodeHandle node_handler;

    // 创建图像消息订阅者
    message_filters::Subscriber<sensor_msgs::Image> sub_img_left(node_handler, left_topic, 1);
    message_filters::Subscriber<sensor_msgs::Image> sub_img_right(node_handler, right_topic, 1);

    // 定义图像消息同步策略
    typedef message_filters::sync_policies::ApproximateTime<sensor_msgs::Image, sensor_msgs::Image> sync_pol;
    // 创建图像消息同步器,并注册回调函数为GrabStereo
    message_filters::Synchronizer<sync_pol> sync(sync_pol(10), sub_img_left, sub_img_right);
    sync.registerCallback(boost::bind(&GrabStereo, _1, _2));

    // 从ROS参数服务器获取AirVO配置信息和模型路径
    std::string config_path, model_dir;
    ros::param::get("~config_path", config_path);
    ros::param::get("~model_dir", model_dir);

    // 创建Configs对象,用于存储配置信息
    Configs configs(config_path, model_dir);

    // 从ROS参数服务器获取相机配置路径、保存路径和轨迹路径
    ros::param::get("~camera_config_path", configs.camera_config_path);
  • 18
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值