流程图有助于快速梳理清楚一个系统的思路,流程图有以下优点:
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);