国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

orb_slam3實(shí)現(xiàn)保存/加載地圖功能and發(fā)布位姿功能

這篇具有很好參考價(jià)值的文章主要介紹了orb_slam3實(shí)現(xiàn)保存/加載地圖功能and發(fā)布位姿功能。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1.保存/加載地圖

先說(shuō)方法:在加載的相機(jī)參數(shù)文件.yaml的最前面加上下面兩行就行。

System.LoadAtlasFromFile: "MH01_to_MH05_stereo_inertial.osa"
System.SaveAtlasToFile: "MH01_to_MH05_stereo_inertial.osa" 

第一行表示從本地加載名為"MH01_to_MH05_stereo_inertial.osa"的地圖文件,第二行表示保存名為"MH01_to_MH05_stereo_inertial.osa"的地圖到本地。第一次運(yùn)行建圖時(shí)注釋掉第一行,只使用第二行,加載地圖重定位時(shí)反過(guò)來(lái),親測(cè)同時(shí)使用會(huì)報(bào)錯(cuò)

2.發(fā)布位姿

以雙目節(jié)點(diǎn)ros_stereo.cc為例修改。計(jì)算的位姿由mpSLAM->TrackStereo函數(shù)返回,返回類(lèi)型是Sophus::SE3f,弄一個(gè)變量Tcw_SE3f接受返回值:

Sophus::SE3f Tcw_SE3f=mpSLAM->TrackStereo(imLeft,imRight,cv_ptrLeft->header.stamp.toSec());

Sophus::SE3f不知道是啥,也不知道怎么解析提取想要的數(shù)據(jù),但是cv::Mat格式的我知道怎么做,于是將Sophus::SE3f轉(zhuǎn)換成cv::Mat:

cv::Mat Tcw;
Sophus::SE3f Tcw_SE3f=mpSLAM->TrackStereo(imLeft,imRight,cv_ptrLeft->header.stamp.toSec());
Eigen::Matrix4f Tcw_Matrix = Tcw_SE3f.matrix();
cv::eigen2cv(Tcw_Matrix, Tcw);

這時(shí)候Tcw就是cv::Mat格式了。
然后將Tcw發(fā)布:

PublishPose(Tcw);

構(gòu)造發(fā)布器:

ros::Publisher PosPub = nh.advertise<geometry_msgs::PoseStamped>("ORB_SLAM3/pose", 5);

PublishPose函數(shù)中,解析提取數(shù)據(jù)部分關(guān)鍵代碼如下:

