VINS on RealSense D435i

2023-05-16

关于Realsense D435i运行VINS系列

前言

在SLAM中,主要是以激光SLAM和视觉SLAM为主,激光雷达直接可以获取三维点云坐标信息,所以激光SLAM会比视觉SLAM稳定许多,但是由于激光雷达挺贵的,而相机成本低廉许多,所以视觉SLAM在工业应用中起到很多作用,视觉SLAM的性能也逐渐发展起来,有时精度甚至可以和激光SLAM可媲美。而在视觉SLAM中相机的FOV有限,不像三位机械旋转式激光雷达那样有水平范围为360度,所以当相机旋转比较大或运动较快或曝光度突然变化的时候(总结来说就是场景变化过大而导致特征匹配不上)很容易跟丢而IMU作为廉价的传感器测量线加速度和角速度(当然九轴IMU可以直接测量姿态角),噪声较大,短时间内可以提供比较准确的测量,而相机可以长时间运行,噪声较小,两种传感器原理上基本是一种互补的关系,且两种传感器的成本都可以做到比较低廉且重量很轻,不像激光雷达那么高昂且较重。所以现在的无人机定位方案基本首选视觉惯性里程计方案(Visual Inertial Odometry,VIO),而自动驾驶L4级别中定位方案基本采用激光惯性里程计(Lidar Inertial Odometry,LIO)。

在SLAM中,VIO具有完整理论紧耦合优化的理论方案为港科大的VINS,也是为数不多具有开创性将VO与IMU的优点结合的工作,精华同样在于VO与IMU紧耦合工作上。所以市面上很多商业方案如VR、科研无人机都是采用VINS方案,包括浙大FAST实验室的高飞博士进行运动规划全是采用VINS提供无人机位置姿态信息(师出同门)。在2017年开源VINS-Mono,支持单目相机,可以在线估计camera与IMU的外參,同样可以在iphone手机上运行(他们提供了VINS-Mobile)。后一年开源VINS-Fusion,支持双目相机+IMU。在2021年开源GVINS,将GNSS、VIO都融合到一个系统,即便在比较极端情况下,GVINS稳定性与精度也都由于前两者。

关于VINS-Mono的代码注释与详解:https://blog.csdn.net/qq_41839222/article/details/85793998

(该博文讲解非常详细),当然深蓝学院也有高翔和贺一家关于从零开始手写VIO的课程。

现在用同一个Realsense D435i分别设备演示一下运行VINS-Mono和VINS-Fusion,其中D435i包含有一个RGB成像模块、两个红外成像模块、一个深度成像模块和一个IMU。

D435i运行VINS-Mono

