PTAM移植到IOS(附工程和库文件)

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

移植结果

可用SpaceBar和Reset,没有ARDriver和MapViewer等功能。

完整xcode工程和用到的库文件(包含include、lib,以及gvars3、libcvd的源代码和工程)下载地址:http://download.csdn.net/detail/iceteaset/9639210

运行结果如下图所示:

1进入后的界面

这里写图片描述

2点击SpaceBar后平移

这里写图片描述

3再次点击SpaceBar

这里写图片描述

4移动手机

这里写图片描述


移植概述

PTAM官方支持Linux、Windows、OSX平台,并不包括移动平台,所以移植到IOS需要手动建立工程。好在有Objective-C++混合编译的存在,使得C++源码不需要改写成OC,只需要衔接一下即可。但是OpenGL在IOS下并不适用,需要改写成OpenGL ES。除此之外,官方提供的VideoSource文件不能用,需要自己处理,与窗体相关的代码也不能适用,需要自己建立GUI。


移植过程

PTAM主要用到的库有TooN,Gvars3,CVD。这三个库都是同一个机构编写的。首先要先下载并编译这三个库:
TooN:2.2
Libcvd:20150407
Gvars:3


TOON

这个只有一些头文件,不需要编译,下载后直接放在include目录下即可。


CVD

这个库自带了IOS平台的XCode工程,直接用XCode打开编译。
然而并没有那么顺利,会遇到一些错误。

【报错】提示#include

GVARS3

这个库没有官方支持IOS,所以需要手动编译。新建一个cocoa touch static library。导入源代码。点击编译,会提示一些头文件找不到,主要是readline,xm,x11相关的文件。

先在OSX中安装一个brew,然后在终端中输入:
brew install readline
brew cask install xquartz
brew install lesstif

安装完后分别在
/usr/local/Cellar/readline/6.3.8
/usr/local/Cellar/lesstif/0.95.2
/usr/X11
找到安装好的内容,将头文件和.a文件移到相应的位置

然后配置一下Gvars3工程中的SearchPaths,将头文件和库文件的路径加入,即可编译成功。

这些库编译完之后,取它们的头文件和.a文件备用。接下来我们进行主体工作,编译PTAM。


PTAM

新建一个IOS APP工程,导入PTAM源代码,和刚才编译好的库。
这里我使用到了开源项目iPTAM的处理视频输入和OpenGL ES渲染的代码,导入了以下文件
这里写图片描述
其中MyVideoBuffer用来处理视频输入,teapot.h是一组模拟输入没有用到,EAGLView、ESRenderer是视图和显示相关的,GLVideoFrameAppDelegate用来代替APP自带的delegate,并且存放EAGLView的Outlet。


接着添加以下库:
这里写图片描述


然后开始修改PTAM的源代码
1. 将main.cc、VideoSource.h/.cc删除
2. 将ARDriver和MapViewer相关的文件和代码删除(先搁置这些功能)
3. 将System.cc中关于相机参数的代码删除,直接在ATANCamera.cc中将相机参数固定
4. 将System.cc中的Run()删除,添加如下函数
这里写图片描述
该函数用于让MyVideoBuffer.mm调用
5. 将Tracker.cc中与OpenGL 相关的代码改写成OpenGL ES
6. 将main.m中的delegate改成GLVideoFrameAppDelegate


接下来制作APP的界面:
这里写图片描述
如图所示,将ViewController下的View改成EAGLView类,然后加入一个VideoFramAppDelegate的object,将其中的成员glView设置成View的Outlet。
然后添加两个按钮,在ViewController中添加action,SpaceBar按钮是将Tracker中的mbUserPressedSpacebar设置成true,Reset按钮是调用Tracker中的Reset()函数。


最后就是编译阶段了,遇到了不少问题
1. 修改build settings:
这里写图片描述

这里写图片描述

这里写图片描述

2.【报错】链接时找不到CVD::get_time_of_day_ns()
这里写图片描述
【解决】在cvd工程中将 get_time_of_day_ns.cc添加进工程后重新编译

3.【报错】找不到Foundation/Foundation.h
【解决】开启build settings 中的 Prefix Header
新建一个.pch,加入
#include <Foundation/Foundation.h>

4.【报错】CVD的平台不符
这里写图片描述
【解决】找到项目的Build Settings- > Build Active Architecture Only,将其从NO 设为 YES

5.【报错】使用gvars3/instances.h链接时出错:
这里写图片描述
【解决】在编译Gvars3的时候Build settings -> C++ Standard Library 和C++ Language Dialect改成和现在的工程设置一致
这里写图片描述

