地瓜派开发记录2-双目IMU相机

RDK X5单目升级双目:GS130W点云+EGO-Planner自主导航实战 双目视觉是实现机器人三维空间感知的基础技术,其核心原理是通过左右图像视差计算深度,生成稠密点云,从而突破单目视觉缺乏绝对尺度与深度信息的固有局限。该技术具备低成本、高灵活性和强实时性优势,广泛应用于无人机避障、移动机器人导航及SLAM建图等场景。在Jetson嵌入式平台(如RDK X5)上,结合GS130W双目模组与EGO-Planner局部规划器,可构建从图像采集、立体匹配、点云重建到动力学约束轨迹生成的完整自主导航闭环。本文聚焦于硬件选型适配、高精度深度标定、CUDA加速点云生成及EGO-Planner 阅读详情

地瓜派开发记录2-双目IMU相机

开始之前系统的配置很重要,我们这款相机需要比较高的版本,具体的镜像配置参考下面。

D-Robotics RDK套件 | RDK DOC

1. 功能介绍

地瓜双目IMU相机自带完整的标定参数,包括双目标定参数、IMU内参、双目和IMU之间的外参,用户无需额外标定即可直接使用。 利用这些参数,可以通过双目立体匹配算法计算高精度的深度图,实现实时的三维环境感知。 同时,相机的数据能应用于开源视觉惯性里程计(VIO)算法,如 OpenVINS 等,可计算相机位姿与轨迹信息。 适用于机器人导航、避障等应用,为开发者提供即插即用的深度感知与视觉惯性融合能力。

mipi相机代码仓库:https://github.com/D-Robotics/hobot_mipi_cam

2. 支持平台

平台系统支持示例功能
RDK X5, RDK X5 ModuleUbuntu 22.04 (Humble)启动双目相机,输出双目图像和IMU数据

3. 准备工作

3.1. RDK平台

  1. RDK已烧录好RDK OS系统
  2. RDK已成功安装TogetheROS.Bot
  3. 确认PC机能够通过网络访问RDK

3.2. 系统和功能包版本

版本查询方法
RDK X5系统镜像版本3.4.1及以上cat /etc/version
tros-humble-hobot-stereonet功能包版本2.5.0及以上`apt list
tros-humble-mipi-cam功能包版本2.5.0及以上`apt list
  • 如果系统镜像版本不符合要求,请参考文档对应章节进行镜像烧录
  • 如果功能包版本不符合要求,请执行以下指令进行更新:
sudo apt update
sudo apt install --only-upgrade tros-humble-hobot-stereonet
sudo apt install --only-upgrade tros-humble-mipi-cam

注意

如果sudo apt update命令执行失败或报错,请查看常见问题章节的Q10: apt update 命令执行失败或报错如何处理?解决。

4. 启动双目相机

4.1. 双目IMU相机

  • 注意相机有黑色金属外壳和亚克力外壳两个版本,功能都是一样的

LH_IMU_cam

4.2. 硬件连接

  1. 模组背后开关设置为EXT模式,不要在LPWM模式
  2. 相机的黑色杜邦线要连接RDK X5的37管脚,需要外部触发控制相机和IMU的时间同步,管脚定义可以查看3.1.1 管脚定义与应用

RDK_X5_LH_IMU_cam

4.3. RDK X5配置

  1. RDK X5上要进行相应的设置才能读取IMU数据,首先检查一下系统版本是否符合要求,需要3.4.1版本以上:
cat /etc/version
  1. 在RDK X5上运行以下指令进行配置:
srpi-config

LH_IMU_cam_config1 LH_IMU_cam_config2 LH_IMU_cam_config3 LH_IMU_cam_config4

  1. 重启后,确认目录/sys/bus/iio/devices/有iio:device1和iio:device2则代表配置成功
ll /sys/bus/iio/devices/

LH_IMU_cam_config5

4.4. 相机启动指令

  1. 执行如下指令启动相机:
source /opt/tros/humble/setup.bash

ros2 launch mipi_cam mipi_cam_dual_channel.launch.py \
mipi_channel:=2 mipi_channel2:=0 \
mipi_lpwm_enable:=True mipi_frame_ts_type:=realtime \
mipi_image_width:=816 mipi_image_height:=960 \
mipi_image_framerate:=10.0 mipi_gdc_enable:=True \
mipi_out_format:=nv12 \
log_level:=info