该程序需要在Ubuntu ROS下运行,参见ROS安装,原作者使用的系统是Ubuntu16.04,而我这里的电脑是Ubuntu20.04,有部分的包可能不一样。安装流程如下:

  1. 安装ROS相关包

    sudo apt-get install ros-noetic-cv-bridge ros-noetic-tf ros-noetic-message-filters ros-noetic-image-transport
    
  2. 安装ceres,ceres安装教程,其中现在版本是最新的2.1,VINS-Mono貌似不支持这个版本,换成1.14

  3. 克隆编译

    mkdir -p VINS_ws/src
    cd VINS_ws/src
    git clone https://github.com/HKUST-Aerial-Robotics/VINS-Mono.git
    catkin build
    source devel/setup.bash
    

    其中源码测试都是基于OpenCV3完成的,但是Ubuntu20.04 ROS都是OpenCV4,所以需要改成对应的函数变量名:

    原函数名(OpenCV3)新函数名(OpenCV4)
    CV_GRAY2RGBcv::COLOR_GRAY2RGB
    CV_BGR2GRAYcv::COLOR_BGR2GRAY
    CV_LOAD_IMAGE_GRAYSCALEcv::IMREAD_GRAYSCALE
    CV_AAcv::LINE_AA
    CV_CALIB_CB_ADAPTIVE_THRESHcv::CALIB_CB_ADAPTIVE_THRESH
    CV_CALIB_CB_NORMALIZE_IMAGEcv::CALIB_CB_NORMALIZE_IMAGE
    CV_CALIB_CB_FILTER_QUADScv::CALIB_CB_FILTER_QUADS
    CV_CALIB_CB_FAST_CHECKcv::CALIB_CB_FAST_CHECK
    CV_RETR_CCOMPcv::RETR_CCOMP
    CV_CHAIN_APPROX_SIMPLEcv::CHAIN_APPROX_SIMPLE
    CV_CALIB_CB_FILTER_QUADScv::CALIB_CB_FILTER_QUADS
    CV_GRAY2BGRcv::COLOR_GRAY2BGR
    CV_CALIB_CB_NORMALIZE_IMAGEcv::CALIB_CB_NORMALIZE_IMAGE
    CV_TERMCRIT_EPScv::TermCriteria::EPS
    CV_TERMCRIT_ITERcv::TermCriteria::COUNT
    CV_THRESH_BINARY_INVcv::THRESH_BINARY_INV
    CV_CALIB_CB_FAST_CHECKcv::CALIB_CB_FAST_CHECK
    CV_CALIB_CB_ADAPTIVE_THRESHcv::CALIB_CB_ADAPTIVE_THRESH
    CV_THRESH_BINARYcv::THRESH_BINARY
    CV_SHAPE_CROSScv::MORPH_CROSS
    CV_SHAPE_RECTcv::MORPH_RECT
    CV_ADAPTIVE_THRESH_MEAN_Ccv::ADAPTIVE_THRESH_MEAN_C
    CV_FONT_HERSHEY_SIMPLEXcv::FONT_HERSHEY_SIMPLEX
    #include <opencv/cv.h>#include <opencv2/opencv.hpp>
    #include <opencv/highgui.h>#include <opencv2/highgui/highgui.hpp>

    到此为止已经完成VINS-Mono的安装

  4. 安装Realsense驱动

    首先到Intel RealSense SDK 2.0官网下载,如果是Linux Ubuntu,找到https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md直接命令行安装

    $ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE
    $ sudo add-apt-repository "deb https://librealsense.intel.com/Debian/apt-repo $(lsb_release -cs) main" -u
    $ sudo apt-get install librealsense2-dkms
    $ sudo apt-get install librealsense2-utils
    $ sudo apt-get install librealsense2-dev
    $ sudo apt-get install librealsense2-dbg
    

    如果相机通过usb连接电脑,采用命令realsense-viewer可以查看图像

    安装ROS驱动

    sudo apt-get install ros-noetic-realsense2-camera
    sudo apt-get install ros-noetic-realsense2-description
    mkdir -p ~/catkin_ws/src
    cd ~/catkin_ws/src/
    git clone https://github.com/IntelRealSense/realsense-ros.git
    cd ..
    catkin_make
    source devel/setup.bash
    roslaunch realsense2_camera rs_camera.launch  # 该命令正常打开相机
    

    此时需要修改一下rs_camera.launch,IMU开启,相机分辨率640×480,重命名为rs_camera_d435i.launch

    <launch>
      <arg name="serial_no"           default=""/>
      <arg name="usb_port_id"         default=""/>
      <arg name="device_type"         default=""/>
      <arg name="json_file_path"      default=""/>
      <arg name="camera"              default="camera"/>
      <arg name="tf_prefix"           default="$(arg camera)"/>
      <arg name="external_manager"    default="false"/>
      <arg name="manager"             default="realsense2_camera_manager"/>
    
      <arg name="fisheye_width"       default="640"/>
      <arg name="fisheye_height"      default="480"/>
      <arg name="enable_fisheye"      default="false"/>
    
      <arg name="depth_width"         default="640"/>
      <arg name="depth_height"        default="480"/>
      <arg name="enable_depth"        default="false"/>
    
      <arg name="infra_width"        default="640"/>
      <arg name="infra_height"       default="480"/>
      <arg name="enable_infra1"       default="true"/>
      <arg name="enable_infra2"       default="true"/>
    
      <arg name="color_width"         default="640"/>
      <arg name="color_height"        default="480"/>
      <arg name="enable_color"        default="true"/>
    
      <arg name="fisheye_fps"         default="30"/>
      <arg name="depth_fps"           default="30"/>
      <arg name="infra_fps"           default="30"/>
      <arg name="color_fps"           default="30"/>
      <arg name="gyro_fps"            default="200"/>
      <arg name="accel_fps"           default="250"/>
      <arg name="enable_gyro"         default="true"/>
      <arg name="enable_accel"        default="true"/>
    
      <arg name="enable_pointcloud"         default="false"/>
      <arg name="pointcloud_texture_stream" default="RS2_STREAM_COLOR"/>
      <arg name="pointcloud_texture_index"  default="0"/>
    
      <arg name="enable_sync"               default="true"/>
      <arg name="align_depth"               default="true"/>
    
      <arg name="publish_tf"                default="true"/>
      <arg name="tf_publish_rate"           default="0"/>
    
      <arg name="filters"                   default=""/>
      <arg name="clip_distance"             default="-2"/>
      <arg name="linear_accel_cov"          default="0.01"/>
      <arg name="initial_reset"             default="false"/>
      <arg name="unite_imu_method"          default="linear_interpolation"/>
      <arg name="topic_odom_in"             default="odom_in"/>
      <arg name="calib_odom_file"           default=""/>
      <arg name="publish_odom_tf"           default="true"/>
      <arg name="allow_no_texture_points"   default="false"/>
      <arg name="emitter_enable"   		default="false"/>
    
    
    
      <group ns="$(arg camera)">
        <include file="$(find realsense2_camera)/launch/includes/nodelet.launch.xml">
          <arg name="tf_prefix"                value="$(arg tf_prefix)"/>
          <arg name="external_manager"         value="$(arg external_manager)"/>
          <arg name="manager"                  value="$(arg manager)"/>
          <arg name="serial_no"                value="$(arg serial_no)"/>
          <arg name="usb_port_id"              value="$(arg usb_port_id)"/>
          <arg name="device_type"              value="$(arg device_type)"/>
          <arg name="json_file_path"           value="$(arg json_file_path)"/>
    
          <arg name="enable_pointcloud"        value="$(arg enable_pointcloud)"/>
          <arg name="pointcloud_texture_stream" value="$(arg pointcloud_texture_stream)"/>
          <arg name="pointcloud_texture_index"  value="$(arg pointcloud_texture_index)"/>
          <arg name="enable_sync"              value="$(arg enable_sync)"/>
          <arg name="align_depth"              value="$(arg align_depth)"/>
    
          <arg name="fisheye_width"            value="$(arg fisheye_width)"/>
          <arg name="fisheye_height"           value="$(arg fisheye_height)"/>
          <arg name="enable_fisheye"           value="$(arg enable_fisheye)"/>
    
          <arg name="depth_width"              value="$(arg depth_width)"/>
          <arg name="depth_height"             value="$(arg depth_height)"/>
          <arg name="enable_depth"             value="$(arg enable_depth)"/>
    
          <arg name="color_width"              value="$(arg color_width)"/>
          <arg name="color_height"             value="$(arg color_height)"/>
          <arg name="enable_color"             value="$(arg enable_color)"/>
    
          <arg name="infra_width"              value="$(arg infra_width)"/>
          <arg name="infra_height"             value="$(arg infra_height)"/>
          <arg name="enable_infra1"            value="$(arg enable_infra1)"/>
          <arg name="enable_infra2"            value="$(arg enable_infra2)"/>
    
          <arg name="fisheye_fps"              value="$(arg fisheye_fps)"/>
          <arg name="depth_fps"                value="$(arg depth_fps)"/>
          <arg name="infra_fps"                value="$(arg infra_fps)"/>
          <arg name="color_fps"                value="$(arg color_fps)"/>
          <arg name="gyro_fps"                 value="$(arg gyro_fps)"/>
          <arg name="accel_fps"                value="$(arg accel_fps)"/>
          <arg name="enable_gyro"              value="$(arg enable_gyro)"/>
          <arg name="enable_accel"             value="$(arg enable_accel)"/>
    
          <arg name="publish_tf"               value="$(arg publish_tf)"/>
          <arg name="tf_publish_rate"          value="$(arg tf_publish_rate)"/>
    
          <arg name="filters"                  value="$(arg filters)"/>
          <arg name="clip_distance"            value="$(arg clip_distance)"/>
          <arg name="linear_accel_cov"         value="$(arg linear_accel_cov)"/>
          <arg name="initial_reset"            value="$(arg initial_reset)"/>
          <arg name="unite_imu_method"         value="$(arg unite_imu_method)"/>
          <arg name="topic_odom_in"            value="$(arg topic_odom_in)"/>
          <arg name="calib_odom_file"          value="$(arg calib_odom_file)"/>
          <arg name="publish_odom_tf"          value="$(arg publish_odom_tf)"/>
          <arg name="allow_no_texture_points"  value="$(arg allow_no_texture_points)"/>
        </include>
      </group>
    </launch>
    

    确认图像和IMU话题数据都有

    rostopic echo /camera/imu 
    rostopic echo /camera/color/image_raw
    
  5. 修改VINS-Mono的配置文件

    VINS-Mono/config/realsense/realsense_color_config.yaml中修改对应的imu和camera topic,输出路径,其中相机内参数,厂家出厂的d435i内参有少许不一致,需要修改一下。不想标定就直接用rostopic echo /camera/color/camera_info,查看相机内参,不过最好自己标定一下,采用ROS提供的张正友标定法。imu与camera外參可以不管,imu白噪声和随机游走可以采用原始值,但最好也自己标定一下,参考网站。

  6. 运行

    roslaunch realsense2_camera rs_camera_d435i.launch 
    roslaunch vins_estimator vins_rviz.launch
    roslaunch vins_estimator realsense_color.launch
    

    VINS-Mono

    单目+IMU需要运动初始化,有时因IMU积分的原因而导致漂移严重。


