RealSenseD435i 是一款立体视觉深度相机,如下图所示,其集成了两个红外传感器(IR Stereo Camera)、一个红外激光发射器(IR Projector)和一个彩色相机(Color Camera)。立体深度相机系统主要包括两部分:视觉处理器D4和深度模块。主机处理器连接 USB 2.0 / USB 3.1 Gen 1、视觉处理器 D4 位于主处理器主板上,RGB颜色传感器数据通过主处理器主板和 D4 板上的彩色图像信号处理器(ISP)发送到视觉处理器D4。IntelRealSense D435i提供了完整的深度相机模块,集成了视觉处理器、立体深度模块、RGB 传感器以及彩色图像信号处理模块。深度模块采用立体视觉的左右成像器、可选的红外激光发射器和 RGB 色彩传感器。

创建ros工作空间,用于code_utils以及后面的imu_utils,工作空间名和路径可以自己更改,code_utils和imu_utils都是imu标定需要用到的,用于标定imu噪声密度以及随机游走系数
mkdir -p ~/imu_catkin_ws/src
cd ~/imu_catkin_ws/src
catkin_init_workspace
source ~/imu_catkin_ws/devel/setup.bash
git clone https://github.com/gaowenliang/code_utils.git
cd ..
catkin_make
如果有报错sumpixel_test.cpp:2:10: fatal error: backward.hpp: 没有那个文件或目录,将sumpixel_test.cpp中# include "backward.hpp"改为:#include "code_utils/backward.hpp"。
cd ~/imu_catkin_ws/src/
git clone https://github.com/gaowenliang/imu_utils.git
cd ..
catkin_make
2.3.1 按照官方教程安装kalibr(https://github.com/ethz-asl/kalibr/wiki/installation)
sudo apt-get install python-setuptools python-rosinstall ipython libeigen3-dev libboost-all-dev doxygen libopencv-dev
sudo apt-get install ros-melodic-vision-opencv ros-melodic-image-transport-plugins ros-melodic-cmake-module
sudo apt-get install software-properties-common software-properties-common libpoco-dev python-matplotlib python-scipy python-git python-pip ipython
sudo apt-get install libtbb-dev libblas-dev liblapack-dev python-catkin-tools libv4l-dev
sudo apt-get install python-igraph
2.3.2 创建工作空间
mkdir -p ~/kalibr_workspace/src
cd ~/kalibr_workspace
source /opt/ros/melodic/setup.bash
catkin init
catkin config --extend /opt/ros/melodic
catkin config --merge-devel # Necessary for catkin_tools >= 0.4.
catkin config --cmake-args -DCMAKE_BUILD_TYPE=Release
2.3.3 下载源码
cd ~/kalibr_workspace/src
git clone https://github.com/ethz-asl/Kalibr.git
2.3.4 编译源码
cd ~/kalibr_workspace
catkin build -DCMAKE_BUILD_TYPE=Release -j4
source ~/kalibr_workspace/devel/setup.bash
找到realsense-ros包,进入/catkin_ws/src/realsense2_camera/launch(路径仅供参考),复制其中的rs_camera.launch,并重命名为rs_imu_calibration.launch(命名随意),并对里面的内容做如下更改
<arg name="unite_imu_method" default=""/>
// ########### 改为#############
<arg name="unite_imu_method" default="linear_interpolation"/>
<arg name="enable_gyro" default="false"/> “false” 改为”true”
<arg name="enable_accel" default="false"/> “false” 改为”true”
这样做的目的是将accel和gyro的数据合并得到imu话题,如果不这样做发布的topic中只有加速度计和陀螺仪分开的topic,没有合并的camera/imu 话题。
打开/imu_catkin_ws/src/imu_utils/launch(路径仅供参考),打开终端运行以下命令。
gedit d435i_imu_calibration.launch (文件名称可以自定义,在文件中写入以下内容)
<launch>
<node pkg="imu_utils" type="imu_an" name="imu_an" output="screen">
<!--TOPIC名称和上面一致-->
<param name="imu_topic" type="string" value= "/camera/imu"/>
<!--imu_name 无所谓-->
<param name="imu_name" type="string" value= "d435i"/>
<!--标定结果存放路径-->
<param name="data_save_path" type="string" value= "$(find imu_utils)/data/"/>
<!--数据录制时间-min 120分钟 可以自行修改 一般要大于60-->
<param name="max_time_min" type="int" value= "120"/>
<!--采样频率,即是IMU频率,采样频率可以使用rostopic hz /camera/imu查看,设置为400,为后面的rosbag play播放频率-->
<param name="max_cluster" type="int" value= "400"/>
</node>
</launch>

插上相机,realsense静止放置,放置时间要稍大于d435i_imu_calibration.launch中的录制时间,即大于120分钟。
roscore
roslaunch realsense2_camera rs_imu_calibration.launch
cd ~/imu_catkin_ws //等下录制到这个文件夹上
rosbag record -O imu_calibration /camera/imu // 生成的包名称imu_calibration.bag
等待两小时录制完之后就按下ctrl+c,结束录制,注意在录制的前1个小时imu_calibration.bag文件很可能大小一直都是4.1KB,1个小时后会突然增大,所以要耐心等待,中途不要放弃,我在这里卡了很久。
你会发现当前目录有一个名为 imu_calibration.bag的文件,其中imu_calibration是bag包的名字,可以更改,/camera/imu是发布的IMU topic,可以通过以下命令查看。
rostopic list -v

首先激活imu_util工作空间的setup.bash,前面路径仅供参考。
source ~/imu_catkin_ws/devel/setup.bash
roslaunch imu_utils d435i_imu_calibration.launch
打开新的终端,cd 存放imu_calibration.bag的路径。
source ~/imu_catkin_ws/devel/setup.sh
cd ~/imu_catkin_ws //数据包在这个文件夹下
rosbag play -r 400 imu_calibration.bag 其中 -r 400是指400速播放bag数据
标定结束后在imu_catkin_ws/src/imu_utils/data中生成许多文件,其中d435i_imu_param.yaml就是我们想要的结果,如下图所示。

自己的标定结果如下
%YAML:1.0
---
type: IMU
name: d435i
Gyr:
unit: " rad/s"
avg-axis:
gyr_n: 2.4374348304191541e-02
gyr_w: 4.1351964638005760e-04
x-axis:
gyr_n: 3.4349742772545717e-02
gyr_w: 6.6400202524599536e-05
y-axis:
gyr_n: 1.8369698876417567e-02
gyr_w: 5.7877885322928221e-04
z-axis:
gyr_n: 2.0403603263611333e-02
gyr_w: 5.9537988338629125e-04
Acc:
unit: " m/s^2"
avg-axis:
acc_n: 4.1009844816965006e-02
acc_w: 4.8708380066138992e-04
x-axis:
acc_n: 3.2801162643496862e-02
acc_w: 2.8388101885379135e-04
y-axis:
acc_n: 3.7724057308126648e-02
acc_w: 4.6927333080848470e-04
z-axis:
acc_n: 5.2504314499271502e-02
acc_w: 7.0809705232189376e-04
realsense自带的参数通过以下命令获得:
roslaunch realsense2_camera rs_camera.launch
rostopic echo /camera/accel/imu_info
rostopic echo /camera/gyro/imu_info
到https://github.com/ethz-asl/kalibr/wiki/downloads选择其中一个
这种方式更灵活,而且可以将生成的标定板直接在电脑里面打开,作为目标进行标定。
cd ~/kalibr_workspace //你的工程路径
source ./devel/setup.sh
kalibr_create_target_pdf --type apriltag --nx 6 --ny 6 --tsize 0.022 --tspace 0.3 // 生成PDF文件
不论是打印PDF标定还是直接在电脑里面打开PDF标定,都要实际测量一下二维码方格和小方格的的长度,再填到yaml文件里面。
--type apriltag 标定板类型
--nx [NUM_COLS] 列个数
--ny [NUM_ROWS] 行个数
--tsize [TAG_WIDTH_M] 二维码方格长度,单位m
--tspace [TAG_SPACING_PERCENT] 小方格与二维码方格长度比例
新建april_6x6_A4.yaml文件,格式参考上面的yaml,内容展示如下:
target_type: 'aprilgrid' #gridtype
tagCols: 6 #number of apriltags
tagRows: 6 #number of apriltags
tagSize: 0.022 #size of apriltag, edge to edge [m] 要亲自拿尺子量一下
tagSpacing: 0.3 #ratio of space between tags to tagSize
默认开始结构光时,双目图像会有很多点,这些点可能对标定有影响,所以使用时需要关闭结构光。
roslaunch realsense2_camera rs_camera.launch//注意不是:rs_imu_calibration.launch
新打开终端,运行
rosrun rqt_reconfigure rqt_reconfigure
打开后将camera->stereo_module中的emitter_enabled对钩去掉,展示如下:

打开rviz观察合理的距离,要求摄像头能看到RGB/左目/右目标定棋盘格。在终端输入以下命令。
roslaunch realsense2_camera rs_camera.launch
rviz
打卡rviz之后,注意一定要先在左侧 Fixed Frame 选择camera_link。左下角 add --> By topic --> /camera/color/image_raw/ --> 双击Camera ,找一个适合的能拍到棋盘格的距离。用同样的方式添加双目topic,/camera/infra1/image_rect_raw、/camera/infra2/image_rect_raw。注意:如果找不到双目对应的topic,则需要找到realsense2_camera rs_camera.launch文件进行修改!!!都改为true。
<arg name="enable_infra" default="true"/>
<arg name="enable_infra1" default="true"/>
<arg name="enable_infra2" default="true"/>
kalibr在处理标定数据的时候要求频率不能太高,一般为4Hz,我们可以使用如下命令来更改topic的频率,实际上是将原来的topic以新的频率转成新的topic,实际测试infra1对应左目相机,infra2对应右目相机。
在终端输入以下指令:
rosrun topic_tools throttle messages /camera/color/image_raw 4.0 /color & rosrun topic_tools throttle messages /camera/infra1/image_rect_raw 4.0 /infra_left & rosrun topic_tools throttle messages /camera/infra2/image_rect_raw 4.0 /infra_right

在终端输入以下命令
rosbag record -O multicameras_calibration /infra_left /infra_right /color
录制包的时候有以下注意事项:盯着rviz里面的画面,确保RGB、左目、右目都能看到完整的棋盘格;前后,左右,移动和小幅度、缓慢地翻转相机,持续2分钟左右,移动的时候,确保相机可以清晰完整地拍到棋盘格。如下图所示,我是直接在电脑里面打开PDF标定文件进行标定的。

查看文件属性信息
rosbag info multicameras_calibration.bag
最后录制的包大小有12.9G,所以一定要空出足够的硬盘空间。
source devel/setup.bash
Kalibr和realsense可能不在同一个工作空间,所以首先要激活环境变量,切换到kalibr的工作空间。然后在终端运行以下命令。
rosrun kalibr kalibr_calibrate_cameras --target april_6x6_A4.yaml --bag multicameras_calibration.bag --models pinhole-equi pinhole-equi pinhole-equi --topics /infra_left /infra_right /color --bag-from-to 10 100 --show-extraction
其中–target …/yaml/april_6x6_A4.yaml是标定板的配置文件,注意如果选择棋格盘,注意targetCols和targetRows表示的是内侧角点的数量,不是格子数量。–bag multicameras_calibration.bag是录制的数据包,models pinhole-equi pinhole-equi pinhole-equi表示三个摄像头的相机模型和畸变模型(解释参考https://github.com/ethz-asl/kalibr/wiki/supported-models,根据需要选取), --topics /infra_left /infra_right /color表示三个摄像头对应的拍摄的数据话题,–bag-from-to 10 100表示处理bag中10-100秒的数据。–show-extraction表示显示检测特征点的过程,这些参数可以相应的调整。
标定过程如下图所示

最后生成的文件如下图所示。.yaml 主要作用为了后期IMU+相机联合标定;.pdf 以图的方式显示效果;.txt 含有相机的内参。

//终端1
roscore
//终端2
roslaunch realsense2_camera rs_camera.launch
//终端3
rviz
//终端4
rosrun topic_tools throttle messages /camera/color/image_raw 4.0 /color & rosrun topic_tools throttle messages /camera/infra1/image_rect_raw 4.0 /infra_left & rosrun topic_tools throttle messages /camera/infra2/image_rect_raw 4.0 /infra_right
//终端5
rosbag record -O multicameras_calibration /infra_left /infra_right /color
终端6
source devel/setup.bash
rosrun kalibr kalibr_calibrate_cameras --target april_6x6_A4.yaml --bag multicameras_calibration.bag --models pinhole-equi pinhole-equi pinhole-equi --topics /infra_left /infra_right /color --bag-from-to 10 100 --show-extraction
新建 camchain.yaml,imu.yaml。命令gedit camchain.yaml。参数参考上面得到的multicameras_calibration-camchain.yaml文件,没有的参数可以删除,最终结果示例如下:
cam0:
camera_model: pinhole
distortion_coeffs: [0.540465033980622, -3.421102632272967, 21.830789418316407, -43.498448598565396]
distortion_model: equidistant
intrinsics: [438.8503955423126, 439.4255541557132, 427.72752812368054, 245.94481053159686]
resolution: [848, 480]
rostopic: /infra_left
cam1:
T_cn_cnm1:
- [0.9998501766643103, -0.000373712809663085, -0.017305622296793482, -0.04586677535366495]
- [0.00041133383503570486, 0.9999975600577051, 0.002170410815566145, 0.0001142871368050811]
- [0.01730476896174973, -0.0021772040253649635, 0.999847890808301, 3.897799547306375e-05]
- [0.0, 0.0, 0.0, 1.0]
camera_model: pinhole
distortion_coeffs: [-0.19909517915337813, 5.176635647931839, -20.70781432752059, 30.426962394390223]
distortion_model: equidistant
intrinsics: [449.13192407757515, 449.84988819302635, 431.79225642158184, 243.65260464616762]
resolution: [848, 480]
rostopic: /infra_right
命令 gedit imu.yaml,参数使用之前得到的d435i_imu_param.yaml,示例如下:
#Accelerometers
accelerometer_noise_density: 2.0546933436785896e-02 #Noise density (continuous-time) acc_n
accelerometer_random_walk: 1.0213093603518382e-03 #Bias random walk acc_w
#Gyroscopes
gyroscope_noise_density: 1.9035698029406516e-03 #Noise density (continuous-time) gyr_n
gyroscope_random_walk: 1.9530927686562762e-05 #Bias random walk gyr_w
rostopic: /imu #the IMU ROS topic
update_rate: 200.0 #Hz (for discretization of the values above)
复制realsense-ros包中rs_camera.launch,重命名为rs_imu_stereo.launch,更改内容为
<arg name="enable_sync" default="false"/>
//改为:
<arg name="enable_sync" default="true"/>
这样来使imu和双目数据时间对齐
<arg name="unite_imu_method" default=""/>
//改为
<arg name="unite_imu_method" default="linear_interpolation"/>
这样来保证会有imu话题
rosrun topic_tools throttle messages /camera/infra1/image_rect_raw 20.0 /infra_left & rosrun topic_tools throttle messages /camera/infra2/image_rect_raw 20.0 /infra_right & rosrun topic_tools throttle messages /camera/imu 200.0 /imu
rostopic hz topic名可以查看实际频率
rosbag record -O imu_stereo.bag /infra_left /infra_right /imu
source ~/kalibr_workspace/devel/setup.bash
rosrun kalibr kalibr_calibrate_imu_camera --bag imu_stereo.bag --cam camchain.yaml --imu imu.yaml --target april_6x6_A4.yaml --bag-from-to 15 115 --show-extraction
标定过程如下图所示

标定结果如下图所示

我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
我看到这个错误:translationmissing:da.datetime.distance_in_words.about_x_hours我的语言环境文件:http://pastie.org/2944890我的看法:我已将其添加到我的application.rb中:config.i18n.load_path+=Dir[Rails.root.join('my','locales','*.{rb,yml}').to_s]config.i18n.default_locale=:da如果我删除I18配置,帮助程序会处理英语。更新:我在config/enviorments/devolpment
如果我使用ruby版本2.5.1和Rails版本2.3.18会怎样?我有基于rails2.3.18和ruby1.9.2p320构建的rails应用程序,我只想升级ruby的版本,而不是rails,这可能吗?我必须面对哪些挑战? 最佳答案 GitHub维护apublicfork它有针对旧Rails版本的分支,有各种变化,它们一直在运行。有一段时间,他们在较新的Ruby版本上运行较旧的Rails版本,而不是最初支持的版本,因此您可能会发现一些关于需要向后移植的有用提示。不过,他们现在已经有几年没有使用2.3了,所以充其量只能让更
我试过重新启动apache,缓存的页面仍然出现,所以一定有一个文件夹在某个地方。我没有“公共(public)/缓存”,那么我还应该查看哪些其他地方?是否有一个URL标志也可以触发此效果? 最佳答案 您需要触摸一个文件才能清除phusion,例如:touch/webapps/mycook/tmp/restart.txt参见docs 关于ruby-如何在Ubuntu中清除RubyPhusionPassenger的缓存?,我们在StackOverflow上找到一个类似的问题:
大家好!我对我的:username字段进行了一个小的验证,它应该是4到30个字符。我写了一个验证::length=>{:within=>4..30,:message=>I18n.t('activerecord.errors.range')-我想显示一个错误各种错误的消息(不像,太长或太短),但这里有一个问题-我可以将最小值和最大值都传递给翻译,以便有类似的东西:用户名应该在4到30个字符之间。目前我有:range:"shouldbebetween%{count}and%{count}characters",这显然不起作用(只是为了检查)。是否可以从范围中获取这些值?谢谢大家的指教!
之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m
在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主
需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc
📢博客主页:https://blog.csdn.net/weixin_43197380📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正!📢本文由Loewen丶原创,首发于CSDN,转载注明出处🙉📢现在的付出,都会是一种沉淀,只为让你成为更好的人✨文章预览:一.分辨率(Resolution)1、工业相机的分辨率是如何定义的?2、工业相机的分辨率是如何选择的?二.精度(Accuracy)1、像素精度(PixelAccuracy)2、定位精度和重复定位精度(RepeatPrecision)三.公差(Tolerance)四.课后作业(Post-ClassExercises)视觉行业的初学者,甚至是做了1~2年
我正在运行Ubuntu11.10并像这样安装Ruby1.9:$sudoapt-getinstallruby1.9rubygems一切都运行良好,但ri似乎有空文档。ri告诉我文档是空的,我必须安装它们。我执行此操作是因为我读到它会有所帮助:$rdoc--all--ri现在,当我尝试打开任何文档时:$riArrayNothingknownaboutArray我搜索的其他所有内容都是一样的。 最佳答案 这个呢?apt-getinstallri1.8编辑或者试试这个:(非rvm)geminstallrdocrdoc-datardoc-da