参数解释:

  • mipi_channel:=2 mipi_channel2:=0 调整左右目拼接顺序
  • mipi_lpwm_enable:=True 开启LPWM硬件同步
  • mipi_frame_ts_type:=realtime 时间戳采用系统时间
  • mipi_image_width:=816 mipi_image_height:=960 调整图像分辨率,最高可设置为1088*1280
  • mipi_image_framerate:=10.0 调整相机帧率,最高可调整为30.0
  • mipi_gdc_enable:=True 开启GDC矫正会发布矫正后的双目图像,否则会发布带畸变的图像
  • mipi_out_format:=nv12 设置图像格式,支持nv12/bgr8
  • log_level:=info 日志等级,info等级可以打印标定参数,如果不需要显示那么多信息,则设置为warn
  1. 程序运行成功会打印如下日志,包括相机全部的标定参数,目前双目标定采用鱼眼模式,可以参考OpenCV fisheye的介绍:

LH_IMU_cam_run_success_log

  1. 发布的话题如下:
ros2 topic list -v

LH_IMU_cam_topic

  • /image_combine_raw 为上下拼接的双目图像,mipi_channel:=2 mipi_channel2:=0 参数控制拼接顺序
  • /image_left_raw//image_right_raw 为左右目数据话题,mipi_channel:=2 mipi_channel2:=0 参数控制顺序
  • /imu_data 为IMU数据话题,发布陀螺仪和加速度计数据

注意

imu数据话题中angular_velocity 单位是 rad/s,linear_acceleration单位是 m/s²,重力加速度值是9.81

5. 启动双目深度算法

5.1. 启动指令

  • 参考双目深度算法,里面有双目算法的相关介绍和启动指令介绍
  • 本相机启动指令为:
bash run_stereo.sh --mipi_rotation 0.0

# 参考对应文档查看具体的参数设置

5.2. 结果展示

  • 启动后,可以在web端查看RGB图和深度图,在浏览器输入 http://ip:8000 (图中RDK IP是192.168.128.10):

LH_IMU_cam_DStereo

6. 双目VIO算法(以OpenVINS为例)

6.1. 录制rosbag

目前还不支持在线运行VIO算法,需要录制rosbag后在PC上进行计算

  • 运行指令
source /opt/tros/humble/setup.bash

ros2 pkg prefix mipi_cam

ros2 launch mipi_cam mipi_cam_dual_channel.launch.py \
mipi_channel:=2 mipi_channel2:=0 \
mipi_lpwm_enable:=True mipi_frame_ts_type:=realtime \
mipi_image_width:=816 mipi_image_height:=960 \
mipi_image_framerate:=10.0 mipi_gdc_enable:=False \
mipi_out_format:=nv12 \
log_level:=warn
  • 主要录制imu数据话题和双目图像话题,由于RDK X5写入数据的性能有限,不建议录制太长时间
ros2 bag record /imu_data /image_combine_raw --max-cache-size 1073741824
  • 将ros2 bag转为ros1格式,可以自行写程序实现

6.2. 准备VIO参数

配置OpenVINS的参数,在OpenVINS的config目录新建文件夹drobotics_stereo_imu_cam,创建以下3个文件,注意相机的标定文件需要根据上文的命令读取

  • estimator_config.yaml
%YAML:1.0 # need to specify the file type at the top!

verbosity: "INFO" # ALL, DEBUG, INFO, WARNING, ERROR, SILENT

use_fej: true # if first-estimate Jacobians should be used (enable for good consistency)
integration: "rk4" # discrete, rk4, analytical (if rk4 or analytical used then analytical covariance propagation is used)
use_stereo: true # if we have more than 1 camera, if we should try to track stereo constraints between pairs
max_cameras: 2 # how many cameras we have 1 = mono, 2 = stereo, >2 = binocular (all mono tracking)

