ros rviz显示orb-slam2保存的轨迹

18 篇文章 1 订阅
15 篇文章 0 订阅

写在前面

1、本文内容
ros rviz显示orb-slam2保存的轨迹

2、平台
ubuntu1804, ros melodic
3、转载请注明出处:
https://blog.csdn.net/qq_41102371/article/details/126838142

代码

mkdir -p trajectory/src
cd trajectory/src
catkin_create_pkg show_path roscpp rospy tf nav_msgs
cd ..

把show_path.cpp放进src/show_path/src
在CMakeLists.txt中添加

add_executable(show_path_node src/imu_tf_pose.cpp)
target_link_libraries( show_path_node ${catkin_LIBRARIES})

show_path.cpp

#include <ros/ros.h>
#include <sensor_msgs/Imu.h>
#include <tf/transform_broadcaster.h>
#include <string>
#include <eigen3/Eigen/Core>
#include <eigen3/Eigen/Geometry>
#include "nav_msgs/Path.h"
#include <fstream>


ros::Publisher puber;


void PublishPath(std::string file_path)
{


    nav_msgs::Path path_msg;
    geometry_msgs::PoseStamped pose;

    pose.header.stamp = ros::Time::now();
    pose.header.frame_id = "/world";
    std::ifstream fin;
    fin.open(file_path,std::ios::in);
    if(!fin.is_open()){
        std::cout<<"can not open "<<file_path<<std::endl;
        return;
    }
    else{
            Eigen::Quaterniond Q_from_R;
            Eigen::Vector3d traj_node;
            while(!fin.eof()){
                double time,tx,ty,tz,qx,qy,qz,qw;
                fin>>time>>tx>>ty>>tz>>qx>>qy>>qz>>qw;
                pose.pose.position.x = tx;
                pose.pose.position.y = ty;
                pose.pose.position.z = tz;
                pose.pose.orientation.x = qx;
                pose.pose.orientation.y = qy;
                pose.pose.orientation.z = qz;
                pose.pose.orientation.w = qw;
                path_msg.poses.push_back(pose);
            }

    }

    path_msg.header.stamp = ros::Time::now();
    path_msg.header.frame_id = "/world";
    puber.publish(path_msg);
}

int main (int argc, char ** argv) {
    std::cout<<"argc: "<<argc<<std::endl;
    for(int i=0;i<argc;++i){
        std::cout<<argv[i]<<std::endl;
    }


    if(argc<2){
        std::cout<<"parameters:\n"
                        <<"file path including trajectory\n"
                        <<"topic name, default /trajectory"
                        <<std::endl;
        return 0;
    }
    std::string topic_name="/trajectory";
    
    std::string file_path=argv[1];
    if(argc>=3){
    topic_name=argv[2];
    std::cout<<"topic_name"<<topic_name<<std::endl;
    }
    ros::init(argc, argv, "path_publisher");
    
    ros::NodeHandle node;

    puber=node.advertise<nav_msgs::Path>(topic_name, 10);

    ros::Rate loop_rate(10);
    while(ros::ok()){
    PublishPath(file_path);
    }

    return 0;
}

使用

./devel/lib/show_path/show_path_node ./orb_slam2.txt /trajectory1 

打开rviz,add, by topic,选择发布的trajectory1
把fixed frame改成world

其中,/orb_slam2.txt为orb-slam2生成的轨迹文件,如

1662709738.611801 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000 1.0000000
1662709738.944941 -0.0026136 0.0170262 -0.0045148 0.0095704 0.0072003 0.0153332 0.9998107
1662709739.544584 0.0069332 0.0336722 0.0215601 0.0175027 -0.0293207 0.0545010 0.9979296
1662709744.308815 0.0545398 0.0866963 0.1380486 -0.0544997 -0.1701589 0.1484294 0.9726481
1662709744.508729 0.0569852 0.0875546 0.1378780 -0.0624662 -0.1643448 0.1828232 0.9672975
1662709744.675315 0.0595775 0.0904402 0.1297402 -0.0711926 -0.1598502 0.2039685 0.9632115
1662709745.308262 0.0525226 0.0983748 0.1075200 -0.0962976 -0.1551851 0.2081083 0.9609034
1662709746.774192 0.0280566 0.0733101 0.1472074 -0.0261320 -0.1733477 0.1026057 0.9791526
...
...
...

参考

https://github.com/gaoxiang12/slambook2/blob/9382d9066029308ff40a539d64880d540135bfd6/ch3/examples/plotTrajectory.cpp
https://github.com/robosu12/imu_data_simulation/blob/master/src/vio_data_simulation/src/gener_alldata.cpp

--------------------------------------------------------------------------------------------202209

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
ROS中使用ORB-SLAM进行定位和建图,需要将相机的图像数据发布到ROS中,然后订阅这些图像数据,将其传递给ORB-SLAM进行处理。 首先,你需要使用ROS中的相机驱动程序来获取相机的图像数据,并将其发布到ROS中。你可以使用任何ROS支持的相机驱动程序,例如USB相机驱动程序或者网络相机驱动程序。在获取到相机图像数据后,你需要将它们以图像话题的形式发布到ROS中,例如使用`sensor_msgs/Image`消息类型来发布图像数据。 然后,你需要在ORB-SLAM节点中订阅这些图像话题,并使用ORB-SLAM进行处理。在ORB-SLAM节点中,你需要订阅相机的图像话题,例如使用`ros::Subscriber`来订阅`sensor_msgs/Image`消息类型的话题。然后,你需要将这些图像数据传递给ORB-SLAM进行处理。ORB-SLAM会使用这些图像数据进行定位和建图。 在ORB-SLAM节点中,你还需要发布ORB-SLAM的位姿信息和地图数据,以便其他节点订阅并使用。你可以使用`ros::Publisher`来发布ORB-SLAM的位姿信息和地图数据,例如使用`geometry_msgs/PoseStamped`消息类型来发布ORB-SLAM的位姿信息,使用`nav_msgs/OccupancyGrid`消息类型来发布ORB-SLAM的地图数据。 总之,使用ORB-SLAM进行定位和建图需要以下几个步骤: 1. 使用ROS相机驱动程序获取相机图像数据,并以图像话题的形式发布到ROS中。 2. 在ORB-SLAM节点中订阅相机图像话题,并使用ORB-SLAM进行处理。 3. 在ORB-SLAM节点中发布ORB-SLAM的位姿信息和地图数据,以便其他节点订阅并使用。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诺有缸的高飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值