定位算法移植到ios

目的:

  • 把maplab编译到ios

细节:

  • 先要编译opencv的framework,boost的静态库。这两个网上有很多信息怎么编译。
  • 编译好后就把这两个库加入到工程里面。
  • Eigen也需要加入到include目录中。
  • xcode里面新建ios的静态lib的工程,把所有cpp文件加入到工程中。注意最好只把定位有用到加入,比如优化的代码就不要加入了,免得多了麻烦。
  • 开始编译,当然会有很多错误。不过其实比想象的要少,因为静态库编译的时候并不会检测一个外部symbol是否真的有定义。
  • 只有少数使用了SSE指令的不能编译,这种代码只有想办法去掉了。还好maplab里面在提供SSE的同时都提供了NION指令,这个可以被iphone的编译器编译。
  • glog可以网上下载一个miniglog来代替
  • gflag用静态全局变量简单实现下
  • gtest就直接去掉,把所有test有关的代码都去掉。少数正式代码里面用了gtest的就需要修改下源码了。
  • protobuf需要自己编译,直接编译maplab带的protobuf就行了
  • maplab提供了brisk代码编译不了,里面使用了特殊的指令,所以就改为使用freak描述符。把brisk相关的代码去掉。
  • rviz的相关代码也需要全部去掉
  • 各种编译问题解决后,就需要链接了。这时候会有大量的链接错误。只有检查是不是该加入的cpp都就加入了。
  • 检查opencv的版本和maplab的版本是不是兼容。之前用了一个别人编译的opencv。然后有个兼容问题,本来想改maplab的代码来兼容这个版本,但还是有问题。最后只有自己按照opencv的官网的说明,用最新的opencv代码编译了个framework文件。
  • 如果还有undefined symbol错误,就要好好看下和外部lib的兼容问题了。
  • 最后接入ios自己的传感器数据,这个需要修改maplab的输入相关的代码。需要给maplab专门起一个线程来运行。
  • 还要接入基于iphone编写的可视化界面。
  • 定位算法移植到ios

讨论:

  • 一开始其实只是想试一下,最后居然成功了。看来编译的内容就这么多了。
  • ios运行的速度不比pc上运行差多少,我是iphone xr。甚至有的模块比pc运行还快。

代码: