提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
基于安卓手机的ORB-SLAM3的调试运行
安卓手机集成了惯性与视觉信息,作为一个轻量化的平台能够作为ORB-SLAM3的载体进行运行,作为一个slam的初学者,本文仅作为一个学习过程中遇到的各种问题以及相应的处理经验记录,如果有更好的方法也欢迎进行交流。
本人参考博文https://blog.csdn.net/h_372101/article/details/108235178中提供的第二个软件APP实现电脑与手机之间的连接。首先输入roscore启动ros,将手机与电脑处于同一个网络之下,利用命令ifconfig获取当前的IP地址,并将手机软件中的localhost删除,输入上一步获取的IP地址即可完成电脑与手机之间的连接。下图中标红的位置即位对应的IP地址。

在完成手机与PC之间的连接之后,打开终端输入rostopic list查看当前的topic,其具体结果如下图

可以看出此时输出的话题为compressed即压缩格式,进行slam时需要将其还原为raw格式进行,此时输入以下代码进行转换(每个人的topic可能不同,需要根据情况进行调整)
rosrun image_transport republish compressed in:=/camera/image raw out:=/camera/image_raw
此时再使用rostopic list即可观察到多了一个/camera/image_raw.
根据ORB-SLAM3的使用方法,当使用相机的时候需要输入对应的yaml文件,因此需要对其进行标定,方法很多比如matlab拍摄照片直接用matlab进行标定或者使用kalibr进行标定,此处本人参考https://blog.csdn.net/weixin_44401286/article/details/109641268中的内容对于手机相机进行标定,注意修改对应代码中对应的topic信息即可完成相机的标定。并利用标定的信息编写对应的yaml文件,我用的是mate20手机故命名为mate20.yaml。此处仅对相机进行了标定,若需运行惯性加视觉还需要对于手机惯性传感器进行标定。
根据手机集成的传感器,其可以进行Mono以及Mono-inertial的运行。以上两项的运行分别需要修改/Examples/ROS/ORB_SLAM3/src中的ros_mono.cc与ros_mono_inertial.cc中对于topic的订阅信息,如下图所示,将订阅的topic修改为/camera/image_raw

ros_mono.cc

ros_mono_inertial.cc
在完成以上修改后,记得在ORB_SLAM3-master文件夹下打开终端,输入./build_ros.sh进行ros的重新build。
完成以上的所有修改后,若运行单目则在orb文件夹下输入
rosrun ORB_SLAM3 Mono Vocabulary/ORBvoc.txt Examples/Monocular/mate20.yaml
若运行单目+惯性则输入
rosrun ORB_SLAM3 Mono_inertial Vocabulary/ORBvoc.txt Examples/Monocular/mate20.yaml
本来到这个地方都是比较顺利的,但是此时不幸的踏入了一个深深的坑,运行程序后屏幕上一直显示waiting for image没有图像显示,我本以为是图像的订阅问题,一方面检查orb-slam3中的订阅的topic是否有错,另一方面则是利用rviz查看对应topic的输出情况,但是奇怪的是在rviz中数据是能够正常的输出的,但是orb-slam3中仍然是黑屏waiting for images,接下来便是漫长的寻找问题所在的过程。
在经过漫长的原因寻找后,终于发现了问题所在

对于image_raw数据的带宽进行查询发现有60~90MB之间,怀疑数据带宽过大导致数据传输造成了一定的影响,毕竟输出的raw格式图片对于数据传输造成了极大的压力。
为了解决该问题,此处将相机输出的图片大小进行调节,查看低带宽的情况下数据传输是否堵塞。
由于本人属于小白,该问题也是困扰了一段时间才解决,最后参考博文http://gizmosmith.com/2018/09/24/configuring-video-cropping-and-resizing-with-ross-image_proc/中老哥的写法,运用image_proc/resize对于图片的分辨率进行调整以降低带宽的压力,以下为参考博文所写的launch文件
<!-- 对于图像大小进行缩放 -->
<launch>
<!-- Video resizing -->
<node pkg="nodelet" type="nodelet" args="standalone image_proc/resize" name="resize_img">
<!-- remap input topics -->
<remap from="image" to="camera/image_raw"/>
<remap from="camera_info" to="camera/camera_info"/>
<!-- remap output topics -->
<remap from="resize_image/image" to="camera_resize/image_raw"/>
<remap from="resize_image/camera_info" to="camera_resize/camera_info"/>
<!-- remap output topics -->
</node>
<node name="$(anon dynparam)" pkg="dynamic_reconfigure" type="dynparam" args="set_from_parameters resize_img">
<param name="use_scale" type="int" value="0" />
<param name="width" type="int" value="760" />
<param name="height" type="int" value="360" />
</node>
</launch>
原始的输出图像分辨率为1520760,我将其缩小的原始图像分辨率的1/2即760390,其对应的topic为resize_image/image,注意后文的topic修改。完成程序的编写后启动相应的节点,具体的输出情况利用rqt进行观察。

image_raw输出的原始图像

通过压缩过后的图像输出,可以看出此时输出图像大小受到了压缩。
值得注意的是到这步并不能够直接利用经过压缩后的图像进行orb-slam3的运行,由于resize之后相机的参数发生了变化,因此参考前文的做法对于相机进行再次标定。对ros_mono.cc与ros_mono_inertial.cc中对于topic的订阅信息进行修改并重新进行build。
在完成了以上所有的步骤后即可对于orb-slam3进行运行

大功告成(激动)。
总的来说利用手机运行orb-slam3是一个较为繁琐的过程,不过需要在测试过程中保持一定的耐心。
总的来说利用手机运行orb-slam3是一个较为繁琐的过程,网上参考别人的教程的时候很可能一个地方没写清楚就容易踏进一个大坑。不过需要在测试过程中保持一定的耐心最后总是能解决对应的问题的。
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby中使用两个参数异步运行exe吗?我已经尝试过ruby命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何rubygems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除
我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
GivenIamadumbprogrammerandIamusingrspecandIamusingsporkandIwanttodebug...mmm...let'ssaaay,aspecforPhone.那么,我应该把“require'ruby-debug'”行放在哪里,以便在phone_spec.rb的特定点停止处理?(我所要求的只是一个大而粗的箭头,即使是一个有挑战性的程序员也能看到:-3)我已经尝试了很多位置,除非我没有正确测试它们,否则会发生一些奇怪的事情:在spec_helper.rb中的以下位置:require'rubygems'require'spork'
是否有可能:before_filter:authenticate_user!||:authenticate_admin! 最佳答案 before_filter:do_authenticationdefdo_authenticationauthenticate_user!||authenticate_admin!end 关于ruby-on-rails-before_filter运行多个方法,我们在StackOverflow上找到一个类似的问题: https://
导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.