calib_cam_extrinsics: true # if the transform between camera and IMU should be optimized R_ItoC, p_CinI
calib_cam_intrinsics: true # if camera intrinsics should be optimized (focal, center, distortion)
calib_cam_timeoffset: true # if timeoffset between camera and IMU should be optimized
calib_imu_intrinsics: false # if imu intrinsics should be calibrated (rotation and skew-scale matrix)
calib_imu_g_sensitivity: false # if gyroscope gravity sensitivity (Tg) should be calibrated

max_clones: 11 # how many clones in the sliding window
max_slam: 50 # number of features in our state vector
max_slam_in_update: 25 # update can be split into sequential updates of batches, how many in a batch
max_msckf_in_update: 40 # how many MSCKF features to use in the update
dt_slam_delay: 1 # delay before initializing (helps with stability from bad initialization...)

gravity_mag: 9.7887 # magnitude of gravity in this location

feat_rep_msckf: "GLOBAL_3D"
feat_rep_slam: "ANCHORED_MSCKF_INVERSE_DEPTH"
feat_rep_aruco: "ANCHORED_MSCKF_INVERSE_DEPTH"

# zero velocity update parameters we can use
# we support either IMU-based or disparity detection.
try_zupt: false
zupt_chi2_multipler: 0 # set to 0 for only disp-based
zupt_max_velocity: 0.1
zupt_noise_multiplier: 10
zupt_max_disparity: 0.5 # set to 0 for only imu-based
zupt_only_at_beginning: false

# ==================================================================
# ==================================================================

init_window_time: 2.0 # how many seconds to collect initialization information
init_imu_thresh: 1.5 # threshold for variance of the accelerometer to detect a "jerk" in motion
init_max_disparity: 10.0 # max disparity to consider the platform stationary (dependent on resolution)
init_max_features: 50 # how many features to track during initialization (saves on computation)

init_dyn_use: false # if dynamic initialization should be used
init_dyn_mle_opt_calib: false # if we should optimize calibration during intialization (not recommended)
init_dyn_mle_max_iter: 50 # how many iterations the MLE refinement should use (zero to skip the MLE)
init_dyn_mle_max_time: 0.05 # how many seconds the MLE should be completed in
init_dyn_mle_max_threads: 6 # how many threads the MLE should use
init_dyn_num_pose: 6 # number of poses to use within our window time (evenly spaced)
init_dyn_min_deg: 10.0 # orientation change needed to try to init

init_dyn_inflation_ori: 10 # what to inflate the recovered q_GtoI covariance by
init_dyn_inflation_vel: 100 # what to inflate the recovered v_IinG covariance by
init_dyn_inflation_bg: 10 # what to inflate the recovered bias_g covariance by
init_dyn_inflation_ba: 100 # what to inflate the recovered bias_a covariance by
init_dyn_min_rec_cond: 1e-12 # reciprocal condition number thresh for info inversion

init_dyn_bias_g: [ 0.0, 0.0, 0.0 ] # initial gyroscope bias guess
init_dyn_bias_a: [ 0.0, 0.0, 0.0 ] # initial accelerometer bias guess

# ==================================================================
# ==================================================================

record_timing_information: false # if we want to record timing information of the method
record_timing_filepath: "/tmp/traj_timing.txt" # https://docs.openvins.com/eval-timing.html#eval-ov-timing-flame

# if we want to save the simulation state and its diagional covariance
# use this with rosrun ov_eval error_simulation
save_total_state: false
filepath_est: "/tmp/ov_estimate.txt"
filepath_std: "/tmp/ov_estimate_std.txt"
filepath_gt: "/tmp/ov_groundtruth.txt"

# ==================================================================
# ==================================================================

# our front-end feature tracking parameters
# we have a KLT and descriptor based (KLT is better implemented...)
use_klt: true # if true we will use KLT, otherwise use a ORB descriptor + robust matching
num_pts: 200 # number of points (per camera) we will extract and try to track
fast_threshold: 20 # threshold for fast extraction (warning: lower threshs can be expensive)
grid_x: 5 # extraction sub-grid count for horizontal direction (uniform tracking)
grid_y: 5 # extraction sub-grid count for vertical direction (uniform tracking)
min_px_dist: 10 # distance between features (features near each other provide less information)
knn_ratio: 0.70 # descriptor knn threshold for the top two descriptor matches
track_frequency: 21.0 # frequency we will perform feature tracking at (in frames per second / hertz)
downsample_cameras: false # will downsample image in half if true
num_opencv_threads: 4 # -1: auto, 0-1: serial, >1: number of threads
histogram_method: "HISTOGRAM" # NONE, HISTOGRAM, CLAHE

# aruco tag tracker for the system
# DICT_6X6_1000 from https://chev.me/arucogen/
use_aruco: false
num_aruco: 1024
downsize_aruco: true

# ==================================================================
# ==================================================================

# camera noises and chi-squared threshold multipliers
up_msckf_sigma_px: 1
up_msckf_chi2_multipler: 1
up_slam_sigma_px: 1
up_slam_chi2_multipler: 1
up_aruco_sigma_px: 1
up_aruco_chi2_multipler: 1

# masks for our images
use_mask: false

# imu and camera spacial-temporal
# imu config should also have the correct noise values
relative_config_imu: "kalibr_imu_chain.yaml"
relative_config_imucam: "kalibr_imucam_chain.yaml"
  • kalibr_imu_chain.yaml
%YAML:1.0

imu0:
  T_i_b:
    - [1.0, 0.0, 0.0, 0.0]
    - [0.0, 1.0, 0.0, 0.0]
    - [0.0, 0.0, 1.0, 0.0]
    - [0.0, 0.0, 0.0, 1.0]
  accelerometer_noise_density: 0.02229489595390929  # [ m / s^2 / sqrt(Hz) ]   ( accel "white noise" )
  accelerometer_random_walk: 0.0001785433950802699  # [ m / s^3 / sqrt(Hz) ].  ( accel bias diffusion )
  gyroscope_noise_density: 0.001145986736669183     # [ rad / s / sqrt(Hz) ]   ( gyro "white noise" )
  gyroscope_random_walk: 1.2431490829218913e-05     # [ rad / s^2 / sqrt(Hz) ] ( gyro bias diffusion ) 
  rostopic: /imu/data
  time_offset: 0.0
  update_rate: 344.0
  # three different modes supported:
  # "calibrated" (same as "kalibr"), "kalibr", "rpng"
  model: "kalibr"
  # how to get from Kalibr imu.yaml result file:
  #   - Tw is imu0:gyroscopes:M:
  #   - R_IMUtoGYRO: is imu0:gyroscopes:C_gyro_i:
  #   - Ta is imu0:accelerometers:M:
  #   - R_IMUtoACC not used by Kalibr
  #   - Tg is imu0:gyroscopes:A:
  Tw:
    - [ 1.0, 0.0, 0.0 ]
    - [ 0.0, 1.0, 0.0 ]
    - [ 0.0, 0.0, 1.0 ]
  R_IMUtoGYRO:
    - [ 1.0, 0.0, 0.0 ]
    - [ 0.0, 1.0, 0.0 ]
    - [ 0.0, 0.0, 1.0 ]
  Ta:
    - [ 1.0, 0.0, 0.0 ]
    - [ 0.0, 1.0, 0.0 ]
    - [ 0.0, 0.0, 1.0 ]
  R_IMUtoACC:
    - [ 1.0, 0.0, 0.0 ]
    - [ 0.0, 1.0, 0.0 ]
    - [ 0.0, 0.0, 1.0 ]
  Tg:
    - [ 0.0, 0.0, 0.0 ]
    - [ 0.0, 0.0, 0.0 ]
    - [ 0.0, 0.0, 0.0 ]
  • kalibr_imucam_chain.yaml
%YAML:1.0
cam0:
  T_cam_imu:
    - [-0.9999730211612913, 0.0011654864078604154, 0.007252488606936615, 0.05855576022314668]
    - [0.0011859186262073965, 0.9999953385940187, 0.002813607514727948, 0.002858928245212033]
    - [-0.00724917557882737, 0.0028221324681899397, -0.9999697420531085, -0.005490310834812385]
    - [0.0, 0.0, 0.0, 1.0]
  cam_overlaps: [1]
  camera_model: pinhole
  distortion_coeffs: [-0.029225109913193572, 0.02082403492287568, -0.03194158971070967, 0.0165934134408496]
  distortion_model: equidistant
  intrinsics: [497.81111262347383, 497.8055103598601, 396.48820025924294, 463.4451903675188]
  resolution: [816, 960]
  rostopic: /left_camera/image_raw
  timeshift_cam_imu: 0.005901386399303203
cam1:
  T_cam_imu:
    - [-0.9999845146989352, 0.004550487081340542, 0.003203658792316898, -0.010601870574768642]
    - [0.0045684145407885015, 0.9999738226044781, 0.005611033271290525, 0.002251517696825047]
    - [-0.0031780419944595945, 0.00562558202416158, -0.9999791262201281, -0.005008993420470941]
    - [0.0, 0.0, 0.0, 1.0]
  T_cn_cnm1:
    - [0.9999860743077356, 0.0033735794462250975, 0.004058343544320085, -0.06914417862245166]
    - [-0.003362141436934531, 0.9999903663337931, -0.0028219221399547337, -0.00042600348830910853]
    - [-0.0040678244261232255, 0.0028082381177397444, 0.9999877832269312, 0.0007114163409117424]
    - [0.0, 0.0, 0.0, 1.0]
  cam_overlaps: [0]
  camera_model: pinhole
  distortion_coeffs: [-0.028463396839828604, 0.012205852066252196, -0.01306188175421103, 0.001536051968099967]
  distortion_model: equidistant
  intrinsics: [494.7591785888601, 494.9156071869387, 384.67971500453064, 488.34269230328925]
  resolution: [816, 960]
  rostopic: /right_camera/image_raw
  timeshift_cam_imu: 0.00591541095880247

6.3. 启动OpenVINS

  • 开启3个终端,分别执行
# 启动openvins
roslaunch ov_msckf subscribe.launch config:=drobotics_stereo_imu_cam verbosity:=DEBUG \
dosave:=true path_est:=~/openvins_traj.txt
# 启动rviz
rosrun rviz rviz -d <OpenVINS目录>/open_vins/ov_msckf/launch/display.rviz
# 播放采集的rosbag数据
rosbag play xxx_ros1.bag

在这里插入图片描述

地瓜机器人RDK X5传感器数据采集全攻略:IMU数据读取与可视化实战 本文详细介绍了地瓜机器人RDK X5开发板的IMU传感器数据采集与可视化实战。从硬件架构、开发环境配置到数据采集、处理与可视化,提供了完整的操作指南和Python代码示例,帮助开发者快速掌握RDK X5的IMU数据应用技术。 阅读详情

相关推荐

地瓜派RDK X5部署YOLOv11n避坑指南:从Softmax瓶颈到BPU加速的量化实战

本文详细介绍了在地瓜派RDK X5开发板上部署YOLOv11n模型的避坑指南,重点解决了Softmax瓶颈导致的性能问题。通过优化量化配置和强制BPU加速,成功将FPS从7提升至47,大幅提升性能表现。文章包含完整的工具链配置、量化实战步骤和性能验证方法,为边缘AI部署提供实用参考。

weixin_42524226的博客 577

双目相机 -- IMU联合标定

安装依赖 sudo apt-get install python-setuptools python-rosinstall ipython libeigen3-dev libboost-all-dev doxygen libopencv-dev sudo apt-get install libopencv-dev ros-melodic-vision-opencv ros-melodic-image-transport-plugins ros-melodic-cmake-modules software-

~勿据散客~的博客 6742

地瓜派RDK X5部署YOLOv11n避坑指南:从Softmax瓶颈到BPU加速的实战解析

本文详细解析了在地瓜派RDK X5开发板上部署YOLOv11n模型时,从性能暴跌到成功优化的全过程。核心在于通过配置`node_info`将模型中的Softmax算子强制在BPU上以int16精度运行,解决了因算子被分配到CPU导致的严重性能瓶颈。实战部署后,模型推理延迟从126ms降至10.8ms,FPS从7.9提升至92.3,实现了显著的性能优化。

beta5的博客 865

[具身智能-607]:RDK X5 两路 MIPI CSI 相机同步完整方案

帧曝光同步误差:双目同时开始感光的时间差(双目 SLAM 要求<100μs,工业高精度<10μs)帧输出时间戳误差:图像传到内存的时间差全局快门相机:同步难度低;卷帘快门相机必须硬件同步否则运动视差严重。

文火冰糖(王文兵)的博客 207

摄像头与imu之间的坐标系转换

最近由于实习需要在玩orb slam,然后想在摄像头上安装一个imu来辅助测量。在把imu贴在摄像头后面之后,一个问题出现了:摄像头的坐标系与imu的坐标系不会对得很准,即它们的坐标很难人工对准。要让它们的坐标轴都重合,需要一个转换。 上图中, C1:摄像头从初始状态(即单位阵I,这个单位阵是指摄像头开机的时候当做起始状态)到T1时刻的转换为C1; C2:摄像头从初始状态

1万+

具身智能(15):地瓜双目深度估计算法综合介绍及部署

摘要:地瓜双目深度估计算法(hobot_stereonet)是基于改进IGEV架构的实时视觉深度估计方案,专为机器人边缘计算设计。该算法融合GRU提升时序一致性,支持15-30Hz实时输出深度图和点云,相比传统双目算法具有更强的环境适应性。部署需RDK开发板与双目相机,通过参数调优可平衡精度与速度(如调整分辨率640×480、置信度阈值0.1)。算法输出可直接对接MoveIt!实现动态避障,配合YOLOv8可构建多模态感知系统。典型应用场景下,该方案能以较低硬件成本实现厘米级深度精度,满足机器人实时避障需求

码农17年的博客 145

地瓜派RDK X5部署YOLOv11n完整实战:从7 FPS到47 FPS的性能优化之路

本文详细记录了在RDKX5开发板上部署YOLOv11n模型的全过程。初始部署遭遇性能瓶颈(仅7.67FPS),通过分析发现Softmax算子被分配到CPU运行是主要问题。经过环境搭建、模型优化(修改输出头、int16量化Softmax)、性能调优等步骤,最终实现47FPS的实时检测性能。关键突破包括:1)通过node_info配置将Softmax指定到BPU运行;2)修改Ultralytics输出头为6个tensor;3)使用NV12格式输入减少预处理耗时。文章提供了完整的代码实现、量化配置和故障排查指南,

hueuyang的博客 2413

Facebook登录协议逆向实战:从加密参数到完整流程解析(附Python代码)

本文深入解析Facebook登录协议的逆向工程,重点拆解`lgndim`和`encpass`等加密参数的生成逻辑,并提供完整的Python实现代码。通过Base64解码和RSA加密技术,帮助开发者理解并实现Facebook登录流程,同时涵盖工程优化与安全实践。

weixin_30687051的博客 478

RDK S100P的种种----yolov11量化模型在地瓜派上量化部署

本文详细介绍了YOLOv11模型在地瓜派RDK S100P开发板上的量化部署过程。文章首先提供了相关参考资料和官方示例,然后详细说明了环境部署建议。重点阐述了YOLOv11模型转换ONNX格式的方法,以及使用hb_compile工具进行BPU算子检测的关键步骤。特别指出了YOLOv11中C2PSA算子可能导致的BPU兼容性问题,并分析了该模块的结构特性。文章为在边缘设备上部署最新YOLO模型提供了实用指导,包含完整的代码示例和问题解决方案。

Ziyou_rufeng的博客 1382

一本集成电路静态时序设计经典之作(可下载)

本书全面深入探讨集成电路设计中关键技术的专著,涵盖了从基础知识到高级应用的各个方面。本书详细介绍了集成电路的发展历程、**静态时序分析的重要性、基本时序模型、时序信息库文件的构建、时序约束的设置、串扰噪声的影响及其控制方法**,并通过实战案例展示了如何进行有效的时序分析和优化。

nuoweishizi的博客 852

半导体制造技术导论(第二版)萧宏 第五章集成电路加热工艺答案