D435i运行VINS-Fusion

这里采用D435i输出的红外双目图像,VINS-Fusion采用的是双目+IMU会进行估计,该方案不需要运动初始化,而VINS-Mono需要相机初始的时候运动初始化。安装基本和前面VINS-Mono的一致

cd ~/VINS-Fusion_ws/src
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git
cd ../
catkin build
source ~/VINS-Fusion_ws/devel/setup.bash

运行D435i时需要查看红外图像,同样是上述的rs_camera_d435i.launch

修改VINS-Fusionconfig/realsense_d435i/realsense_stereo_imu_config.yaml

其中estimate_extrinsic最好都设置成1,这样就会优化初值。

%YAML:1.0

#common parameters
#support: 1 imu 1 cam; 1 imu 2 cam: 2 cam; 
imu: 1         
num_of_cam: 2  

imu_topic: "/camera/imu"
image0_topic: "/camera/infra1/image_rect_raw"
image1_topic: "/camera/infra2/image_rect_raw"
output_path: "~/output/"

cam0_calib: "left.yaml"
cam1_calib: "right.yaml"
image_width: 640
image_height: 480
   

# Extrinsic parameter between IMU and Camera.
estimate_extrinsic: 1   # 0  Have an accurate extrinsic parameters. We will trust the following imu^R_cam, imu^T_cam, don't change it.
                        # 1  Have an initial guess about extrinsic parameters. We will optimize around your initial guess.