文章系统阐述了CANopen与CANopen FD在机器人关节通信中的应用,比较了二者在数据负载、传输速率、PDO/SDO机制等方面的差异,分析了CiA 301与CiA 1301协议的演进关系 内容概要:本文系统梳理了CANopen与CANopen FD在机器人关节通讯中的应用,重点从协议原理、帧结构、对象字典、PDO/SDO机制等方面对比分析两种协议的技术差异与适用场景。CANopen基于CAN 2.0,具有成熟稳定、成本低的优势,适用于传统工业机器人的实时控制;而CANopen FD基于CAN FD,在数据载荷(最大64字节)、传输速率(最高8 Mbit/s)等方面显著提升,更适合多关节协同、批量参数整定固件升级等高性能需求场景。文章还探讨了CiA 301与CiA 1301的兼容性问题,指出当前“CiA 301 over CAN FD”仍为主流,但CiA 1301代表长期演进方向。最后给出了波特率匹配、节点ID规划、PDO映射优化等工程实践建议。; 适合人群:从事工业机器人、协作机器人控制系统开发的工程师,具备一定CAN总线嵌入式开发基础的研发人员; 使用场景及目标:①理解CANopen与CANopen FD在机器人关节控制中的选型依据;②掌握PDO/SDO、对象字典、同步机制等核心技术的设计与优化方法;③为多关节机器人通讯架构设计提供技术参考; 阅读建议:此资源结合实际应用场景深入剖析协议细节,建议读者结合机器人控制项目实践,重点关注PDO映射、同步设计与USDO批量配置等关键环节,并注意区分“CAN FD物理层 + CiA 301”与完整CiA 1301协议栈的差异。 立即下载

相关推荐

MATLAB实现的两级OPF与电动车充电调度,用于配电网络.zip

1.版本:matlab2014a/2019b/2024b 2.赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业毕业设计。

xcode编译时,有第三方库时,编译设置build active architecture only问题

1、http://blog.csdn.net/dengdengxiximeimei/article/details/8845621   关于Build Active Architecture Only属性 2013-04-24 16:54 153人阅读 评论(0) 收藏 举报 这个属性设置为yes,是为了debug的时候编译速度更快,它只编译当前的architectur

ysysbaobei的专栏 3万+

Delphi 13.2控件之WizFile.7z

Delphi 13.2控件之WizFile.7z

iOS编译过程的原理应用

前言 一般可以将编程语言分为两种,编译语言直译式语言。 像C++,Objective C都是编译语言。编译语言在执行的时候,必须先通过编译器生成机器码,机器码可以直接在CPU上执行,所以执行效率较高。 像JavaScript,Python都是直译式语言。直译式语言不需要经过编译的过程,而是在执行的时候通过一个中间的解释器将代码解释为CPU可以执行的代码。所以,较编译语言来说,直译式语言效率

Leo的专栏 3万+

ORB_SLAM 初接触

MacOSX 移植版本: GitHub - meiroo/ORBSLAM2-OSX iOS 移植版本: meiroo/ORBSLAM2-iOS · GitHub ==================================== 以前读过部分PTAM代码。 不过对于ORB_SLAM还没有接触过。最近打算有时间看一看。正好赶上ORB_SLAM2,所以直接从ORB_SL

qqh19910525的博客 2765

由首份SLAM技术问卷,看SLAM的现状趋势

SLAM是AR的核心技术之一,是AR行业发展绕不开的一环,亮风台作为一家专注AR核心技术的人工智能公司,也一直在深入SLAM技术的研发。为了更好地了解开发者、市场对SLAM的认知需求,为亮风台的SLAM技术持续优化提供参考,以便于更好地服务开发者用户,我们对行业相关人员进行了有针对性的调研。感谢各位朋友的热情参与,现在将调研结果分享如下,我们将从SLAM的热度、人们的认知度、应用场景与核心问题...

hiarxiaoliang的博客 928

VINS-Mono论文翻译

由一个相机一个低成本惯性测量单元(IMU)组成的单目视觉惯性系统(VINS),构成了用于估计六自由度状态的最小传感器单元(大小,重量功耗)。本文提出了VINS-Mono:一个通用鲁棒的单目视觉惯性状态估计器。我们的方法从鲁棒的估计器初始化程序开始。采用一种基于紧耦合非线性优化的方法,通过融合预积分后的IMU测量值特征观测值,获得高精度的视觉惯性里程计。结合我们的紧耦合方法,回环检测模块能够以最小的计算代价实现重定位。此外,我们还进行了四自由度位姿图优化,以增强全局一致性。

JunJun 1215

Python 寄存器位域解析与 JSON 配置工具(芯片开发+寄存器/位域+解析源码+寄存器转储分析)

根据 JSON 指定位宽字段起止位,解析寄存器数值并显示枚举含义。包含重叠字段、重复名称、位范围输入数值检查。 适用于嵌入式软件开发人员、驱动开发入门者及相关技术学习者。资源包含源码或模板、使用说明及验证范围说明。Python 3.10+,仅使用标准库;寄存器宽度 1 至 64 位。 功能边界见 README.md,实际验证情况见 TESTING.md。

UAC白名单设置-软件使用

