我为你准备了一个轨迹文件(code/trajectory.txt)。该文件的每一行由若干个数据组成,格式为
[t, t x , t y , t z , q x , q y , q z , q w ],
其中 t 为时间,t x , t y , t z 为 T W C 的平移部分,q x , q y , q z , q w 是四元数表示的 T W C 的旋转部分,q w
为四元数实部。同时,我为你提供了画图程序 draw_trajectory.cpp 文件。该文件提供了画图部分
的代码,请你完成数据读取部分的代码,然后书写 CMakeLists.txt 以让此程序运行起来。注意我
们需要用到 Pangolin 库来画图,所以你需要事先安装 Pangolin(如果你做了第一次作业,那么现
在已经安装了)。CMakeLists.txt 可以参照 ORB-SLAM2 部分。

代码如下

  1 #include <sophus/se3.h>
  2 #include <string>
  3 #include <iostream>
  4 #include <fstream>
  5
  6 // need pangolin for plotting trajectory
  7 #include <pangolin/pangolin.h>
  8
  9 using namespace std;
 10
 11 // path to trajectory file
 12 string trajectory_file = "./trajectory.txt";
 13
 14 // function for plotting trajectory, don't edit this code
 15 // start point is red and end point is blue
 16 void DrawTrajectory(vector<Sophus::SE3, Eigen::aligned_allocator<Sophus::SE3>>);
 17
 18 int main(int argc, char **argv) {
 19
 20     vector<Sophus::SE3, Eigen::aligned_allocator<Sophus::SE3>> poses;
 21
 22     /// implement pose reading code
 23     // start your code here (5~10 lines)
 24
 25     ifstream infile;
 26     infile.open("trajectory.txt");
 27     if(!infile) cout<<"error"<<endl;
 28
 29     cout<<"存入数组"<<endl;
 30     double data;
 31     double a[620][8];
 32     double *p=&a[0][0];
 33     while(infile>>data)             //遇到空白符结束
 34     {
 35         *p=data;
 36          p++;
 37     }
 38     infile.close();
 39     for(int i=0;i<620;i++)
 40     {   for(int j=0;j<8;j++)
 41            cout<<a[i][j]<<"\t";
 42          cout<<endl;
 43     }
 44     for(int i=0;i<620;i++)
 45     {
 46     Eigen::Quaterniond q = Eigen::Quaterniond(a[i][7],a[i][4],a[i][5],a[i][6]);
 47         Eigen::Vector3d t;
 48     t<<a[i][1],a[i][2],a[i][3];
 49         Sophus::SE3 SE3_qt(q,t);
 50         //cout<<SE3_qt<<endl;
 51         poses.push_back(SE3_qt);
 52     }
 53     // end your code here
 54
 55     // draw trajectory in pangolin
 56     DrawTrajectory(poses);
 57     return 0;
 58 }
 59
 60
 61 void DrawTrajectory(vector<Sophus::SE3, Eigen::aligned_allocator<Sophus::SE3>> poses) {
 62     if (poses.empty()) {
 63         cerr << "Trajectory is empty!" << endl;
 64         return;
 65     }
 66
 67     // create pangolin window and plot the trajectory
 68     pangolin::CreateWindowAndBind("Trajectory Viewer", 1024, 768);
 69     glEnable(GL_DEPTH_TEST);
 70     glEnable(GL_BLEND);
 71     glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 72
 73     pangolin::OpenGlRenderState s_cam(
 74             pangolin::ProjectionMatrix(1024, 768, 500, 500, 512, 389, 0.1, 1000),
 75             pangolin::ModelViewLookAt(0, -0.1, -1.8, 0, 0, 0, 0.0, -1.0, 0.0)
 76     );
 77
 78     pangolin::View &d_cam = pangolin::CreateDisplay()
 79             .SetBounds(0.0, 1.0, pangolin::Attach::Pix(175), 1.0, -1024.0f / 768.0f)
 80             .SetHandler(new pangolin::Handler3D(s_cam));
 81
 82
 83     while (pangolin::ShouldQuit() == false) {
 84         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 85
 86         d_cam.Activate(s_cam);
 87         glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
 88
 89         glLineWidth(2);
 90         for (size_t i = 0; i < poses.size() - 1; i++) {
 91             glColor3f(1 - (float) i / poses.size(), 0.0f, (float) i / poses.size());
 92             glBegin(GL_LINES);
 93             auto p1 = poses[i], p2 = poses[i + 1];
 94             glVertex3d(p1.translation()[0], p1.translation()[1], p1.translation()[2]);
 95             glVertex3d(p2.translation()[0], p2.translation()[1], p2.translation()[2]);
 96             glEnd();
 97         }
 98         pangolin::FinishFrame();
 99         usleep(5000);   // sleep 5 ms
100     }
101
102 }

CMakeLists.txt文件如下所示

 1 cmake_minimum_required( VERSION 2.8 )
 2
 3 project(trajectory.txt)
 4
 5 set( CMAKE_BUILD_TYPE "Debug" )
 6 #是 O3 不是 03
 7 set( CMAKE_CXX_FLAGS "-std=c++11 -O3" )
 8
 9
10
11 find_package( Sophus REQUIRED)
12 find_package( Pangolin REQUIRED)
13
14
15 include_directories( "/usr/include/eigen3" )
16 include_directories( ${Sophus_INCLUDE_DIRS} )
17 include_directories( ${Pangolin_INCLUDE_DIRS} )
18
19 add_executable( draw_trajectory draw_trajectory.cpp)
20
21 target_link_libraries( draw_trajectory ${Sophus_LIBRARIES} ${Pangolin_LIBRARIES} )

结果如图

转载于:https://www.cnblogs.com/feifanrensheng/p/8574601.html

高博课程第三次作业之轨迹的描绘相关推荐

  1. R课程 第三次作业 作业:股票收益率的影响因素分析

    R课程 第三次作业 作业:股票收益率的影响因素分析 背景介绍,什么因素会影响股票的收益率是一个重要的金融学问题,经典资本资产定价模型认为股票的预期收益率,仅由系统性风险(beta)决定,Fama-Fr ...

  2. BUAA OO 2019 第三单元作业总结

    目录 总 JML规格化设计 理论基础 工具链 规格验证 验证代码 代码静态检查 自动生成测试样例 生成结果 错误分析 作业设计 第九次作业 架构 代码实现 第十次作业 架构 代码实现 第十一次作业 架 ...

  3. 闽江学院2015-2016学年下学期《软件测试》课程-第三次博客作业

    闽江学院2015-2016学年下学期<软件测试>课程-第三次博客作业 作业提交班级:13软金2班全体同学 作业提交截止日期:2016年4月30日24:00前(超过截止时间提交的不给成绩) ...

  4. 《spark技术应用》课程期末考试大作业报告,使用eclipse完成求top值、文件排序、二次排序三个程序的个性化开发。

    ​​​​目录 一.选题的目的及要求... 4 二.设计思路... 4 三.主要内容及关键技术.. 5 四.制作步骤... 5 1.准备工作... 5 1.1在VMware中安装一台Ubuntu64位系 ...

  5. 【渝粤题库】陕西师范大学202521中国古代文学(三) 作业(高起专)

    <中国古代文学三>作业 第一章 元曲的形成和兴盛 一.填空题: 1.我国的戏剧,其起源.形成,经历了漫长的时期.从先秦( ).汉魏( ).隋唐( )发展到宋代院本,表演要素日臻完善. 2. ...

  6. 【渝粤题库】陕西师范大学291003综合英语(三)作业(高起专、高起本)

    <综合英语三>作业 Matching. Read the following words and match them with the explanations in the right ...

  7. 《AlwaysRun团队》第三次作业:团队项目的原型设计

    <AlwaysRun团队>第三次作业:团队项目的原型设计 项目 内容 这个作业属于哪个课程 [任课教师博客主页链接](https://home.cnblogs.com/u/nwnu-dai ...

  8. 第三次作业--原型设计

    A君第三次原型设计作业:第三次作业 这个作业属于哪个课程 <https://edu.cnblogs.com/campus/xnsy/2019autumnsystemanalysisanddesi ...

  9. 高博应诺培训班学习一个月总结

    来到苏州已经有一个月了,在高博应诺学习也有一个月了,写点东西总结总结.首先说说老师的教学,老师的教学呢,感觉就是按部就班吧,按照安排好的四个月的课表每天都有相应的教学学习内容,一般老师每天都会布置一天 ...

最新文章

  1. java 多线程 函数_Java多线程--同步函数
  2. 《无线网络安全攻防实战》读书笔记
  3. sudo apt update提示某个源超时
  4. Android投屏(屏幕共享)设计需要考虑的关键因素
  5. 英语口语练习软件测试简历,软件测试员英语简历范文
  6. 【Python3_进阶系列_004】Python3-工厂设计模式
  7. #openstack centos6 centos7 kvm镜像制作
  8. 最新仿企业发卡源码,自动发卡平台
  9. 史上最全的程序员常用英语词汇 珍藏版
  10. 雷达波位编排matlab仿真
  11. 站在巨人肩膀上——vb.net学习
  12. 【爬虫】如何通过爬虫,爬取百度图片?新手小白一看便会,内附超详细代码讲解
  13. ih5连接mysql数据库_iH5高级教程:H5数据应用,多种数据的判断
  14. python绘制指数函数图像及性质_python实现画出e指数函数的图像
  15. 英特尔第十代处理器为什么不支持win7_Intel的7代酷睿CPU可以安装Win7系统吗?能不能完美支持呢?为什么有人说不能使用Win7系统...
  16. MISC相关工具下载
  17. sklearn 中的Ridge函数
  18. 蒙特卡洛方法的收敛性和误差
  19. c语言之动静态链接库
  20. 迅雷高速下载免安装 Kali Linux

热门文章

  1. lightroom安卓_如何将Lightroom从PC预设导入手机(安卓amp;iOS)
  2. 图像与点云三维重建算法
  3. UFUNufun币ufun优趣集团
  4. Callback--EarlyStopping
  5. 隐马尔可夫模型(背景介绍)
  6. 收集到一些关于python的文章,存起来慢慢看。。。
  7. WinRAR 实现简单的自解压
  8. bash入门脚本(未完善)
  9. APP支持文件共享设置(iOS)
  10. CH579蓝牙智能遥控器方案