body_T_cam0: !!opencv-matrix
   rows: 4
   cols: 4
   dt: d
   data: [ 1, 0, 0, -0.00552,
           0, 1, 0, 0.0051,
           0, 0, 1, 0.01174,
           0, 0, 0, 1 ]

body_T_cam1: !!opencv-matrix
   rows: 4
   cols: 4
   dt: d
   data: [ 1, 0, 0, 0.0446571,
           0, 1, 0, 0.0051,
           0, 0, 1, 0.01174,
           0, 0, 0, 1 ]

#Multiple thread support
multiple_thread: 1

#feature traker paprameters
max_cnt: 150            # max feature number in feature tracking
min_dist: 30            # min distance between two features 
freq: 10                # frequence (Hz) of publish tracking result. At least 10Hz for good estimation. If set 0, the frequence will be same as raw image 
F_threshold: 1.0        # ransac threshold (pixel)
show_track: 1           # publish tracking image as topic
flow_back: 1            # perform forward and backward optical flow to improve feature tracking accuracy

#optimization parameters
max_solver_time: 0.04  # max solver itration time (ms), to guarantee real time
max_num_iterations: 8   # max solver itrations, to guarantee real time
keyframe_parallax: 10.0 # keyframe selection threshold (pixel)

#imu parameters       The more accurate parameters you provide, the better performance
acc_n: 0.1          # accelerometer measurement noise standard deviation. #0.2   0.04
gyr_n: 0.01         # gyroscope measurement noise standard deviation.     #0.05  0.004
acc_w: 0.001         # accelerometer bias random work noise standard deviation.  #0.002
gyr_w: 0.0001       # gyroscope bias random work noise standard deviation.     #4.0e-5
g_norm: 9.805         # gravity magnitude