第二次退火是在较高温度下进行,并将电阻系数较高的c49碳化硅转变为电阻系数较低的c54碳。水平式高温炉加热、垂直式高温炉加热(即传统的管式炉加热)、快速加热工艺RTP、激光镭射。8. 集成电路芯片制造过程中,会使用垫底氧化层、阻挡氧化层、栅氧氧化层、屏蔽氧化层和全。氧化是最重要的加热过程之一,是一种添加工艺,将氧气加入到硅晶圆后,在晶圆表面形成二氧。为了满足元器件性能的要求,必须利用退火工艺将晶格的损伤修复,使其恢复单晶结构并激活掺。工艺氮气气流下将晶舟推入炉管,升高温度,稳定温度;

goal_achieving的博客 1864

[具身智能-661]:瑞芯微(Rockchip)VS 地瓜机器人(D-Robotics,RDK 系列)完整对比

瑞芯微生态 = “通用嵌入式大卖场”硬件很多、方案五花八门,适合自由定制;RDK 生态 = “机器人专项产业园”软硬件标准统一,专门给移动机器人开发者提供成套参考,上手机器人项目更快。

文火冰糖(王文兵)的博客 313

【一文搞懂几种常用推荐算法】

协同过滤:适合用户-物品交互数据丰富的场景。矩阵分解:能处理稀疏数据,适合显式评分预测。基于内容:依赖物品特征,解决冷启动问题。NMF:适用于非负数据(如点击率、购买记录)。根据实际需求选择算法,或结合多种方法构建混合推荐系统。

专注技术的博主 2638

双目视觉与视觉惯性 SLAM 讨论总结

