天天看点

立体视觉惯性里程表(Stereo Visual Inertial Odometry)

立体视觉惯性里程表(Stereo Visual Inertial Odometry)

Isaac SDK包括“立体视觉Odometry”应用程序:使用Elbrus视觉Odometry库通过不断分析来自立体摄像机和IMU读数(如果有)的视频流中的信息来确定机器人的3D姿态的小代码。

Elbrus视觉Odometry库提供实时跟踪性能:640x480视频分辨率至少30 fps。对于KITTI基准,该算法在定位中实现了〜1%的漂移,并且运动的方向误差为0.003度/米。

Elbrus允许在各种环境和不同用例中进行可靠的跟踪:室内,室外,空中,HMD,汽车和机器人技术。

立体视觉惯性里程表(Stereo Visual Inertial Odometry)

建筑

Elbrus实现了基于关键帧的SLAM体系结构,该框架是一个两层系统:所有输入帧的一小部分用作关键帧并由其他算法处理,而其他帧则通过已选择观测值的2D跟踪快速解决。端到端跟踪管道包含两个主要组件:2D和3D。

立体视觉惯性测距法(Stereo VIO)使用从立体摄影机装备获得的成像数据,检索左摄影机相对于其起始位置的3D姿态。立体摄影机需要两个具有已知内部校准的摄影机,这些摄影机必须彼此牢固地固定并牢固地安装在机器人机架上。左右相机之间的转换是已知的,并且时间在图像获取时同步。

当以30或60 fps记录立体声图像,并且以200-300 Hz(如果可用)记录IMU角速度和线性加速度测量值时,Elbrus保证最佳的跟踪精度。如KITTI基准所测,Stereo VIO的不准确度小于平移漂移的1%和约0.03度/米的角运动误差,它以10 fps的速度记录,每帧的分辨率为1382x512。

如果图像输入严重退化(灯熄灭,行驶时颠簸上剧烈的运动模糊以及其他可能的情况),则其他运动估计算法将确保姿势跟踪的可接受质量:

IMU读数积分器可提供约〜<1秒的可接受的姿态跟踪质量。

万一IMU发生故障,恒速积分器将继续提供发生故障之前Stereo VIO报告的最后线性和角速度。这样可以在约0.5秒内提供可接受的姿势跟踪质量。

源代码

Isaac SDK以小程序包装的动态库的形式包含Elbrus跟踪器代码。包裹Elbrus立体声跟踪器的Isaac小码会接收一对输入图像,相机固有特性和IMU测量值(如果有)。如果视觉跟踪成功,则小代码会以Pose3d 消息的形式发布左摄像机相对于世界帧的姿势,其时间戳等于左帧的时间戳。

如果丢失了视觉跟踪,则会中断发布左摄像机姿势,直到恢复跟踪为止。恢复视觉跟踪后,将恢复发布左摄像机姿势,但是不能保证估计的摄像机姿势将与世界框架中左摄像机的实际姿势相对应。使用视觉测距码小程序的应用程序必须检测相机姿态更新中的中断,并启动外部重新定位算法。

嵌入式失真

由于所有相机都装有镜头,因此总是会出现镜头变形,从而使镜框中的物体倾斜。在ImageWarp小码中实现了通用镜头不失真算法。但是,对于视觉测距法跟踪,Elbrus库提供了内置的不失真算法,该算法提供了一种更有效的方式来处理原始(失真)相机图像。Elbrus可以跟踪变形图像上的2D特征,并将不失真限制为浮点坐标中的选定特征。这比跟踪之前执行的所有图像像素的不失真更快,更准确。

注意

如果您使用的其他小码需要不失真的图像,则需要使用ImageWarp小码。

要使用Elbrus不失真, 请在StereoVisualOdometry GEM中设置left.distortion和right.distortion(请参阅ColorCameraProto)输入。支持以下主要DistortionModel选项:具有三个径向和两个切向畸变系数的布朗畸变模型:(r0 r1 r2 t0 t1)具有四个径向失真系数的鱼眼(广角)失真:(r0,r1,r2,r3)有关详细信息,请参见DistortionProto文档。

注意

“ stereo_vo”示例应用程序使用ZED相机,该相机在StereoLabs SDK中执行软件不失真。

嵌入式降噪

如果您的应用程序或环境由于光线不足而产生嘈杂的图像,则Elbrus可能选择了太多不正确的特征点。在这种情况下,请启用denoise_input_images StereoVisualOdometry GEM中的选项,以提高跟踪速度和准确性进行降噪。

惯性测量单元(IMU)集成

立体声VIO使用从固定安装在摄像机装置或机器人基座上的IMU获得的测量结果。如果由于图像输入的严重降级而使视觉Odometry失败,则位置跟踪将在IMU输入上进行长达一秒钟的时间。只要视频输入中断持续不到一秒钟,IMU集成就可以确保无缝地更新姿势。

为了使IMU集成与Stereo VIO一起使用,机器人必须在应用程序开始时处于水平位置,否则Stereo VIO维护的世界坐标系(WCS)中的起始姿态和重力加速度矢量将不正确。

运行示例应用程序

Elbrus示例应用程序使用标准ZED相机或配备IMU的ZED-M相机。首先,将ZED摄像机连接到主机系统或Jetson平台。然后,使用以下过程来运行示例应用程序:

立体视觉惯性里程表(Stereo Visual Inertial Odometry)

…/…/…/_images/stereo_vo_image1.jpg

重要

如果您使用的是常规的ZED相机没有IMU,你需要编辑 apps/samples/stereo_vo/stereo_vo.app.json运行之前的应用程序:改变小码的配置参数zed/zed_camera/enable_imu和 stereo_vo/stereo_vo/process_imu_readings从真到假的。

在主机系统上运行示例应用程序

使用以下命令构建并运行示例应用程序:

[email protected]:~/isaac$ bazel run apps/samples/stereo_vo
           

在Jetson上运行应用程序

1.部署

//apps/samples/stereo_vo:stereo_vo-pkg

到机器人中的说明 部署和运行上特森。

2.登录到Jetson系统并使用以下命令运行该应用程序:

[email protected]:~/cd deploy/bob/stereo_vo-pkg [email protected]:~/deploy/bob/stereo_vo-pkg ./apps/samples/stereo_vo/stereo_vo
           
`bob`您的主机系统上的用户名在哪里。
           

在Websight中查看应用程序的输出

在应用程序运行时,通过导航到来在浏览器中打开Isaac Sight http://localhost:3000。如果您在Jetson平台上运行该应用程序,请使用Jetson系统的IP地址而不是localhost。

作者:YottaYuan

链接:https://www.jianshu.com/p/2787b1925d4c

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

继续阅读