【SLAM】在ORB_SLAM2的ROS模式下使用RealSense D435相机
本文介绍了如何在ORB_SLAM2项目中使用RealSense D435相机作为RGB-D输入源,包括ROS下启动D435相机、ORB_SLAM2订阅Topic、ORB_SLAM2读取realsense-viewer录制的rosbag文件等步骤。。
本文首发于❄慕雪的寒舍
1. 前言
先前已经编写了如何用TUM数据集运行ORB_SLAM3以及如何在ROS模式下运行ORB_SLAM3的博客,ORB_SLAM3是基于ORB_SLAM2的,甚至代码仓库中还有遗留的ORB_SLAM2命名空间namespace没有修正,二者不管是用TUM RGB-D数据集直接运行还是在ROS模式下运行的命令都完全一致。所以,在阅读本文之前,先参考上面给出的两篇博客,安装ORB_SLAM2的依赖库和ROS环境。
注意:若想在ROS模式下运行ORB_SLAM2,则一定要安装OpenCV 3.2.0版本,否则会因为系统中存在多个不同版本的OpenCV从而导致动态库链接错误!
RealSense D435在Ubuntu 18.04中realsense驱动安装的步骤也在【SLAM】ubuntu 18.04 安装 RealSense D435 相机驱动(ARM64/AMD64)一文里面介绍过了,继续阅读本文之前,需要先把D435的驱动搞定。
测试使用的操作系统为 Ubuntu 18.04 LTS,平台为AMD64。
2. 运行步骤
2.1. 编译ORB_SLAM2
阅读到这里,就默认你已经根据上面给出的参考博客把相关依赖项、ROS环境和realsense驱动都已经安装完毕了,这里给出ORB_SLAM2的编译步骤,和ORB_SLAM3也是如出一辙的。
git clone https://github.com/raulmur/ORB_SLAM2.gitcd ORB_SLAM2
chmod +x build.sh
./build.sh
注意,编译之前需要先修改build.sh脚本,把所有make -j
修改成make -j4
,避免make编译的时候无止尽地吃掉所有系统资源,这个在ORB_SLAM3的博客中也提到过。
make命令
-j
选项后面跟着的数字是编译使用的线程数量,建议改成linux系统cpu线程数量的一半或者2/3,避免吃光所有系统资源。选项-j
后面不跟数字的时候,编译项目时会无止尽地吃掉所有系统内存和CPU,直到被操作系统KILL掉,编译失败(在我的测试环境中是这个现象)。
编译完毕普通版本后,再编译ROS版本,同样需要把build_ros.sh
脚本里面的make -j
改成make -j4
。
chmod +x ./build_ros.sh
./build_ros.sh
如果你的依赖项环境一切正常,这两个脚本无需任何额外操作即可编译成功。
2.2. ROS下启动D435相机
参考博客:
- 基于深度相机 RealSense D435i 的 ORB SLAM 2 - 简书;
- github.com/IntelRealSense/realsense-ros;
使用如下命令安装D435的ROS驱动
sudo apt-get install -y ros-melodic-rgbd-launch \ros-melodic-realsense2-camera \ros-melodic-realsense2-description
安装完毕驱动后,系统中会多出realsense相机的ROS启动文件,可以使用roscd realsense2_camera
命令进入apt安装的ros realsense的工作空间,这里就有各种launch文件。
我们需要的是rs_rgbd.launch
这个启动文件,以RGB-D模式启动我们的D435相机。
king@ubuntu:~/slam$ roscd realsense2_camera
king@ubuntu:/opt/ros/melodic/share/realsense2_camera$ ls
cmake launch msg nodelet_plugins.xml package.xml rviz srv
king@ubuntu:/opt/ros/melodic/share/realsense2_camera$ ls launch/
demo_pointcloud.launch rs_aligned_depth.launch rs_from_file.launch rs_t265.launch
demo_t265.launch rs_camera.launch rs_multiple_devices.launch
includes rs_d400_and_t265.launch rs_rgbd.launch
opensource_tracking.launch rs_d435_camera_with_model.launch rs_rtabmap.launch
注意检查一下rs_rgbd.launch
启动文件中的下面这两个选项是否为true,如果不是,需要修改为true。
<arg name="enable_sync" default="true"/><arg name="align_depth" default="true"/>
这两个参数的前者是让不同传感器数据(Depth, RGB, IMU)实现时间同步,即具有相同的 timestamp;后者会增加若干 rostopic,其中我们比较关心的是 /camera/aligned_depth_to_color/image_raw
这个主题,对应D435相机的深度图像数据。
确认启动文件配置无误后,用下面的roslaunch命令就可以启动D435相机了。执行启动命令之前,需要先在另外一个终端执行roscore命令。
roslaunch realsense2_camera rs_rgbd.launch
命令执行结果如下
使用rostopic list
能看到D435相机发布的topic列表,如下所示。
[root:/]# rostopic list
/camera/align_to_color/parameter_descriptions
/camera/align_to_color/parameter_updates
/camera/aligned_depth_to_color/camera_info
/camera/aligned_depth_to_color/image_raw
/camera/aligned_depth_to_color/image_raw/compressed
/camera/aligned_depth_to_color/image_raw/compressed/parameter_descriptions
/camera/aligned_depth_to_color/image_raw/compressed/parameter_updates
/camera/aligned_depth_to_color/image_raw/compressedDepth
/camera/aligned_depth_to_color/image_raw/compressedDepth/parameter_descriptions
/camera/aligned_depth_to_color/image_raw/compressedDepth/parameter_updates
/camera/aligned_depth_to_color/image_raw/theora
/camera/aligned_depth_to_color/image_raw/theora/parameter_descriptions
/camera/aligned_depth_to_color/image_raw/theora/parameter_updates
/camera/color/camera_info
/camera/color/image_raw
/camera/color/image_raw/compressed
/camera/color/image_raw/compressed/parameter_descriptions
/camera/color/image_raw/compressed/parameter_updates
/camera/color/image_raw/compressedDepth
/camera/color/image_raw/compressedDepth/parameter_descriptions
/camera/color/image_raw/compressedDepth/parameter_updates
/camera/color/image_raw/theora
/camera/color/image_raw/theora/parameter_descriptions
/camera/color/image_raw/theora/parameter_updates
/camera/color/image_rect_color
/camera/color/image_rect_color/compressed
/camera/color/image_rect_color/compressed/parameter_descriptions
/camera/color/image_rect_color/compressed/parameter_updates
/camera/color/image_rect_color/compressedDepth
/camera/color/image_rect_color/compressedDepth/parameter_descriptions
/camera/color/image_rect_color/compressedDepth/parameter_updates
/camera/color/image_rect_color/theora
/camera/color/image_rect_color/theora/parameter_descriptions
/camera/color/image_rect_color/theora/parameter_updates
/camera/color/metadata
/camera/color_rectify_color/parameter_descriptions
/camera/color_rectify_color/parameter_updates
/camera/depth/camera_info
/camera/depth/image_rect_raw
/camera/depth/image_rect_raw/compressed
/camera/depth/image_rect_raw/compressed/parameter_descriptions
/camera/depth/image_rect_raw/compressed/parameter_updates
/camera/depth/image_rect_raw/compressedDepth
/camera/depth/image_rect_raw/compressedDepth/parameter_descriptions
/camera/depth/image_rect_raw/compressedDepth/parameter_updates
/camera/depth/image_rect_raw/theora
/camera/depth/image_rect_raw/theora/parameter_descriptions
/camera/depth/image_rect_raw/theora/parameter_updates
/camera/depth/metadata
/camera/depth_registered/points
/camera/extrinsics/depth_to_color
/camera/realsense2_camera_manager/bond
/camera/rgb_camera/parameter_descriptions
/camera/rgb_camera/parameter_updates
/camera/stereo_module/parameter_descriptions
/camera/stereo_module/parameter_updates
/diagnostics
/rosout
/rosout_agg
/tf
/tf_static
[root:/]#
其中我们需要的是/camera/color/image_raw
和 /camera/aligned_depth_to_color/image_raw
这两个topic,分别对应 RGB 图像和深度图像数据流。
2.3. ORB_SLAM2在ROS下订阅D435发布的topic
接下来需要创建一个相机内参文件(类似Examples/RGB-D/TUM1.yaml
),填写D435相机的内外参数。内外参数最好的获取方式是通过ROS的camera_calibration工具,需要打印一个棋盘格标定板对D435相机进行标定。
本文不介绍如何标定D435相机,直接使用D435相机发布的相机信息的/camera/color/camera_info
主题,通过如下命令获取D435相机的内外参数,
rostopic echo /camera/color/camera_info
该命令的输出结果如下所示
---
header: seq: 8477stamp: secs: 1740896373nsecs: 113253355frame_id: "camera_color_optical_frame"
height: 480
width: 640
distortion_model: "plumb_bob"
D: [0.0, 0.0, 0.0, 0.0, 0.0]
K: [605.8230590820312, 0.0, 323.6572570800781, 0.0, 604.4893798828125, 242.0369110107422, 0.0, 0.0, 1.0]
R: [1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]
P: [605.8230590820312, 0.0, 323.6572570800781, 0.0, 0.0, 604.4893798828125, 242.0369110107422, 0.0, 0.0, 0.0, 1.0, 0.0]
binning_x: 0
binning_y: 0
roi: x_offset: 0y_offset: 0height: 0width: 0do_rectify: False
---
这个输出中:
K
是 相机内参矩阵(fx
,fy
,cx
,cy
)D
是 畸变系数(ORB_SLAM2 只用前 4 个k1, k2, p1, p2
)width
和height
是相机拍摄的图像分辨率;
Camera.bf的计算公式如下,其中baseline是D435两颗摄像头之间的间距,官方的参数是50mm,将其和fx相乘就能得到bf。
b f = b a s e l i n e × f x = 0.05 × 605.8230590820312 ≈ 30.29 bf=baseline×fx=0.05×605.8230590820312≈30.29 bf=baseline×fx=0.05×605.8230590820312≈30.29
收集了这些数据后,参考ORB_SLAM2代码仓库中的Examples/ROS/ORB_SLAM2/Asus.yaml
文件,把上述命令的结果中的参数写到文件Examples/RGB-D/RealSenseD435.yaml
中。
最终我依照上述命令结果制作了如下yaml文件,每一个参数都取值都用注释标注出来了,没有中文注释的部分保持不变,不用修改。
%YAML:1.0
#--------------------------------------------------------------------------------------------
# 通过`rostopic echo /camera/color/camera_info`获取并编写
#--------------------------------------------------------------------------------------------# 相机内参 Camera Parameters
Camera.fx: 605.8230590820312 # K[0]
Camera.fy: 604.4893798828125 # K[4]
Camera.cx: 323.6572570800781 # K[2]
Camera.cy: 242.0369110107422 # K[5]# 畸变参数 (D)
Camera.k1: 0.0 # D[0]
Camera.k2: 0.0 # D[1]
Camera.p1: 0.0 # D[2]
Camera.p2: 0.0 # D[3]
Camera.k3: 0.0 # D[4]# 图像分辨率
Camera.width:640
Camera.height:480# Camera frames per second 相机帧数
Camera.fps:30.0# IR projector baseline times fx (aprox.)
# bf = baseline × fx = 0.05 × 605.8230590820312 ≈ 30.29
# baseline是d435两个摄像头的基线距离,为50mm
Camera.bf:30.29# Color order of the images (0: BGR, 1: RGB. It is ignored if images are grayscale)
Camera.RGB:1# Close/Far threshold. Baseline times.
ThDepth:40.0# Deptmap values factor,将深度像素值转化为实际距离,原来单位是mm,转化成m
DepthMapFactor:1000.0# 下面这部分都不需要修改,直接从Asus.yaml复制过来
#--------------------------------------------------------------------------------------------
# ORB Parameters
#--------------------------------------------------------------------------------------------# ORB Extractor: Number of features per image
ORBextractor.nFeatures: 1000# ORB Extractor: Scale factor between levels in the scale pyramid
ORBextractor.scaleFactor: 1.2# ORB Extractor: Number of levels in the scale pyramid
ORBextractor.nLevels: 8# ORB Extractor: Fast threshold
# Image is divided in a grid. At each cell FAST are extracted imposing a minimum response.
# Firstly we impose iniThFAST. If no corners are detected we impose a lower value minThFAST
# You can lower these values if your images have low contrast
ORBextractor.iniThFAST: 20
ORBextractor.minThFAST: 7#--------------------------------------------------------------------------------------------
# Viewer Parameters
#--------------------------------------------------------------------------------------------
Viewer.KeyFrameSize: 0.05
Viewer.KeyFrameLineWidth: 1
Viewer.GraphLineWidth: 0.9
Viewer.PointSize:2
Viewer.CameraSize: 0.08
Viewer.CameraLineWidth: 3
Viewer.ViewpointX: 0
Viewer.ViewpointY: -0.7
Viewer.ViewpointZ: -1.8
Viewer.ViewpointF: 500
2.4. 运行ORB_SLAM2
相机参数文件准备好之后,就可以启动ORB_SLAM2了,先执行export命令设置一下ROS的环境变量
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$PWD/Examples/ROS/ORB_SLAM2
启动命令如下,这里指定了我们刚刚自己制作的yaml文件,然后指定了两个topic的绑定
rosrun ORB_SLAM2 RGBD \Vocabulary/ORBvoc.txt \Examples/RGB-D/RealSenseD435.yaml \/camera/rgb/image_raw:=/camera/color/image_raw \/camera/depth_registered/image_raw:=/camera/aligned_depth_to_color/image_raw
命令中:=
左侧为订阅的topic,右侧为输入的topic,ORB_SLAM2订阅的topic可以在Examples/ROS/ORB_SLAM2/src/ros_rgbd.cc
代码里面找到
message_filters::Subscriber<sensor_msgs::Image> rgb_sub(nh, "/camera/rgb/image_raw", 1);message_filters::Subscriber<sensor_msgs::Image> depth_sub(nh, "camera/depth_registered/image_raw", 1);
一切正常的话,应该已经可以在ORB_SLAM2的GUI中看到D435相机拍摄到的画面了。
缓慢移动D435相机,可以在GUI中观察SLAM的追踪和建图结果。注意必须缓慢移动相机,过快移动相机会导致ORB_SLAM2直接丢跟踪(tracking lost)。
至此,在ORB_SLAM2中通过ROS使用D435相机的全步骤结束。
2.5. 可能遇到的问题
roslaunch启动D435相机的时候可能会直接报错,如下所示
king@ubuntu:/opt/ros/melodic/share/realsense2_camera$ roslaunch realsense2_camera rs_rgbd.launch
... logging to /home/king/.ros/log/292703ba-f72c-11ef-a6ca-000c29839929/roslaunch-ubuntu-11850.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.Resource not found: rgbd_launch
ROS path [0]=/opt/ros/melodic/share/ros
ROS path [1]=/opt/ros/melodic/share
The traceback for the exception was written to the log file
这个问题是因为缺少安装一个ros的包,安装了之后就OK了,可以正常执行roslaunch命令了。
sudo apt-get install -y ros-melodic-rgbd-launch
前文的D435 ROS驱动安装命令中已经包含了这个软件包了。
3. ORB_SLAM2读取realsense-viewer录制的rosbag文件
D435相机的realsense-viewer软件是可以直接提前录制视频成rosbag格式的.bag
文件的,这样能方便我们用同一个数据集测试SLAM系统,并以此改进SLAM算法。本质上和TUM数据集提供的rosbag格式文件没有什么区别。
在realsense-viewer中同时开启深度相机和RGB相机,点击record录制视频后,默认会存放在~/Documents
文件夹下,找到录制的bag文件,使用rostopic -b 文件名
的方式查看录制的bag文件中的topic列表,需要找到下面这两个主题,分别对应深度数据和彩色数据
/device_0/sensor_1/Color_0/image/data
/device_0/sensor_0/Depth_0/image/data
修改ORB_SLAM2的启动命令如下,主要是订阅的主题不同。
rosrun ORB_SLAM2 RGBD \Vocabulary/ORBvoc.txt \Examples/RGB-D/RealSenseD435.yaml \/camera/rgb/image_raw:=/device_0/sensor_1/Color_0/image/data \/camera/depth_registered/image_raw:=/device_0/sensor_0/Depth_0/image/data
启动之后,使用rosplay发布bag文件中的topic即可,注意修改命令中的exmaple.bag
为你录制的bag文件的路径
rosbag play exmaple.bag \--topics \/device_0/sensor_1/Color_0/image/data \/device_0/sensor_0/Depth_0/image/data
如图所示,ORB_SLAM2同样可以读取D435提前录制的视频。
4. The end
关于ORB_SLAM2和SLAM的专题博客到这里就基本结束啦,能记录的点都已经写成博客了,后续如果有其他的再继续更新吧。主要是希望能帮到其他SLAM初学者学会咋运行ORB_SLAM2。
为了毕设临时学了这么多东西,挺累人的说实话。
相关文章:
【SLAM】在ORB_SLAM2的ROS模式下使用RealSense D435相机
本文介绍了如何在ORB_SLAM2项目中使用RealSense D435相机作为RGB-D输入源,包括ROS下启动D435相机、ORB_SLAM2订阅Topic、ORB_SLAM2读取realsense-viewer录制的rosbag文件等步骤。。 本文首发于❄慕雪的寒舍 1. 前言 先前已经编写了如何用TUM数据集运行ORB_SLAM3以及…...
scapy使用
https://scapy.readthedocs.io/en/latest/introduction.html 在 Mac 上使用 Scapy 抓取特定 IP 的流量并保存到 a.pcap 的步骤如下: 步骤 1:安装 Scapy 在终端中执行以下命令安装: pip install scapy步骤 2:创建 Python 脚本 …...
C2000 系统控制(4) — CPU Memory
CPU 内存 内存控制器 在 C2000 实时微控制器上,RAM 具有不同的特性。这些特性包括: CPU 专用:M0、M1 RAMCPU 和 CLA 共享:LSx RAMCPU、DMA 和 HIC 共享:GSx RAM用于在处理器之间发送和接收消息:MSG RAM …...
Linux网络编程——详解网络层IP协议、网段划分、路由
目录 一、前言 二、IP协议的认识 1、什么是IP协议? 2、IP协议报头 三、网段划分 1、初步认识IP与路由 2、IP地址 I、DHCP动态主机配置协议 3、IP地址的划分 I、CIDR设计 II、子网数目的计算 III、子网掩码的确定 四、特殊的IP地址 五、IP地址的数量限…...
解析医疗器械三大文档:DHF、DMR与DHR
医疗器械的 DHF、DMR 和 DHR 是质量管理体系(QMS)中的核心文件,贯穿产品全生命周期, 确保医疗器械的安全性、有效性和合规性。 一、三大文件的定义与法规依据 缩写全称法规依据(以 FDA 为例)核心目的DHF…...
SQL 全文检索原理
全文检索(Full-Text Search)是SQL中用于高效搜索文本数据的技术,与传统的LIKE操作或简单字符串比较相比,它能提供更强大、更灵活的文本搜索能力。 基本概念 全文检索的核心思想是将文本内容分解为可索引的单元(通常是词或词组),然后建立倒排…...
基于Rosen梯度投影法的约束优化问题求解及MATLAB实现
摘要 在工程优化、经济建模等领域,约束优化问题普遍存在,其核心是在满足线性或非线性约束条件下求解目标函数的极值。本文聚焦Rosen梯度投影法,系统阐述其算法原理、实现步骤及MATLAB编程方法。 关键词:Rosen梯度投影法…...
Model Context Protocol (MCP) - 尝试创建和测试一下MCP Server
1.简单介绍 MCP是Model Context Protocol的缩写,是Anthropic开源的一个标准协议。MCP使得大语言模型可以和外部的数据源,工具进行集成。当前MCP在社区逐渐地流行起来了。同时official C# SDK(仓库是csharp-sdk) 也在不断更新中,目前最新版本…...
Linux上位机开发实践(关于Qt的移植)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 linux平台上面,很多界面应用,都是基于qt开发的。不管是x86平台,还是arm平台,qt使用的地方都比较多。…...
Node.js 项目 用 `Docker Compose` 发布的完整流程
Node.js 项目 用 Docker Compose 发布的完整流程 ✅ 一、基本项目结构示例 以一个简单 Express 项目为例: my-node-app/ ├── app.js # 启动文件 ├── package.json ├── package-lock.json ├── Dockerfile # 构建 Node 容器 ├…...
Java基础:浅析Java中的XML文件处理
概述 XML(全称Extensible Markup Language,可扩展标记语言) .本质是一种数据的格式,可以用来存储复杂的数据结构,和数据关系 XML特点 1.XML中的“<标签名>”成为一个标签或者一个元素,一般成对出现的 2.XML…...
MCU刷写——S19(S-Record)文件格式详解及Python代码
工作之余来写写关于MCU的Bootloader刷写的相关知识,以免忘记。今天就来聊聊S19这种文件的格式,我是分享人M哥,目前从事车载控制器的软件开发及测试工作。 学习过程中如有任何疑问,可底下评论! 如果觉得文章内容在工作学习中有帮助到你,麻烦点赞收藏评论+关注走一波!感谢…...
HTML — 过渡与动画
HTML过渡与动画是提升网页交互体验的核心技术,主要通过CSS实现动态效果。 过渡 CSS过渡(Transition)介绍 适用于元素属性变化时的平滑渐变效果,如悬停变色、尺寸调整。通过定义transition-property(过渡属性…...
python【标准库】multiprocessing
文章目录 介绍多进程Process 创建子进程共享内存数据多进程通信Pool创建子进程多进程案例多进程注意事项介绍 python3.10.17版本multiprocessing 是一个多进程标准模块,使用类似于threading模块的API创建子进程,充分利用多核CPU来并行处理任务。提供本地、远程的并发,高效避…...
BANK OF CHINA(HONG KONG)网点
BANK OF CHINA(HONG KONG)网点开户 ZoneBankAddressDates东区杏花邨分行香港柴湾杏花邨东翼商场205-208号20240415: 11:15, 13:00, 11:15, 13:00, 11:15, 13:0020240412: 11:15, 13:00东区鲗鱼涌分行香港鰂鱼涌英皇道1060号柏惠苑20240412: 09:45 注意事项 到达指定分行时&am…...
基于springboot的“嗨玩旅游网站”的设计与实现(源码+数据库+文档+PPT)
基于springboot的“嗨玩旅游网站”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:springboot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 局部E-R图 系统首页界面 系统注册…...
机器学习(3)——决策树
文章目录 1. 决策树基本原理1.1. 什么是决策树?1.2. 决策树的基本构成:1.3. 核心思想 2. 决策树的构建过程2.1. 特征选择2.1.1. 信息增益(ID3)2.1.2. 基尼不纯度(CART)2.1.3. 均方误差(MSE&…...
【人脸识别中的“类内差异”和“类间差异】
核心问题:人脸识别中的“类内差异”和“类间差异” 想象你在教一个小朋友认人: 类间差异(不同人之间的区别): 目标:让小朋友能分清“爸爸”和“妈妈”。方法:指着爸爸说“这是爸爸”࿰…...
第十六届蓝桥杯 省赛C/C++ 大学B组
编程题目现在在洛谷上都可以提交了。 未完待续,写不动了。 C11 编译命令 g A.cpp -o A -Wall -lm -stdc11A. 移动距离 本题总分:5 分 问题描述 小明初始在二维平面的原点,他想前往坐标 ( 233 , 666 ) (233, 666) (233,666)。在移动过程…...
SpringBoot3.0 +GraalVM21 + Docker 打包成可执行文件
SpringBoot3.0 GraalVM21 Docker 打包成可执行文件 前言 随着时代的飞速发展,JDK 17 及以上版本开始支持通过 GraalVM 将运行在 JVM 上的 jar 包直接打包成可在操作系统上运行的原生可执行文件。这一特性能使开发者在某些场景下更加灵活地部署 Java 程序。 在云原…...
从编程范式看 “万物皆智能,万事皆自动” 愿景
从编程范式看“万物皆智能,万事皆自动”愿景 引言 在信息技术飞速发展的今天,“万物皆智能,万事皆自动”成为了众多 IT 从业者和科技爱好者心中的终极愿景。这一愿景描绘了一个所有事物都具备智能、所有事情都能自动完成的美好未来。而在实现这一愿景的征程中,面向对象编…...
Vue 项目中 package.json 文件的深度解析
Vue 项目中 package.json 文件的深度解析 在 Vue 项目中,package.json 文件是项目配置的核心,它管理着项目的依赖关系、脚本命令、版本信息等重要内容。正确理解和配置 package.json 文件,对于项目的开发、构建、测试和部署都至关重要。本文…...
解决2080Ti使用节点ComfyUI-PuLID-Flux-Enhanced中遇到的问题
使用蓝大的工作流《一键同时换头、换脸、发型、发色之双pulid技巧》 刚开始遇到的是不支持bf16的错误 根据《bf16 is only supported on A100 GPUs #33》中提到,修改pulidflux.py中的dtype 为 dtype torch.float16 后,出现新的错误,这个…...
1 程序的本质,计算机语言简史,TIOBE 指数,C 语言的独特魅力、发展历程、发行版本和应用场景
👋 嘿,各位编程探险家们!是不是一提到 C 语言,脑海中就浮现出指针乱舞、内存泄漏的恐怖画面?别怕,你并不孤单!😅 今天,你踏入了这个专为 “C 语言恐惧症” 患者打造的避…...
python格式化字符串漏洞
什么是python格式化字符串漏洞 python中,存在几种格式化字符串的方式,然而当我们使用的方式不正确的时候,即格式化的字符串能够被我们控制时,就会导致一些严重的问题,比如获取敏感信息 python常见的格式化字符串 百…...
撰写学位论文Word图表目录的自动生成
第一步:为图片和表格添加题注 选中图片或表格 右键点击需要编号的图片或表格,选择 【插入题注】(或通过菜单栏 引用 → 插入题注)。 设置题注标签 在弹窗中选择 标签(如默认有“图”“表”,若无需自定义标…...
SDC命令详解:使用相对路径访问设计对象(current_instance命令)
相关阅读 SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482 在使用get_cells等命令访问设计对象时,需要指定设计对象的名字,这个名字是一个相对路径,本文就将对此进行讨论。 相对路径 使…...
vector的应用
在平常使用c是,只使用普通数组肯定不够便捷,这时,我们就可以使用vector来使代码更加简洁 目录 1.vector的定义 2.在vector末尾增加一个元素 3.输出元素 (1)输出单个元素 (2)循环输出元素 4…...
pytorch查询字典、列表维度
输出tensor变量维度 print(a.shape)输出字典维度 for key, value in output_dict.items():if isinstance(value, torch.Tensor):print(f"{key} shape:", value.shape)输出列表维度 def get_list_dimensions(lst):# 基线条件:如果lst不是列表࿰…...
征程 6 VIO Frame 时间戳介绍
1. 时间类型 征程 6 内部的时间类型如下 Linux 系统时间是基于 arm system counter 抽象的,Linux 的基于 arm system counter 抽象了很多种时间,图中画了两种。CLOCK_MONOTONIC_RAW 是不会被时间同步调整的。 2. Frame 时间戳 从 VIO 侧获取的图像数…...
DotnetCore开源库SampleAdmin源码编译
1.报错: System.Net.Sockets.SocketException HResult0x80004005 Message由于目标计算机积极拒绝,无法连接。 SourceSystem.Net.Sockets StackTrace: 在 System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError error, C…...
QML之ScrollView(滚动视图)
ScrollView 是 Qt Quick Controls 2 中提供的可滚动视图容器,用于创建可滚动区域。以下是详细使用方法: 基本用法 qml import QtQuick 2.15 import QtQuick.Controls 2.15ScrollView {id: scrollViewwidth: 300height: 200clip: true// 背景设置&…...
FreeRTOS使任务处于就绪状态的API
在FreeRTOS中,任务的**就绪状态(Ready State)**意味着任务已准备好运行,但尚未被调度器分配CPU时间。以下是通过API使任务进入就绪状态的常见方法及其分类: 1. 恢复被挂起的任务 vTaskResume(TaskHandle_t xTaskToResume) 将被挂起(Suspended)的任务恢复为就绪状态。 示…...
第四篇:Python文件操作与异常处理
第一章:文件操作基础与核心原理 1.1 文件系统基础 文件系统是操作系统用于管理存储设备中数据的核心机制。Python通过内置的open()函数实现文件操作,支持文本文件(.txt、.csv)和二进制文件(.jpg、.dat)的…...
蓝桥杯 嵌入式 小结
一、BSP模版 1. Key 按键扫描模版,需要注意的是 key_val 。 uint8_t Key_Scan(void) {uint8_t key_val0;if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)GPIO_PIN_RESET){key_val1;}if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)GPIO_PIN_RESET){key_val2;}if(HAL_GPIO_ReadPin(…...
【音视频】SDL渲染YUV格式像素
SDL视频显示的流程 实现流程 准备视频文件 准备一个格式为yuv420p,分辨率为320x240的yuv数据,并且将视频文件放入项目构建的目录下: 初始化SDL 初始化SDL的视频模块 //初始化 SDL if(SDL_Init(SDL_INIT_VIDEO)) {fprintf( stderr, "…...
ThingsBoard3.9.1 MQTT Topic(1)
1.网关转发子设备的遥测信息, Topic:v1/gateway/telemetry { "m1": [{ "mode": "CW", "temperature": 23 }], "m2": [{ "mode": "CW", "temperature": 23 }] } 说明:json格式&a…...
如何查看自己抖音的IP属地?详细教程+常见问题解答
在当今互联网时代,IP属地信息已成为各大社交平台(如抖音、微博、快手等)展示用户真实网络位置的重要功能。无论是出于隐私保护、账号安全,还是单纯好奇自己的IP归属地,了解如何查看抖音IP属地都很有必要。 本文将详细介…...
李宏毅NLP-2-语音识别part1
语音识别part1 这是一篇名为 “Speech Recognition is Difficult?”(语音识别很难吗? )的文章。作者是 J.R. Pierce,来自贝尔电话实验室(Bell Telephone Laboratories, Inc.) 。文中提到语音识别虽有吸引力…...
AUTOSAR图解==>AUTOSAR_SWS_MemoryMapping
AUTOSAR 内存映射机制详解 深入解析AUTOSAR标准中的内存映射技术 目录 AUTOSAR 内存映射机制详解 目录1. 概述2. 内存映射架构 2.1 架构组成2.2 映射类型2.3 关键组件3. 配置数据模型 3.1 主要配置容器3.2 内存段类型3.3 初始化策略4. 映射使用流程 4.1 配置阶段4.2 开发阶段...
探索 HTML5 新特性:提升网页开发的现代体验
在 Web 开发的演进历程中,HTML5 无疑是一座重要的里程碑。它不仅为网页带来了更丰富的功能,还提升了开发效率与用户体验。本文将深入探讨 HTML5 那些令人瞩目的新特性,助你紧跟现代 Web 开发潮流。 一、语义化标签:让结构更清晰 …...
系统设计思维的讨论
我们经常说自己熟悉了spring,能够搭建起一个项目基本框架,并且在此之上进行开发,用户or客户提出需求碰到不会的百度找找就可以实现。干个四五年下一份工作就去面试架构师了,运气好一些可能在中小公司真的找到一份架构师、技术负责…...
【音视频】SDL播放PCM音频
相关API 打开音频设备 int SDLCALL SDL_OpenAudio(SDL_AudioSpec * desired, SDL_AudioSpec * obtained); desired:期望的参数。obtained:实际音频设备的参数,一般情况下设置为NULL即可。 SDL_AudioSpec typedef struct SDL_AudioSpec { i…...
FATFS文件系统配置
1、FatFs模块功能配置选项参考ffconf.h函数配置链接:FatFs模块功能配置选项 2、FATFS配置 FATFS 支持长文件名链接: FATFS:配置 FATFS 支持长文件名 3、 FATFS移植链接1 4、 FATFS移植链接2 5、FAT32 和 FATFS 是两个不同层次的概念,分别属于…...
JVM 字节码是如何存储信息的?
JVM 字节码是 Java 虚拟机 (JVM) 执行的指令集,它是一种与平台无关的二进制格式,在任何支持 JVM 的平台上都可运行的Java 程序。 字节码存储信息的方式,主要通过以下几个关键组成部分和机制来实现: 1. 指令 (Opcodes) 和 操作数 …...
Linux:多路转接(上)——select
目录 一、select接口 1.认识select系统调用 2.对各个参数的认识 二、编写select服务器 一、select接口 1.认识select系统调用 int select(int nfds, fd_set readfds, fd_set writefds, fd_set exceptfds, struct timeval* timeout); 头文件:sys/time.h、sys/ty…...
如何解决DDoS攻击问题 ?—专业解决方案深度分析
本文深入解析DDoS攻击面临的挑战与解决策略,提供了一系列防御技术和实践建议,帮助企业加强其网络安全架构,有效防御DDoS攻击。从攻击的识别、防范措施到应急响应,为网络安全工作者提供了详细的操作指引。 DDoS攻击概览:…...
机器学习Python实战-第三章-分类问题-3.决策树算法
目录 3.3.1 原理简介 3.3.2 算法步骤 3.3.3 实战 3.3.4 实验 前半部分是理论介绍,后半部分是代码实践,可以选择性阅读。 决策树(decision tree)是功能强大而且相当受欢迎的分类和预估方法&…...
Spring三级缓存学习
Spring的三级缓存机制主要用于解决单例Bean的循环依赖问题。其核心在于提前暴露Bean的引用,允许未完全初始化的对象被其他Bean引用。以下是三级缓存的详细说明及其解决循环依赖的原理: 三级缓存结构 一级缓存(singletonObjects) 存…...
欧拉函数φ
函数作用 计算 1 1 1 ~ n n n中有多少个与 n n n互质的数。 函数公式 φ ( n ) n p 1 − 1 p 1 p 2 − 1 p 2 … … p m − 1 p m φ(n)n\times\frac{p_1-1}{p_1}\times\frac{p_2-1}{p_2}\times……\times\frac{p_m-1}{p_m} φ(n)np1p1−1p2p2−1……pmp…...