σ2Ex−μ2σ2E[(x−μ2标准差 (\sigma) 表示典型误差尺度,方差 (\sigma^2) 是卡尔曼滤波公式中常用的量。Pσx2cov⁡xy⋯cov⁡yxσy2⋯⋮⋮⋱P​σx2​covyx⋮​covxyσy2​⋮​⋯⋯⋱​​对角线表示各状态变量自身的方差;非对角线表示不同状态误差之间的相关性。

dejahu的博客 247

【数据分析生命周期全揭秘】从零开始打造你的数据科学项目 | 最全指南

在当今数据驱动的世界中,数据科学正在颠覆传统行业,成为企业决策和价值创造的重要引擎。然而,如何科学、系统地开展一个数据分析项目?这是很多人关心的核心问题。本篇文章基于经典数据分析课程内容,深入解读数据分析生命周期的每个阶段,让你快速掌握从“发现问题”到“落地应用”的完整流程。如果你正在学习或准备从事数据分析领域,这篇文章一定会对你大有帮助!数据分析生命周期的六大阶段数据分析生命周期的六个阶段相辅相成,每个阶段都至关重要:发现问题:明确需求,提出假设。数据准备:清洗、转换和可视化数据。

AI手套的博客 1741

【ROS】Nav2源码之nav2_collision_monitor(碰撞监测)详解

nav2_collision_monitor碰撞监视器是一个节点,为机器人提供了一个额外的安全级别。它使用来自传感器的数据,执行若干与避免碰撞相关的任务,绕过成本图和轨迹规划器,监测是否需要紧急停止或者减速。

郭老二 1457

高翔博士SLAM硬件体验:INDEMIND双目IMU相机

本文转自高翔博士知乎专栏文章《SLAM硬件体验-INDEMIND双目IMU相机》 很多算法问题本质上是硬件问题。” 这句话相信很多人都应该有所体验。很多时候你发现自己的算法表现不好,背后的原因其实与算法无关,比如: 传感器内外参标定不准; 各传感器的时间同步问题; 驱动程序时不时地丢数据或卡顿; 相机视野不够、曝光不稳定;** 诸如此类。所以我准备写一些SLAM相关的硬件体验,主要是指视觉SLAM...

weixin_43922139的博客 3330

热力学仿真软件:ANSYS CFX_(15).旋转机械仿真

创建旋转域在中选择需要设置为旋转域的区域。选择选项。设置旋转速度在设置中,指定旋转速度(单位为弧度/秒)。也可以选择选项,并输入具体值。设置旋转轴在设置中,指定旋转轴的方向和位置。通常旋转轴的方向可以使用单位向量来表示,例如[0, 0, 1]表示沿Z轴旋转。旋转轴的位置可以通过指定一个点的坐标来确定,例如[0, 0, 0]表示旋转轴通过原点。旋转机械的仿真在ANSYS CFX中是一个复杂但重要的过程。

kkchenjj的博客 1159

标定双目相机内参和IMU内参,以及相机到IMU的外参

1 双目相机标定 相机获取图像帧率设置为4hz,低一点方便计算。然后通过rostopic获取相机topic,再降低发布频率即可。 1.1 开启相机 Run camera mynteye_wrapper_d cd MYNT-EYE-D-SDK source wrappers/ros/devel/setup.bash roslaunch mynteye_wrapper_d display.launch...

shawfy的博客 5639

DXF转G代码是圆弧的方向如何确定?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1188

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【导航与地图】MapTR论文精读

MapTR 精读:环视→BEV→DETR 式并行解码,直接输出在线矢量化 HD 地图;置换等价点序是核心建模洞见。

Felaim的博客 340

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

光子映射与双向路径追踪:谁更胜一筹?

光子映射与双向路径追踪(BDPT)均为解决单向路径追踪在复杂光路(如焦散、小光源)下效率低的问题。光子映射采用两阶段:先从光源发射光子构建光子图,再通过密度估计收集光照,擅长焦散但有偏;BDPT则同时从相机与光源追踪路径并连接顶点,无偏且覆盖广泛光路,但噪点高、计算复杂。二者同源,均引入光源信息提升效率,现代渲染器常融合为VCM算法,结合两者优势,实现更高效准确的全局光照。

Jared_Chen的博客 264

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

康谋分享 |一文吃透激光雷达-相机联合标定:从几何原理到重卡实测闭环

外参不准,算法白搭!康谋带您详解 L-C 联合标定五步闭环,解决点云图像对不齐、孔位匹配易错等难题,附重卡实车验证效果。

hongkeaimotek的博客 340

环视同步与拼接的工程改法:从车规到机器人

重叠区的形状也要看:横向窄、纵向长的重叠,和四四方方的重叠,能提供的约束不一样,前者在俯仰变化时更脆弱。务实做法是给相机支架足够的刚性,把易变的安装点做成可重复定位的结构,再配一套快速校验手段。支架刚性也不是越硬越好,而是要在刚度、重量、成本之间取平衡:机器人末端对重量敏感,一味加厚支架会影响运动性能,这时更该把可重复定位和快速校验做扎实。动态范围的处理没有银弹。拼接错了,标定也救不回来:重叠区不足时,匹配点不够,任何算法都只能猜。相机装在哪里,要看机器人在典型任务中的姿态,而不是看它在展厅里站着的样子。

gunser的博客 222

运动相机电池采购坑②|保护板偷工减料,看着有电,一上电就炸机

本文聚焦运动相机电池很容易被忽略的保护板风险,通过真实跨境售后案例,拆解供应商保护板偷料三大主流套路:MOS 降规格、删减 NTC 温控、取消均衡电路。这类减配在静态容量测试中很难发现,只有长时间大负载、低温使用才会暴露断电、鼓包问题。文中给到采购可落地的现场核验方案:封样比对、持续负载测试、温控验证、BOM 锁定,把风控动作前置,避免大批量海外售后损失。

FLJwu的博客 448

从基础明场到荧光成像:CKX53加装LED荧光模块与高灵敏相机升级路径

做荧光成像时,建议搭配高灵敏或制冷相机,弱信号也能拍出干净图像。如果只偶尔看荧光、不要求定量拍照,先加装荧光模块、用现有相机观察也是可以的。原有的明场、iPC相差、人体工学观察体验全部保留,只是在光路中增加了荧光激发与滤块。从明场相差到荧光成像,CKX53留出的不是一个固定终点,而是一条可以按节奏走的升级路径。先把日常观察做扎实,需要荧光时再模块化扩展,这是很多细胞实验室的实际成长方式。上加装LED荧光模块和合适的相机,就能把设备升级成荧光观察平台。·先相差对焦,再切荧光,避免在暗视野里找细胞。

Laite_tech的博客 208
上一篇: 地瓜派开发记录1-熟悉板子
下一篇: 双目视觉与视觉惯性 SLAM 讨论总结
肆十二
肆十二 优质创作者: 人工智能技术领域 优质创作者: 人工智能技术领域
博客等级 码龄9年 2万+粉丝 241原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肆十二

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值