双目视觉传感器 Indemind
传感器简介
INDEMIND M1 是专为开发者提供的一款硬件,采用“双目摄像头+IMU”多传感器融合架构与
微秒级时间同步机制,为视觉 SLAM 研究提供精准稳定数据源,以满足 SLAM 研究、导航及
避障开发、视觉动作捕捉开发、立体视觉开发等使用需求。
它的几个重要特点列举如下:
两个全局快门相机,灰度图像,输出到 USB 口。
广角相机,水平视野 120 度,垂直视野 75 度。
图像在 1280x800 分辨率下最高达到 100Hz,640x400 分辨率下最高 200Hz,属于高速相机。
IMU 型号为 ICM-20602,性能和 MPU 6050 差不多,最高可以达到 1000Hz,并且与图像硬
同步。
基线为 12cm,和 ZED 双目相机一致,估计深度范围大约在 0.5-20m,可用于室内场景。
SDK 自带深度估计功能,输出深度图像为 640x400,25Hz。
SDK 自带 SLAM 功能,可以读到相机计算的 Pose,25Hz。
驱动安装
安装教程:https://imsee-sdk-docs.readthedocs.io/zh/latest/src/sdk/install_ubuntu.html
# 获取 SDK
sudo apt-get install git
git clone https://github.com/indemind/IMSEE-SDK.git
cd IMSEE-SDK
make init
#安装 opencv
[compiler] sudo apt-get install build-essential
[required] sudo apt-get install cmake git libgtk2.0-dev pkg-config
libavcodec-dev libavformat-dev libswscale-dev
[optional] sudo apt-get install python-dev python-numpy libtbb2
libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev
libdc1394-22-dev
git clone https://github.com/opencv/opencv.git
cd opencv/
git checkout tags/3.4.3
#注意,此处最好尽量指定 3.4.3 版本,否则后面一些可执行文件会缺少依赖库
mkdir build
cd build/
$ cmake \
-DCMAKE_BUILD_TYPE=RELEASE \
-DCMAKE_INSTALL_PREFIX=/usr/local \\
-DWITH_CUDA=OFF \\
-DBUILD_DOCS=OFF \
-DBUILD_EXAMPLES=OFF \
-DBUILD_TESTS=OFF \
-DBUILD_PERF_TESTS=OFF \
..
$ make -j4
$ sudo make install
#MNN 安装,先安装依赖 protobuf
[required] sudo apt-get install autoconf automake libtool
$ git clone https://github.com/google/protobuf.git
$ cd protobuf
$ git submodule update --init --recursive
105
cvlife.net$ mkdir build
cd build
$ make
$ make check
$ sudo make install
$ sudo ldconfig # refresh shared library cache.
$ protoc --version # 若安装成功,将显示 protoc 版本
#MNN
$ git clone https://github.com/alibaba/MNN.git
$ cd MNN
$ ./schema/generate.sh
$ mkdir build $$ cd build
$ cmake ..
$ make -j4
$ sudo make install
#编译样例并运行
make demo
./demo/output/bin/get_image
#ros 驱动安装与测试
$ cd <IMSEE-SDK> # <IfMSEE-SDK> 为 SDK 具体路径
$ make ros
$ sudo su #开启权限模式
$ source ros/devel/setup.bash
$ roslaunch imsee_ros_wrapper start.launch
$ sudo su #开启权限模式
$ source ros/devel/setup.bash
$ roslaunch imsee_ros_wrapper display.launch
运行 SLAM:
VINS-Mono:https://blog.csdn.net/qq_43134830/article/details/115006473,内含配置文件,
包含相机内参/IMU 内参/相机与 IMU 之间的外参等信息
ORB-SLAM:https://blog.csdn.net/weixin_45057582/article/details/125890604
RGB-D 视觉传感器 Realsense D455
深度测量原理:本质是双目立体匹配
1. 红外发射器发射不可见的红外图案,可以在弱纹理场景下提高深度测量
的精度
2. 左右目图像传感器接收可见光和不可见光组成的图像
3. 左右目图像逐像素匹配,三角化得到深度值
Datasheet
Intel RealSense 系列相机从 Firmware version 5.10.6.0 开始加入了自标定功能,大大提高了
相机标定的自动化程度
https://dev.intelrealsense.com/docs/intel-realsensetm-d400-series-calibration-tools-user
guide 或者 参考 https://blog.csdn.net/a2824256/article/details/106729403
http://blog.chinaunix.net/uid-27875-id-5846318.html
安装
推荐源码安装,方便修改
注意:
• 官方要求 USB 3.0 接口,USB 2.0 可能会出问题。
• SDK 不太支持虚拟机。如果必须要用虚拟机,选择 VMware
Workstation,把虚拟机 USB 接口设置成 3.1(虚拟机设置 -> 硬件 ->
USB 控制器 -> 连接 -> USB 兼容性 -> USB 3 ),不然连接不上相
机。
• 安装过程中(比如指令 wget, git, add-apt-repository)可能遇到路
由设置、防火墙的影响导致连接超时等类型的安装失败。建议科学上
网。
• 推荐在 Ubuntu 18.04 系统下安装。年少不知 18 好,错把 20 当做宝。
• 先不要连接相机到电脑。先安装 SDK,安装好后再插入相机。
1、预备工作
更新 Ubuntu 系统内核
# 更新 Ubuntu 系统内核
sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist
upgrade
安装依赖库,解释下依赖库的意思
libusb 是一个 USB 设备访问接口库;
gtk 是一个图形工具包;
glfw 是一个 OpenGL 应用框架;
# 安装 USB 相关依赖库
sudo apt-get install git libssl-dev libusb-1.0-0-dev libudev-dev pkg
config libgtk-3-dev
# 安装 OpenGL 用到的相关依赖项
# Ubuntu 16 系统下运行
# sudo apt-get install libglfw3-dev
# Ubuntu 18/20 系统下运行
sudo apt-get install libglfw3-dev libgl1-mesa-dev libglu1-mesa-dev
检查 CMAKE 版本。有些 librealsense 里 CMAKE 标志位(比如 CUDA)要求 3.8+以上版本,
Ubuntu apt 方 式 安 装 的 cmake 版 本 可 能 比 较 老 , 这 种 情 况 下 去 cmake 官 网
(https://cmake.org/download/)下载最新的版本安装。
# 查看 cmake 版本号
cmake --version
2、下载官方 SDK librealsense
可以使用如下 git 命令下载
git clone https://github.com/IntelRealSense/librealsense.git
如 果 网 速 慢 , 也 可 以 直 接 在
GitHub
上 下 载 压 缩 包
https://github.com/IntelRealSense/librealsense/archive/master.zip
3、设置 Intel Realsense 设备的许可。
# 在 librealsense 文件夹下运行
109
cvlife.net./scripts/setup_udev_rules.sh
# 如果要取消许可,运行
# ./scripts/setup_udev_rules.sh --uninstall
创建应用内核模块的补丁。执行该脚本将下载、修补和构建受 realsense 影响的内核模块(驱
动程序)。然后,它将尝试插入修补过的模块。如果失败将恢复原始 uvc 模块。
./scripts/patch-realsense-ubuntu-lts.sh
4、安装 SDK
mkdir build && cd build
# DCMAKE_BUILD_TYPE=Release 加上的话编译会快,不加默认 Debug 编译(生
成单元测试文件)
# -DBUILD_GRAPHICAL_EXAMPLES=false 加上的话不编译 OpenGL 和 X11,只有
文本示例
cmake ../ -DBUILD_EXAMPLES=true # 编译 demo 和教程
make -j4 # 4 核同时编译,可以加快编译速度。如果低端平台可能会挂
sudo make install
安装完后,共享库目录:/usr/local/lib 头文件目录 /usr/local/include
5、测试安装成功
连接相机至电脑 USB3.0 接口,注意:连接相机的数据线必须是 USB3.0 的数据线(USB 口内
为蓝色)
# 打开终端输入
realsense-viewer
示例代码
1、直接显示捕获的彩色图,深度图、IMU 信息
# 示例代码:直接显示捕获的彩色图,深度图、IMU 信息
# 在 librealsense/build 路径下执行
examples/capture/rs-capture
暂时无法在飞书文档外展示此内容
2、显示点云
# 示例代码:点云
# 在 librealsense/build 路径下执行
examples/pointcloud/rs-pointcloud
暂时无法在飞书文档外展示此内容
3、彩色图和深度图对齐
运行方法
# 示例代码:对齐
# 在 librealsense/build 路径下执行
examples/align/rs-align
代码框架
#include <librealsense2/rs.hpp>
#include "example-imgui.hpp"
// 定义投影方向
enum class direction
{to_depth,to_color
};
// Forward definition of UI rendering, implemented below
void render_slider(rect location, float* alpha, direction* dir);
int main(int argc, char * argv[]) try
112 cvlife.net
{std::string serial;if (!device_with_streams({ RS2_STREAM_COLOR,RS2_STREAM_DEPTH },
serial))return EXIT_SUCCESS;// Create and initialize GUI related objectswindow app(1280, 720, "RealSense Align Example"); // Simple
window handlingImGui_ImplGlfw_Init(app, false); // ImGui library
intializitionrs2::colorizer c; // Helper to colorize depth
imagestexture depth_image, color_image; // Helpers for renderig
images// Create a pipeline to easily configure and start the camerars2::pipeline pipe;rs2::config cfg;if (!serial.empty())cfg.enable_device(serial);cfg.enable_stream(RS2_STREAM_DEPTH);cfg.enable_stream(RS2_STREAM_COLOR);pipe.start(cfg);// 定义两种投影方向rs2::align align_to_depth(RS2_STREAM_DEPTH);rs2::align align_to_color(RS2_STREAM_COLOR);// 透明度系数float alpha = 0.5f; // Transparancy
coefficient// 默认从彩色图投影到深度图direction dir = direction::to_depth; // Alignment directionwhile (app) // Application still alive?{// Using the align object, we block the application until a
frameset is availablers2::frameset frameset = pipe.wait_for_frames();if (dir == direction::to_depth){// Align all frames to depth viewport
113 cvlife.netframeset = align_to_depth.process(frameset);}else{// Align all frames to color viewportframeset = align_to_color.process(frameset);}// With the aligned frameset we proceed as usualauto depth = frameset.get_depth_frame();auto color = frameset.get_color_frame();auto colorized_depth = c.colorize(depth);glEnable(GL_BLEND);// Use the Alpha channel for blendingglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);if (dir == direction::to_depth){// When aligning to depth, first render depth image// and then overlay color on top with transparancydepth_image.render(colorized_depth, { 0, 0, app.width(),
app.height() });color_image.render(color, { 0, 0, app.width(),
app.height() }, alpha);}else{// When aligning to color, first render color image// and then overlay depth image on topcolor_image.render(color, { 0, 0, app.width(),
app.height() });depth_image.render(colorized_depth, { 0, 0, app.width(),
app.height() }, 1 - alpha);}glColor4f(1.f, 1.f, 1.f, 1.f);glDisable(GL_BLEND);// Render the UI:ImGui_ImplGlfw_NewFrame(1);render_slider({ 15.f, app.height() - 60, app.width() - 30,
app.height() }, &alpha, &dir);ImGui::Render();
114 cvlife.net}return EXIT_SUCCESS;
参考:
RealSense D455 的标定并运行 VINS-FUSION_Z_Jin16 的博客-CSDN 博客_d455 标定
Intel RealSense D435i:简介、安装与使用(ROS、Python)