#unsynchronization parameters
estimate_td: 1                      # online estimate time offset between camera and imu
td: 0.00                             # initial value of time offset. unit: s. readed image clock + td = real image clock (IMU clock)

#loop closure parameters
load_previous_pose_graph: 0        # load and reuse previous pose graph; load from 'pose_graph_save_path'
pose_graph_save_path: "~/output/pose_graph/" # save and load path
save_image: 1                   # save image in pose graph for visualization prupose; you can close this function by setting 0 

出行效果如下:

VINS-Fusion

但拿出去走廊走一圈回到原来的地方(但未检测到回环)效果如下:

在这里插入图片描述
完整版视频

VINS-Fusion with D435i

效果貌似还可以,如果后面检测到回环效果会更好。


总结

两种方案,个人认为双目+IMU(VINS-Fusion运行D435i的红外双目图像+IMU)比单目+IMU(VINS-Mono运行D435的RGB图像+IMU)更好,双目图像本身两张图像就可以三角化深度估计了,而单目图像需要运动时候三角化进行深度估计(有尺度漂移问题),所以会更好一些。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VINS on RealSense D435i 的相关文章

  • Kalibr标定d435i

    figure it out 最近准备使用realsense d435i xff0c 先对其进行标定 整体环境是基于ROS的 xff0c 因为Kalibr是在ROS环境下 大致过程如下 xff1a imu标定 gt 双目标定 gt 双目 43
  • realsense435i运行vins-mono,标定部分

    相机标定 1 安装kalibr xff1b 参考 xff1a https blog csdn net wangbaodong070411209 article details 112248834 https blog csdn net we
  • VINS技术路线与代码详解

    VINS技术路线 写在前面 xff1a 本文整和自己的思路 xff0c 希望对学习VINS或者VIO的同学有所帮助 xff0c 如果你觉得文章写的对你的理解有一点帮助 xff0c 可以推荐给周围的小伙伴们 xff0c 当然 xff0c 如果
  • VINS-Mono

    非极大值抑制 NMS算法 xff0c 思想是搜索局部最大值 xff0c 抑制非极大值 输入 xff1a 目标边界框及其对应的置信度的分列表 xff0c 设定阈值 xff0c 阈值用来删除重叠较大的边界框 IoU xff1a 两个边界框的交集
  • Realsense L515使用

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 主要参考二 基本情况 xff08 一 xff09 ubuntu和ROS情况 xff08 二 xff09 主要步骤 总结
  • Ubuntu 18.04 运行PL-VINS

    代码地址 https span class token operator span span class token comment github com cnqiangfu PL VINS span 安装过程出错参考 PL VINS配置
  • 运行Intel realsense L515相机

    运行Intel realsense L515相机 首先去官 https www intelrealsense com sdk 2 xff0c 按照上面的提示安装各种文件 xff0c 然后输入realsense viewer出现可视化窗口 下
  • VINS-Fusion跑kitti stereo及stereo+GPS数据

    Stereo source vfusion devel setup bash roslaunch vins vins rviz launch source vfusion devel setup bash rosrun loop fusio
  • 在ubuntu20.04上配置VINS_Fusion(亲测有效,一应俱全)

    最近在做科研训练的时候配置了HKUST Aerial Robotics实验室的VINS Fusion代码项目 xff0c 经历了一些编译报错的问题 xff0c 在网上查找的时候博客内容良莠不齐 xff0c 且实质针对性意见不多 xff0c
  • IMU误差模型简介及VINS使用说明

    1 IMU误差来源 2 IMU噪声模型 Noise and Bias kalibr中的imu noise model 参考 xff1a https github com ethz asl kalibr wiki IMU Noise Mode
  • 在TUMVI数据集上测试VINS-Fusion算法

    VINS Fusion算法是一个非常优秀的视觉惯性里程计 但原版VINS Fusion并没有提供与TUM数据集相应的配置文件 因此需要自己进行写yaml文件 修改配置文件 tum mono yaml span class token dir
  • vins-fusion代码解读[五] imu在vins里的理解

    SLAM新手 xff0c 欢迎讨论 IMU作用 vins中 xff0c IMU只读取IMU六轴的信息 xff0c 3轴线加速度 xff08 加速度计 xff09 和3轴角速度 xff08 陀螺仪 xff09 通过对陀螺仪的一次积分 xff0
  • VINS记录

    euroc launch lt launch gt lt arg name 61 34 config path 34 default 61 34 find feature tracker config euroc euroc config
  • VINS-Mono视觉初始化代码详解

    摘要 视觉初始化的过程是至关重要的 xff0c 如果在刚开始不能给出很好的位姿态估计 xff0c 那么也就不能对IMU的参数进行精确的标定 这里就体现了多传感器融合的思想 xff0c 当一个传感器的数据具有不确定性的时候 xff0c 我们需
  • ROS与深度相机入门教程:(1)Ubuntu16.04 在ROS中驱动Intel D435i深度相机

    Intel在Github上开源了支持所有RealSense系列相机的SDK 包括了D400 SR300系列深度相机和T265双目跟踪相机 支持Linux Windows Mac OS以及Android 链接 https github com
  • 运行相机与vins_Fusion

    安装相机的SDK git clone https github com slightech MYNT EYE D SDK git cd MYNT EYE D SDK make init make all 这里由于没有添加依赖 xff0c O
  • intel realsense 深度视野范围与模组硬件说明

    文章目录 4 4 距离 xff08 Z xff09 处的深度视场4 5 无效深度带4 6 最小测量深度4 7 深度质量规范4 8 深度起点 xff08 地面零点参考 xff09 4 8 1 深度原点X Y坐标 7 2 视觉处理器D4板外形7
  • 【3D视觉】realsense D435三维重建

    1 xff0c 硬件 xff1a realsense D435 驱动及SDK开发包安装 GitHub IntelRealSense librealsense Intel RealSense SDK 下载最新驱动 安装后打开 Intel Re
  • Jetson Xavier NX上安装ROS、Cartographer、基于D435i的Yolov5+TensorRT7的流程及问题解决

    主要记录下自己在Jetson Xavier NX上运行ROS Cartographer 基于D435i的Yolov5 43 TensorRT的系统环境配置流程 xff0c 经过了无数次在ARM上的安装 xff0c 这次是最流畅的一次环境配置
  • 2021-08-06

    在编译OKVIS中 执行make j8时报错的解决方法 1 根据github上OKVIS的安装步骤一步一步执行 由于github经常进不去 我就进了gitee网站查到OKVIS的安装步骤 参考链接 https gitee com bill4