代码下载链接: https://pan.quark.cn/s/a4b39357ea24 用户账户控制(UAC)白名单的配置 Windows7环境中 UAC(User Account Control,用户帐户控制)是由微软在Windows Vista版本中推出的一项旨在增强系统安全性的创新技术,该技术强制要求用户在执行可能干扰计算机正常运作的操作或进行更改会波及其他用户设置的变动前,必须提供相应的权限或管理员密码进行验证。通过对这些操作启动前进行授权确认,UAC能够有效阻止恶意软件及间谍软件在未获授权的状态下于计算机内进行安装或实施修改。 自从Vista版本问世以来,微软便开始推行这一全新的安全机制,可视为对系统安全防护的显著提升。尽管UAC确实能够在一定程度上对某些非法程序起到防御作用,但与此同时,这一功能也给众多用户带来了诸多不便。 因此,许多用户开始探寻是否存在类似于白名单的功能,以便将那些值得信赖的程序直接赋予运行权限。事实上,这类功能确实存在,不过微软并未将其作为标准配置提供。 网络上关于此问题的绝大多数建议都是建议禁用UAC,这种说法显然缺乏针对性,因为若用户希望禁用此功能,本就不会提出相关疑问。 通过运用微软官方发布的Microsoft Application Compatibility Toolkit 5.6版本,可以将信任的程序纳入系统白名单范畴。 获取Application Compatibility Toolkit 安装程序成功后会出现三个可执行文件 以管理员身份启动Compatibility Administrator 在Custom DataBases部分创建新的数据库,并添加一个Application Fix(在下方空白处点击右键,选择...

DELL服务器操作系统安装

下载代码方式:https://pan.quark.cn/s/a4b39357ea24 DELL服务器的操作系统部署流程包含一系列细致的环节,其适用范围涵盖多种操作系统类型,例如Windows Server与Red Hat Linux等。在启动部署之前,必须确认服务器的光驱设备为DVD驱动器,并且需准备对应的系统安装媒介。下面将详细列出完整的部署步骤: 1. **启动准备**:将随服务器提供的Systems Management Tools and Documentation version 6.0光盘置入服务器光驱,随后设定服务器以光驱作为启动设备。此环节旨在确保服务器在启动阶段能够读取安装光盘内容。 2. **语言设定**:服务器启动后,选定简体中文作为部署语言,并确认接受许可协议条款。 3. **时区选择**:在部署期间,需设定时区为北京、香港、重庆或乌鲁木齐,依据实际地理位置进行适配选择。 4. **系统类型选择**:随后,需选定计划部署的操作系统,支持的版本包括Server 2003 SP2、Server 2003 SP2 64位版本、Windows 2003 SBS SP2、Server 2008、Windows 2008 SBS/EBS x64版本等,以及多种Red HatSUSE Linux版本。 5. **RAID设定**:若服务器出厂时已预设RAID配置,则可选择跳过此步骤。若需重新设定RAID,操作时需格外小心,因为这一过程可能引发硬盘数据遗失。 6. **引导分区规划**:设定引导分区的大小,通常C盘建议预留至少20GB的空间,具体容量需根据系统需求进行调整。 7. **网络设定**:网络设定可在系统部署完成后执行,部署期间建议暂时拔除...

老人自动接视频appp

老人自动接视频app的

HTML5 audio player

代码下载地址: https://pan.quark.cn/s/a4b39357ea24 这是一款模仿酷狗的基于HTML5技术的网络音乐播放器,能够兼容全部mp3格式的音乐文件,用户既可以在联网状态下,也能够在无网络环境下欣赏自己偏爱的歌手作品。对于具备开发兴趣的人员,可以获取其源代码,将其解压并载入MM开发平台实施调整与改进,支持制作成apk(适用于Android系统)ipa(适用于iOS系统)的应用程序包,随后安装至移动设备使用;或者将该应用项目文件配置到MM应用引擎中,通过网页浏览器来预览实际运行状况。MM应用引擎的展示页面:http://html5player.mmapp.cn/client/www/app.html 有关更多应用范例的代码资料,可以访问MM开发环境官方网站进行获取:http://dev.10086.cn/ude/index.do

如何高效推动高校科技成果转化落地,解决产学研对接难的问题?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

厦门侠客行 厦门旅游景点 KML矢量数据

本资源为厦门侠客行主题旅游地图KML矢量数据。标注了厦门市主要旅游景点、历史文化遗迹与城市地标位置,涵盖鼓浪屿、南普陀寺、厦门大学、曾厝垵、环岛路、胡里山炮台等厦门经典景点,以及环岛骑行路线、步行游览路径等旅行轨迹数据,可在Google Earth中沉浸式规划厦门旅游路线,适用于厦门旅游攻略制定、城市历史文化研究、自由行路线规划等场景。

如何突破高校科研经费不足与产学研合作的瓶颈?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

高校科技成果转化难,如何高效对接企业需求并提升转化率?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

上一篇: PTAM源码在Windows下的编译(附工程和库文件)
下一篇: Unity3D在IOS、Android上使用C++并回调的究极解决方案
IceTeaSet
博客等级 码龄12年 42粉丝 39原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值