geometry_msgs::PoseStamped poseMSG;
    if(!Tcw.empty())
    {
   
        cv::Mat Rwc = Tcw.rowRange(0,3).colRange(0,3).t();
        cv::Mat twc = -Rwc*Tcw.rowRange(0,3).col(3);
        vector<float> q = ORB_SLAM3::Converter::toQuaternion(Rwc);
        poseMSG.pose.position.x = - twc.at<float>(0);
        poseMSG.pose.position.y = -twc.at<float>(2);
        poseMSG.pose.position.z = twc.at<float>(1);
        poseMSG.pose.orientation.x = q[0];
        poseMSG.pose.orientation.y = q[1];
        poseMSG.pose.orientation.z = q[2];
        poseMSG.pose.orientation.w = q[3];
        poseMSG.header.frame_id = "VSLAM";
        poseMSG.header.stamp = ros::Time::now();
        pPosPub->publish(poseMSG);

完整代碼如下:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-614534.html

#include <Eigen/Dense>
#include <opencv2/core/eigen.hpp>
#include<iostream>
#include<algorithm>
#include<fstream>
#include<chrono>
#include<ros/ros.h>
#include <cv_bridge/cv_bridge.h>
#include <message_filters/subscriber.h>
#include <message_filters/time_synchronizer.h>
#include <message_filters/sync_policies/approximate_time.h>
#include<opencv2/core/core.hpp>
#include"../../../include/System.h"
#include <tf/transform_broadcaster.h>
#include "Converter.h"

using namespace std;

class ImageGrabber
{
   
public:
    ImageGrabber(ORB_SLAM3::System* pSLAM):mpSLAM(pSLAM){
   }
    void GrabStereo(const sensor_msgs::ImageConstPtr& msgLeft,const sensor_msgs::ImageConstPtr& msgRight);
    void PublishPose(cv::Mat Tcw);
    ORB_SLAM3::System* mpSLAM;
    bool do_rectify;
    cv::Mat M1l,M2l,M1r,M2r;
    ros::Publisher* pPosPub;
};

void ImageGrabber::PublishPose(cv::Mat Tcw)
{
   
    geometry_msgs::PoseStamped poseMSG;
    if(!Tcw.empty())
    {
   

        cv::Mat Rwc = Tcw.rowRange(0,3).colRange(0,3).t();
        cv::Mat twc = -Rwc*Tcw.rowRange(0,3).col(3);
        vector<float> q = ORB_SLAM3::Converter::toQuaternion(Rwc);
        poseMSG.pose.position.x = - twc.at<float>(0);
        poseMSG.pose.position.y = -twc.at<float>(2);
        poseMSG.pose.position.z = twc.at<float>(1);
        poseMSG.pose.orientation.x = q[0];
        poseMSG.pose.orientation.y = q[1];
        poseMSG.pose.orientation.z = q[2];
        poseMSG.pose.orientation.w = q[3];
        poseMSG.header.frame_id = "VSLAM";
        poseMSG.header.stamp = ros::Time::now();
        pPosPub->publish(poseMSG);
    }
}

int main(int argc, char **argv)
{
   
    ros::init(argc, argv, "RGBD");
    ros::start();

    if(argc != 4)
    {
   
        cerr << endl << "Usage: rosrun ORB_SLAM3 Stereo path_to_vocabulary path_to_settings do_rectify" << endl;
        ros::shutdown();
        return 1;
    }    

    // Create SLAM system. It initializes all system threads and gets ready to process frames.
    ORB_SLAM3::System SLAM(argv[1],argv[2],ORB_SLAM3::System::STEREO,true);

    ImageGrabber igb(&SLAM);

    stringstream ss(argv[3]);
	ss >> boolalpha >> igb.do_rectify;

    if(igb.do_rectify)
    {
         
        // Load settings related to stereo calibration
        cv::FileStorage fsSettings(argv[2], cv::FileStorage::READ);
        if(!fsSettings.isOpened())
        {
   
            cerr << "ERROR: Wrong path to settings" << endl;
            return -1;
        }

        cv::Mat K_l, K_r, P_l, P_r, R_l, R_r, D_l, D_r;
        fsSettings["LEFT.K"] >> K_l;
        fsSettings["RIGHT.K"] >> K_r;

        fsSettings["LEFT.P"] >> P_l;
        fsSettings["RIGHT.P"] >> P_r;

        fsSettings["LEFT.R"] >> R_l;
        fsSettings["RIGHT.R"] >> R_r;

        fsSettings["LEFT.D"] >> D_l;
        fsSettings["RIGHT.D"] >> D_r;

        int rows_l = fsSettings[

到了這里,關(guān)于orb_slam3實(shí)現(xiàn)保存/加載地圖功能and發(fā)布位姿功能的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 高翔ORB-SLAM2稠密建圖編譯(添加實(shí)時(shí)彩色點(diǎn)云地圖+保存點(diǎn)云地圖)

    高翔ORB-SLAM2稠密建圖編譯(添加實(shí)時(shí)彩色點(diǎn)云地圖+保存點(diǎn)云地圖)

    本文寫(xiě)于2022年5月18日。 Ubuntu18.04 + ROS melodic ORBSLAM2_with_pointcloud_map 是基于 ORB_SLAM2 改動(dòng)的, ORB_SLAM2 編譯前一些庫(kù)的安裝以及編譯時(shí)的報(bào)錯(cuò)參考此篇博客 ORBSLAM2_with_pointcloud_map源碼地址 將源碼下載到 ~/catkin_ws/src 目錄下面 如果沒(méi)有安裝 Ros Melodic ,參考Ubuntu18.04安裝Ros Melodic 以及

    2024年01月23日
    瀏覽(30)
  • ORB_SLAM3 LocalMapping中CreateNewMapPoints

    CreateNewMapPoints 在 新插入的關(guān)鍵幀 的 鄰近的關(guān)鍵幀 中,通過(guò) 詞袋模型 與新插入關(guān)鍵幀中 沒(méi)有匹配的 ORB特征進(jìn)行匹配,并拋棄其中 不滿足對(duì)極約束 的匹配點(diǎn)對(duì),接著通過(guò) 三角化 生成地圖點(diǎn) GetBestCovisibilityKeyFrames :找出與當(dāng)前關(guān)鍵幀 共視程度最高前nn幀 vpNeighKFs 如果是 I

    2024年02月01日
    瀏覽(32)
  • ORB_SLAM2運(yùn)行KITTI數(shù)據(jù)集

    ORB_SLAM2運(yùn)行KITTI數(shù)據(jù)集

    ????????在前文我們已經(jīng)安裝運(yùn)行了ORB_SLAM2,下載和編譯(包括報(bào)錯(cuò))在文章: ORB_SLAM2下載編譯及運(yùn)行EuRoC數(shù)據(jù)集_淺夢(mèng)語(yǔ)11的博客-CSDN博客_euroc數(shù)據(jù)集下載 ? ? ? ? 并且我們使用運(yùn)行了EuRoC數(shù)據(jù)集。今天利用框架運(yùn)行KITTI數(shù)據(jù)集。 ? ? ? ? 注意 :如果沒(méi)有運(yùn)行成功EuRoC數(shù)據(jù)

    2024年02月08日
    瀏覽(23)
  • 【ORB_SLAM2算法中逐函數(shù)講解】

    在ORB-SLAM2算法中, TrackReferenceKeyFrame() 函數(shù)主要用于根據(jù)參考關(guān)鍵幀(Reference KeyFrame)來(lái)進(jìn)行相機(jī)位姿估計(jì)。這個(gè)函數(shù)在跟蹤過(guò)程中起到關(guān)鍵作用,它使用當(dāng)前幀與參考關(guān)鍵幀之間的匹配點(diǎn)進(jìn)行位姿估計(jì),從而實(shí)現(xiàn)視覺(jué)里程計(jì)的功能。以下是這個(gè)函數(shù)中的主要操作: 計(jì)算當(dāng)前

    2023年04月25日
    瀏覽(18)
  • ORB_SLAM3:?jiǎn)文?IMU初始化流程梳理

    單目+IMU模式下,前面的一些配置完成后,處理第一幀圖像時(shí): 1、每幀圖像都會(huì)調(diào)用該函數(shù): 目的:使灰度直方圖分布較為均勻,從而使整體對(duì)比度更強(qiáng),便于后面特征點(diǎn)的提取等工作; 2、第一幀圖像(ni=0)時(shí)無(wú)IMU數(shù)據(jù)(vImuMeas容器為空),進(jìn)入下面的這個(gè)函數(shù): 該函數(shù)先

    2024年02月10日
    瀏覽(24)
  • 在realsense D455相機(jī)上運(yùn)行orb_slam3

    參考https://blog.csdn.net/weixin_42990464/article/details/133019718?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171109916816777224423276%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257Drequest_id=171109916816777224423276biz_id=0utm_medium=distribute.pc_search_result.none-task-blog-2 blog first_rank_ecpm_v1~rank_v31_ecpm

    2024年03月26日
    瀏覽(30)
  • RGB-L:基于激光雷達(dá)增強(qiáng)的ORB_SLAM3(已開(kāi)源)

    RGB-L:基于激光雷達(dá)增強(qiáng)的ORB_SLAM3(已開(kāi)源)

    點(diǎn)云PCL免費(fèi)知識(shí)星球,點(diǎn)云論文速讀。 文章:RGB-L: Enhancing Indirect Visual SLAM using LiDAR-based Dense Depth Maps 作者:Florian Sauerbeck, Benjamin Obermeier, Martin Rudolph 編輯:點(diǎn)云PCL 代碼:https://github.com/TUMFTM/ORB_SLAM3_RGBL.git 歡迎各位加入免費(fèi)知識(shí)星球,獲取PDF論文,歡迎轉(zhuǎn)發(fā)朋友圈。文章僅

    2024年02月07日
    瀏覽(25)
  • ORB_SLAM2配置——基于Ubuntu20.04+ROS+gazebo仿真

    ORB_SLAM2配置——基于Ubuntu20.04+ROS+gazebo仿真

    一、引言 ORB-SLAM2,它是基于單目、雙目或RGB-D相機(jī)的一個(gè)完整的SLAM系統(tǒng),其中包括地圖重用、回環(huán)檢測(cè)和重定位功能。這個(gè)系統(tǒng)可以適用于多種環(huán)境,無(wú)論是室內(nèi)小型手持設(shè)備,還是工廠環(huán)境中飛行的無(wú)人機(jī)和城市中行駛的車(chē)輛,其都可以在標(biāo)準(zhǔn)CPU上實(shí)時(shí)運(yùn)行。該系統(tǒng)的后端

    2023年04月13日
    瀏覽(25)
  • ORB_SLAM3 ROS編譯及使用D435I運(yùn)行

    ORB_SLAM3 ROS編譯及使用D435I運(yùn)行

    本文介紹ORB_SLAM3編譯、運(yùn)行中遇到問(wèn)題,尤其涉及到ORB_SLAM3 ROS編譯遇到的問(wèn)題。最后通過(guò)使用D435I完成在室內(nèi)環(huán)境下運(yùn)行。 本文運(yùn)行環(huán)境在Ubuntu20.04 + ROS noetic。 一、ORB_SLAM3 依賴(lài)安裝 ORB_SLAM3 依賴(lài)的安裝,有同學(xué)喜歡上來(lái)就baidu,按照別人介紹的安裝,這樣做大多數(shù)時(shí)候會(huì)出現(xiàn)

    2024年02月03日
    瀏覽(37)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包