随机推荐

  • 平衡车入门---MPU6050陀螺仪的使用

    平衡车入门 MPU6050陀螺仪的使用 一 MPU6050简介二 学习MPU6050的步骤三 I2C协议简介四 MPU6050硬件介绍五 MPU6050的几个重要寄存器六 原始数据的单位换算七 角度换算 滤波算法 一 MPU6050简介 M
  • C++ 为什么基类的析构函数要声明为虚函数

    1 为什么声明基类析构函数为虚函数 xff1f xff08 1 xff09 基类指针 指向 基类对象 xff1a 不用考虑基类析构函数是否声明为虚函数 xff08 2 xff09 基类指针 指向 派生类对象 xff1a 若基类析构函数不为虚
  • std::map find和count效率测试

    1 简介 在使用标准模板库中的map容器且遇到键值对的值为自定义struct或class类型时 xff0c 考虑到特殊场景 xff08 即不能确保key自始至终唯一 xff09 xff0c 若插入新元素 xff08 new 对象 xff09
  • 随机生成8位长字符串(大小写字母及数字组合)

    1 简要说明 项目上开发要用到随机生成一个8位长的字符串 xff08 类似Java工具类中的UUID xff09 xff0c 作为id来对同一事物的不同个体进行唯一标识 xff0c 如同一个班级里学生名字几乎不同 xff0c 偶尔会有重复
  • C++引用和指针区别

    1 C 43 43 引用和指针区别 xff1a 指针是一个新的变量 xff0c 指向另一个变量的地址 xff0c 我们可以通过访问这个地址来修改另一个变量 xff1b 而引用是一个别名 xff0c 对引用的操作就是对变量的本身进行操作指针可
  • TCP/UDP端口号

    大家好呀 xff0c 我是请假君 xff0c 今天又来和大家一起学习数通了 xff0c 今天要分享的知识是TCP UDP端口号 在IP网络中 xff0c 一个IP地址可以唯一地标识一个主机 但一个主机上却可能同时有多个程序访问网络 要标识这
  • C/C++ 电脑微信dat文件解密及工具分享

    1 前言 最近想整理下照片 xff08 回忆 怀旧 xff09 xff0c 以前也知道在微信pc端聊天时 xff0c 图片 视频 文档等文件会缓存在一个目录下 xff08 电脑微信 左下角三条杠 设置 文件管理 xff09 xff0c 点击
  • ODBC::SQLExecDirect返回-1 错误信息ORA-00604 ORA-01000

    在通过使用微软提供的ODBC SDK读取数据库 xff08 SELECT xff09 时 xff0c 发现Oracle读着读着就读不到数据了 xff08 MySQL和SQL Server是正常的 xff09 xff0c 经调试发现SQLEx
  • std::vector与deque首尾增删及遍历(应用于CListCtrl虚拟列表)混合性能测试

    1 简介 在工作项目中应用MFC类库的CListCtrl刷新加载数据 xff0c 一开始是用InsertItem SetItemText 和DeleteItem 等成员函数来实现数据在列表视图控件中的新增和删除 xff08 最多显示500条
  • Matlab 实用代码集

    本博客将存放一些常用的Matlab代码片段 xff0c 整理成博客 xff0c 并持续更新 xff0c 以便写代码可以调用 1 函数多输入多输出 Matlab写函数的时候 xff0c 输入输出个数经常是不固定的 xff0c narginch
  • 基于c++的A-star算法

    资料 xff1a https www cnblogs com guxuanqing p 9610780 html 一 基础原理 1 从起点开始 xff0c 向周围八个方向扩展 测试新扩展的点的路径代价 xff0c 路径代价由已走的路径和距离
  • 倍增算法

    倍增算法 给定一个整数 M xff0c 对于任意一个整数集合 S xff0c 定义 校验值 如下 从集合 S 中取出 M 对数 即 2 M 个数 xff0c 不能重复使用集合中的数 xff0c 如果 S 中的整数不够 M 对 xff0c 则
  • Numpy学习——数组类型

    Numpy学习 数组类型 更多的数据类型转换 casting 不同数据类型的大小 结构体类型处理丢失的数据 更多的数据类型 转换 casting numpy会自动转换高精度数据类型 xff1a span class token operat
  • 深度学习推荐系统——前深度学习时代

    深度学习推荐系统 前深度学习时代 协同过滤相似度UserCFItemCF矩阵分解矩阵分解的求解过程消除用户和物品打分的偏差矩阵分解的优缺点 逻辑回归特征工程POLY2模型FM模型FFM模型 GDBT 43 LRLS PLM xff08 La
  • 深度学习推荐系统——深度学习时代

    深度学习推荐系统 深度学习时代 AutoRecDeep CrossingNeuralCFPNNWide amp DeepFM与深度学习模型结合FNNDeepFMNFM 注意力机制AFMDIN DIEN总结 AutoRec h r
  • 深度学习推荐系统——Embedding

    深度学习推荐系统 Embedding Embedding概述Word2vecItem2vec Embedding概述 Embedding操作的主要作用是将稀疏向量转换成稠密向量 xff0c 向量之间的距离反映了对象之间的相似性 从另一空间表
  • 堆与栈区别,以及分配内存的快慢

    毫无疑问 xff0c 显然从栈上分配内存更快 xff0c 因为从栈上分配内存仅仅就是栈指针的移动而已 操作系统会在底层对栈提供支持 xff0c 会分配专门的寄存器存放栈的地址 xff0c 栈的入栈出栈操作也十分简单 xff0c 并且有专门的
  • ubuntu下realsence相机通过ros话题直接读取内参

    roslaunch realsense2 camera rs camera span class token punctuation span launch span class token comment 打开相机节点 span rost
  • 语义栅格地图(六) realsense实际测试

    1 在ros中启动realsense 测试输出话题 xff1a roslaunch realsense2 camera rs camera launch 测试输出点云 xff1a roslaunch realsense2 camera rs
  • VINS on RealSense D435i

    关于Realsense D435i运行VINS系列 前言 在SLAM中 xff0c 主要是以激光SLAM和视觉SLAM为主 xff0c 激光雷达直接可以获取三维点云坐标信息 xff0c 所以激光SLAM会比视觉SLAM稳定许多 xff0c