realsenseD435i跑PL-VINS

修改配置文件

先把PL-VINS跑起来,然后仿照用D435i跑VINS-mono的步骤,修改配置文件。
把vinsmono的realsense_color.launch文件拷贝进PL-VINS/vins_estimator/launch目录中,记得添加线特征的节点,参考PL-VINS的plvins-show-linepoint.launch文件。
把VINS-Mono/config/realsense/realsense_color_config.yaml配置文件拷贝到PL-VINS的配置文件目录下。
同时,要修改这上述两个文件中的内容(主要是一些名称)和PL-VINS对应上。
最后roslaunch realsense_color.launch和D435i的rs_camera.launch 就可以了。

遇到问题及解决

问题描述

笔者可以正常跑起来,但在rviz中的可视化界面看不到提取的点线特征图像,显示No Image
在左侧Displays中的tracked image下拉的status项显示状态为warn,并提示no image received。而且似乎整个线特征提取的节点没有正常地提取线特征。

解决

阅读代码发现在image_node_b.cpp中直接硬编码读了eruoc的config,所以这个image_node_b这个节点整个就不对了。
解决该问题最方便的方法是改掉main中

m_camera = camodocal::CameraFactory::instance()->generateCameraFromYamlFile()

的参数,改为config/realsense/realsense_color_config.yaml,然后改话题名

message_filters::Subscriber<sensor_msgs::Image> image_sub(nh, "/cam0/image_raw", 1000);
改为:
message_filters::Subscriber<sensor_msgs::Image> image_sub(nh, "/camera/color/image_raw", 1000);

问题解决,可以正常显示tracked image,并且线特征提取的节点可以正常提取线特征。

更优雅的解决方案(暂未实现,仍然报错)

上面把程序写死了,如果想要切换运行方式还要改代码再编译,十分窘迫。
尝试修改launch文件和代码,更优雅地启动程序。
在image_node_b.cpp中添加如下代码,放在主函数之前

std::string IMAGE_TOPIC;
std::vector<std::string> CAM_NAMES;
template <typename T>
T readParam(ros::NodeHandle &n, std::string name)
{
    T ans;
    if (n.getParam(name, ans))
    {
        ROS_INFO_STREAM("Loaded " << name << ": " << ans);
    }
    else
    {
        ROS_ERROR_STREAM("Failed to load " << name);
        n.shutdown();
    }
    return ans;
}

void readParameters(ros::NodeHandle &n)
{
    std::string config_file;
    config_file = readParam<std::string>(n, "config_file");
    cv::FileStorage fsSettings(config_file, cv::FileStorage::READ);
    if(!fsSettings.isOpened())
    {
        std::cerr << "ERROR: Wrong path to settings" << std::endl;
    }

    fsSettings["image_topic"] >> IMAGE_TOPIC;
    CAM_NAMES.push_back(config_file);
    fsSettings.release();
}

并将主函数中读入参数的部分改为如下

  ros::init(argc, argv, "sync_control_node"); 
  ros::NodeHandle nh;
  readParameters(nh);
  m_camera = camodocal::CameraFactory::instance()->generateCameraFromYamlFile(CAM_NAMES[0]);
  K_ = m_camera->initUndistortRectifyMap(undist_map1_,undist_map2_);  

  message_filters::Subscriber<sensor_msgs::PointCloud> point_feature_sub(nh, "/feature_tracker/feature",1000); 
  message_filters::Subscriber<sensor_msgs::PointCloud> line_feature_sub(nh, "/linefeature_tracker/linefeature", 1000);
  message_filters::Subscriber<sensor_msgs::Image> image_sub(nh, IMAGE_TOPIC, 1000);

在realsense_color.launch中的image_node_b这个node下添加参数config_file

    <node name="image_node_b" pkg="image_node_b" type="image_node_b" output="log">
    	<param name="config_file" type="string" value="$(arg config_path)" />
    </node>   

在Nvidia NX上运行

按照之前readme的步骤改了之后,catkin_make报错

PL-VINS/feature_tracker/src/line_descriptor/lib/liblinedesc.so: error adding symbols: file in wrong format

这可能是cpu架构的问题导致的格式错误,用file命令查看此文件格式,显示为x86架构,而NX内核为arm架构。

解决方法

进入PL-VINS/feature_tracker/src/line_descriptor/目录下,重新cmake ,make问题解决。

  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值