当前位置: 首页 > news >正文

【6. 激光雷达接入ROS】

欢迎大家阅读2345VOR的博客【6. 激光雷达接入ROS】🥳🥳🥳
2345VOR鹏鹏主页: 已获得CSDN《嵌入式领域优质创作者》称号👻👻👻,座右铭:脚踏实地,仰望星空🛹🛹🛹
🎏🎏主要开发专栏🎏🎏
《arduino学习》:学习最简单开源便利的单片机Arduino,与时俱进😆😆😆
《Arduino编程参考》:本专栏围绕Arduino语法和Arduino库使用开发;🌻🌻🌻
《 Arduino小项目开发》:本专栏围绕Arduino生态结合实际需求设计综合的小项目开发。🌼🌼🌼
《HomeAssistant》:介绍homeassistant中基本开发, 重点设计esphome和nodered开发,包含小爱同学打印机等诸多设备添加。🎉🎉🎉
本文章属于《Ubuntu学习》和《ROS机器人学习》
:围绕Ubuntu系统基本配置及相关命令行学习记录!机器人操作系统 (ROS) 是一组软件库和工具,可帮助您构建机器人应用程序。👍👍👍

1. 前言

Ubuntu环境搭建
【经典Ubuntu20.04版本U盘安装双系统教程】
【Windows10安装或重装ubuntu18.04双系统教程】
【Ubuntu同步系统时间】
【Ubuntu中截图工具】
【Ubuntu安装QQ】
【Ubuntu安装后基本配置】
【Ubuntu启动菜单的默认项】
【ubuntu系统中修改hosts配置】
【18.04Ubuntu中解决无法识别显示屏】
ROS学习笔记
【1. Ubuntu18.04安装ROS Melodic】
【2. 在Github上寻找安装ROS软件包】
【3. 初学ROS,年轻人的第一个Node节点】
【4. ROS的主要通讯方式:Topic话题与Message消息】
【5. ROS机器人的运动控制】

接下来学习激光雷达如何接入ros机器人,激光雷达是用来探测周围障碍物的分布状况!
在这里插入图片描述

2. 激光雷达分类

其按照测量的维度可以分为单线雷达和多线雷达

在这里插入图片描述
按照测量原理分为三角测距雷达和TOF雷达

在这里插入图片描述
根据工作方式分为机械旋转雷达和固态雷达

在这里插入图片描述
激光雷达虽各有不同,但是在ROS中呈现的数据格式是一样的,只是在数据完整度和精度上会有所差异。下面就选取TOF激光雷达作为例子

3. TOF和三角测距激光雷达

3.1 何为飞行时间测距(TOF)?

简单来说,就是计算光的“飞行时间”。

在这里插入图片描述

由激光器发射一个激光脉冲,通过计时器记录下光的出射和回返的时间,两个时间相减即可得到光的“飞行时间”,而光速是固定的,根据已知速度和时间就可以计算出距离。

3.2 何为三角测距?

三角测距采用激光器发射激光,在照射到物体之后,反射光会由线性CCD接收,因为激光器和探测器间隔了一段距离,所以根据光学路径,不同距离的物体将会在CCD上成像在不同的位置,按照三角公式进行计算,就可以推导出被测物体的距离。
在这里插入图片描述

3.3 激光雷达测距

TOF激光雷达计算如下
在这里插入图片描述

在这里插入图片描述

4. 使用RViz观测传感器数据

RViz这个工具的全名叫做 The Robot Visualization Tool

在这里插入图片描述

4.1 运行模板样机

打开三个终端分别运行三条指令

roscore
roslaunch wpr_simulation wpb_simple.launch
rviz

首先把这个Fixed Frame修改成base_footprint

在这里插入图片描述
状态栏添加机器人模型,最后点击ok
在这里插入图片描述
选择激光雷达的话题名称/scan

在这里插入图片描述
调整size为0.03
在这里插入图片描述
调整RViz和Gazebo分屏

在这里插入图片描述
Gazebo是模拟真实机器人发出传感器数据的工具
RViz显示的是机器人实际能探测到的环境状况
在这里插入图片描述
在这里插入图片描述
另外一点就是RViz并不参与机器人算法的运行,它只是一个为了方便人类进行观测的工具而已
即使没有RViz,也不影响机器人的ROS系统的运行
只有需要观察某些数据实时变化的时候,才会打开RViz
下面添加虚拟环境的圆柱体障碍物
在这里插入图片描述

在这里插入图片描述

4.2 保存RViz配置

点击file菜单,选择Save Config As
在这里插入图片描述
选择保存地址,方便后期直接加载
在这里插入图片描述
然后关闭所有终端
打开三个终端分别运行三条指令

roscore
roslaunch wpr_simulation wpb_simple.launch
rviz

然后在RViz中的file菜单,选择Open Config
在这里插入图片描述
然后选择刚保存的位置

在这里插入图片描述

4.3 自动加载rviz配置文件

还可以在launch文件里自动加载rviz配置文件
先关闭RViz,然后打开终端输入

roslaunch wpr_simulation wpb_rviz.launch

在这里插入图片描述
关闭摄像头,保留激光雷达
在这里插入图片描述
调整视角
在这里插入图片描述

5. ROS系统中的激光雷达消息包格式

5.1 运行模板样机

打开三个终端分别运行三条指令

roscore
roslaunch wpr_simulation wpb_simple.launch
roslaunch wpr_simulation wpb_rviz.launch

在这里插入图片描述

在Gazebo中围绕机器人堆积障碍物
在这里插入图片描述

5.2 sensor_msgs中Laserscan_msgs消息属性

进入ROS Index官网搜索sensor_msgs
在这里插入图片描述

在这里插入图片描述
进入website
在这里插入图片描述
在消息中找到LaserScan
在这里插入图片描述
这就打开了激光雷达消息包的格式定义

在这里插入图片描述
在这里插入图片描述

5.3 查看scan消息

新开终端输入

rostopic echo /scan --noarr

在这里插入图片描述
显示对比

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6. 用C++获取ROS激光雷达数据节点

6.1 运行模板样机

采用wpr_simulation开源工程,打开三个终端分别运行三条指令

roscore
roslaunch wpr_simulation wpb_simple.launch
rosrunwpr_simulation deno_lidar_data

在这里插入图片描述

6.2 构思功能的思路和步骤

构思
在这里插入图片描述
实现步骤

  1. 构建一个新的软件包,包名叫做lidar_pkg。
  2. 在软件包中新建一个节点,节点名叫做lidar_node。
  3. 在节点中,向ROS大管家NodeHandle申请订阅话题/scan,并设置回调函数为LidarCallback()。
  4. 构建回调函数LidarCallback(),用来接收和处理雷达数据。
  5. 调用ROS_INFO()显示雷达检测到的前方障碍物距离。

6.3 创建lidar_pkg包

在工作空间src文件创建基于sensor_msgs模板的lidar_pkg

cd ~/catkin_ws/src/
catkin_create_pkg lidar_pkg roscpp rospy sensor_msgs

在这里插入图片描述
在lidar_pkg文件夹下src中创建lidar_node.cpp
在这里插入图片描述

在这里插入图片描述

6.4 编写订阅者节点

lidar_node源码

#include <ros/ ros.h>
#include <sensor msgs/Laserscan.h>
void Lidarcallback(const sensor_msgs::LaserScan msg)
{float fMidDist = msg.ranges[180] ;ROS_INFO("前方测距ranges [180]=%f 米", fMidDist);
}
int main(int argc,char *argv[])
{setlocale(LC_ALL, "" );ros::init(argc, argv,"lidar_node" );ros::NodeHandle n;ros::Subscriber lidar_sub = n.subscribe( " /scan", 10, &LidarCallback);ros::spin();return 0;
}

ctrl+s快捷保存

6.5 设置C++编译规则

打开CMake文件


add_executable(lidar_node src/lidar_node.cpp)
target_link_libraries(lidar_node${catkin_LIBRARIES}
)

ctrl+s快捷保存
在这里插入图片描述
ctrl+shift+b快捷编译

6.6 编译运行lidar_node节点

编译,打开终端

cd ~/catkin_ws/
catkin_make

采用wpr_simulation开源工程,打开三个终端分别运行三条指令

roscore
roslaunch wpr_simulation wpb_simple.launch
rosrun lidar_pkg lidar_node

在这里插入图片描述
前方距离2.6m,然后在Gazebo中调整书柜,选择移动靠近机器人
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可参照可以打开.wpr_simulation里的demo_lidar_data.cpp文件

在这里插入图片描述

7. 用python获取ROS激光雷达数据节点

7.1 运行模板样机

采用wpr_simulation开源工程,打开三个终端分别运行三条指令

roscore
roslaunch wpr_simulation wpb_simple.launch
rosrun wpr_simulation deno_lidar_data.py

在这里插入图片描述

7.2 构思功能的思路和步骤

构思
在这里插入图片描述
实现步骤

  1. 构建一个新的软件包,包名叫做lidar_pkg。
  2. 在软件包中新建一个节点,节点名叫做lidar_node.py。
  3. 在节点中,向ROS大管家rospy申请订阅话题/scan,并设置回调函数为LidarCallback()。
  4. 构建回调函数LidarCallback(),用来接收和处理雷达数据。
  5. 调用loginfo()显示雷达检测到的前方障碍物距离。

7.3 创建lidar_pkg包

在工作空间src文件创建基于sensor_msgs模板的lidar_pkg,编译

cd ~/catkin_ws/src/
catkin_create_pkg lidar_pkg roscpp rospy sensor_msgs
cd ..
catkin_make

在这里插入图片描述

在lidar_pkg文件夹下新建script文件夹中创建lidar_node.py
在这里插入图片描述

在这里插入图片描述

7.4 编写订阅者节点

先引入python包,设置中文utf-8显示

  • ros>=20.04,采用python3
  • ros<20.04,采用python

lidar_node.py源码

#!/usr/bin/env python3
#coding=utf-8
import rospy
from sensor_msgs.msg import LaserScan
def Lidarcallback(msg):dist = msg.ranges [ 180]rospy.loginfo("前方测距 ranges [ 180] = %f 米" , dist)
if _name ="_main_":rospy.init_node( "lidar_node" )lidar_sub = rospy.Subscriber( " /scan" ,LaserScan,Lidarcallback,queue_size=10)rospy.spin()

ctrl+s快捷保存

7.5 添加可执行的权限

在所在文件夹打开终端

cd catkin_ws/src/lidar_pkg/scripts/
ls
chmod +x lidar_node.py
ls

文件名变成绿色表示权限添加成功

在这里插入图片描述

7.6 运行lidar_node节点

采用wpr_simulation开源工程,打开三个终端分别运行三条指令

roscore
roslaunch wpr_simulation wpb_simple.launch
rosrun lidar_pkg lidar_node.py

在这里插入图片描述

前方距离2.6m,然后在Gazebo中调整书柜,选择移动靠近机器人
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可参照可以打开wpr_simulation里的script文件夹中创建lidar_node.py

在这里插入图片描述

8. 用C++编写激光雷达避障节点

在这里插入图片描述
基于前面学习的机器人运动控制和激光雷达数据,下面将联系这两点编写激光雷达避障节点

8.1 构思功能的思路和步骤

  1. 让大管家NodeHandle 发布速度控制话题/cmd_vel 。
  2. 构建速度控制消息包vel_cmd。
  3. 根据激光雷达的测距数值,实时调整机器人运动速度,避开障碍物。

8.2 修改lidar_node.cpp

在这里插入图片描述
见6.4源码
修改成如下lidar_node源码

#include <ros/ ros.h>
#include <sensor msgs/Laserscan.h>
#include <geometry msgs/Twist.h>
ros::Publisher vel_pub;void Lidarcallback(const sensor_msgs::LaserScan msg)
{float fMidDist = msg.ranges[180] ;ROS_INFO("前方测距ranges [180]=%f 米", fMidDist);geometry msgs::Twist vel_cmd ;if( fMidDist< 1.5){vel_cmd.angular.z = 0.3;}else{vel_cmd.linear.x = 0.05;}vel_pub.publish(vel_cmd);}
int main(int argc,char *argv[])
{setlocale(LC_ALL, "" );ros::init(argc, argv,"lidar_node" );ros::NodeHandle n;ros::Subscriber lidar_sub = n.subscribe( " /scan", 10, &LidarCallback);ros::spin();return 0;
}

ctrl+s快捷保存

ctrl+shift+b快捷编译
在这里插入图片描述

8.4 运行lidar_node节点

采用wpr_simulation开源工程,打开三个终端分别运行三条指令

roscore
roslaunch wpr_simulation wpb_simple.launch
rosrun lidar_pkg lidar_node

在这里插入图片描述
机器人撞到障碍物,机器人有宽度

8.4 优化避障策略

当机器人检测前方障碍物时,最简单把转弯角度调大一点,原地转弯
lidar_node源码

#include <ros/ ros.h>
#include <sensor msgs/Laserscan.h>
#include <geometry msgs/Twist.h>
ros::Publisher vel_pub;
int ncount = 0;void Lidarcallback(const sensor_msgs::LaserScan msg)
{float fMidDist = msg.ranges[180] ;ROS_INFO("前方测距ranges [180]=%f 米", fMidDist);if(ncount > 0){ncount--;return;}geometry msgs::Twist vel_cmd ;if( fMidDist< 1.5){vel_cmd.angular.z = 0.3;ncount = 50;}else{vel_cmd.linear.x = 0.05;}vel_pub.publish(vel_cmd);}
int main(int argc,char *argv[])
{setlocale(LC_ALL, "" );ros::init(argc, argv,"lidar_node" );ros::NodeHandle n;ros::Subscriber lidar_sub = n.subscribe( " /scan", 10, &LidarCallback);ros::spin();return 0;
}

ctrl+s快捷保存

ctrl+shift+b快捷编译
然后在调试就OK啦
可参照开源项目wpr_simulation下的src文件夹的demo_lidar_behavior.cpp

在这里插入图片描述

9. 用python编写激光雷达避障节点

9.1 构思功能的思路和步骤

构思
在这里插入图片描述
实现步骤

  1. 让大管家rospy 发布速度控制话题/cmd_vel 。
  2. 构建速度控制消息包vel_cmd。
  3. 根据激光雷达的测距数值,实时调整机器人运动速度,避开障
    碍物。

9.2 修改lidar_node.py

打开7.4编写lidar_node.py
在这里插入图片描述

lidar_node.py源码

#!/usr/bin/env python3
#coding=utf-8
import rospy
from sensor_msgs.msg import LaserScan
from geometry_msgs.msg import Twistcount =0def Lidarcallback(msg):global vel_pubglobal countdist = msg.ranges [ 180]rospy.loginfo("前方测距 ranges [ 180] = %f 米" , dist)if count > 0:count = count - 1returnvel_cmd = Twist()if dist< 1.5:vel_cmd .angular.z = 0.3else:vel_cmd.linear.x = 0.05vel_pub.publish(vel_cmd)if _name ="_main_":rospy.init_node( "lidar_node" )lidar_sub = rospy.Subscriber( " /scan" ,LaserScan,Lidarcallback,queue_size=10)vel_pub = rospy.Publisher( " /cmd_vel" ,Twist , queue_size=10)rospy.spin()

ctrl+s快捷保存

6.6 运行lidar_node节点

采用wpr_simulation开源工程,打开三个终端分别运行三条指令

roscore
roslaunch wpr_simulation wpb_simple.launch
rosrun lidar_pkg lidar_node.py

在这里插入图片描述
可参照可以打开wpr_simulation里的script文件夹中demo_lidar_behavior.py
在这里插入图片描述

10. 总结

本节学习了ROS机器人的激光雷达原理和数据查看,尝试C++和python两种语言编写,并且结合前面的机器人运动编写了避障节点,接下来会介绍机器人的IMU传感器的操作。🎉🎉🎉

相关文章:

【6. 激光雷达接入ROS】

欢迎大家阅读2345VOR的博客【6. 激光雷达接入ROS】&#x1f973;&#x1f973;&#x1f973; 2345VOR鹏鹏主页&#xff1a; 已获得CSDN《嵌入式领域优质创作者》称号&#x1f47b;&#x1f47b;&#x1f47b;&#xff0c;座右铭&#xff1a;脚踏实地&#xff0c;仰望星空&#…...

Java 基础进阶篇(三)—— 面向对象的三大特征之二:继承

文章目录 一、继承概述二、内存运行原理 ★三、继承的特点四、继承后&#xff1a;成员变量和方法的访问特点五、继承后&#xff1a;方法重写六、继承后&#xff1a;子类构造器的特点七、继承后&#xff1a;子类构造器访问父类有参构造器八、this、super 总结 一、继承概述 Jav…...

[angstromctf 2023] 部分

这个比赛打了个开头就放弃了&#xff0c;最近放弃的比较多&#xff0c;国外的网太慢&#xff0c;国内的题太难。 Crypto ranch 这题直接给出密文这提示 rtkw{cf0bj_czbv_nvcc_y4mv_kf_kip_re0kyvi_uivjj1ex_5vw89s3r44901831} Caesar dressing is so 44 BC... 然后是加密程序…...

死信队列

死信队列 死信的概念 先从概念解释上搞清楚这个定义&#xff0c;死信&#xff0c;顾名思义就是无法被消费的消息&#xff0c;字面意思可以这样理解&#xff0c;一般来说&#xff0c;producer 将消息投递到 broker 或者直接到queue 里了&#xff0c;consumer 从 queue 取出消息…...

基于YOLOv5的目标检测系统详解(附MATLAB GUI版代码)

摘要&#xff1a;本文重点介绍了基于YOLOv5目标检测系统的MATLAB实现&#xff0c;用于智能检测物体种类并记录和保存结果&#xff0c;对各种物体检测结果可视化&#xff0c;提高目标识别的便捷性和准确性。本文详细阐述了目标检测系统的原理&#xff0c;并给出MATLAB的实现代码…...

使用ChatGPT工具阅读文献的实战教程

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...

实训笔记1

实训笔记 第一天 1.安装tomcat或者其他大数据开发的路径不含中文及空格 2.和同开发 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FoApp1oX-1683039421826)(C:\Users\18249\AppData\Roaming\Typora\typora-user-images\image-20230422110823748…...

CCD视觉检测设备如何选择光源

CCD视觉检测设备的机器视觉系统对光源的要求很高&#xff0c;光源是决定图像质量的一个重要因素。那么&#xff0c;我们就来看看CCD图像加网设备和机器视觉系统光源的选择点——CCD图像加网设备。 CCD视觉检测设备机器视觉系统光源选择要点&#xff1a; 1. 对比度&#xff1a;…...

基于协同过滤的旅游推荐系统设计与实现(论文+源码)_kaic

1 绪论 1.1 研究背景及意义 1.2 国内外研究现状 1.3 研究目标与意义 1.4 主要研究工作 2 相关理论介绍 2.1HTML与JavaScript 2.2 MySQL数据库 2.3 协同过滤算法简介 3 系统分析与设计 3.1 系统需求分析 3.1.1 功能性需求 3.1.2 安全性需求 3.2 系统总体架构 3.3 功能模块设计 3…...

代码随想录补打卡 746 使用最小花费爬楼梯

代码如下 func minCostClimbingStairs(cost []int) int { dp : make([]int,len(cost)1) //思路&#xff1a;设置一个花费数组dp&#xff0c;dp数组的长度等于之前的cost在加上1&#xff08;1为楼顶元素&#xff09; dp[0] 0 dp[1] 0 for i : 2 ; i < len(c…...

有理函数的不定积分习题

前置知识&#xff1a;有理函数的不定积分 习题 计算 ∫ x 3 1 x 4 − 3 x 3 3 x 2 − x d x \int \dfrac{x^31}{x^4-3x^33x^2-x}dx ∫x4−3x33x2−xx31​dx 解&#xff1a; \qquad 将被积函数的分母因式分解得 x 4 − 3 x 3 3 x 2 − x x ( x − 1 ) 3 x^4-3x^33x^2-xx…...

PS滤镜插件-Nik Collection介绍

PS滤镜插件-Nik Collection介绍 什么是Nik CollectionNik Collection都包含什么&#xff1f; 什么是Nik Collection Nik Collection是一款PS滤镜插件套装&#xff0c;其包含了八款PS插件&#xff0c;功能涵盖修图、调色、降噪、胶片滤镜等方面。Nik Collection 作为很多摄影师…...

力扣刷题2023-05-04-1——题目:2614. 对角线上的质数

题目&#xff1a; 给你一个下标从 0 开始的二维整数数组 nums 。 返回位于 nums 至少一条 对角线 上的最大 质数 。如果任一对角线上均不存在质数&#xff0c;返回 0 。 注意&#xff1a; 如果某个整数大于 1 &#xff0c;且不存在除 1 和自身之外的正整数因子&#xff0c;…...

【Java笔试强训 2】

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔&#x1f93a;&#x1f93a;&#x1f93a; 目录 一、选择题 二、编程题 &#x1f525;排序子…...

术数基础背诵口诀整理

物象对应 五行方位天干神兽季节气候星宿生成数脏器木东甲乙青龙春风岁八肝火南丙丁朱雀夏热荧惑七心土中戊己&#xff1f;长夏湿镇五脾金西庚辛白虎秋燥太白九肺水北壬癸玄武冬寒辰六肾 口诀&#xff1a;东方甲乙青龙木&#xff0c;南方丙丁朱雀火&#xff0c;戊己勾陈腾蛇土&…...

Linux 基础语法 -2

如果我们以后再Linux当中 写了一些命名&#xff0c;导致程序我们不能进行操作了&#xff0c;如这个死循环&#xff1a; 他就会一直输出 "hello Linux" &#xff0c;我们就使用 ctrl c 来终止因为程序或者指令异常&#xff0c;而导致我们无法进行指令输入&#xff…...

深度学习框架发展趋势

深度学习方法的发展是推动深度学习框架进步的最大动力&#xff0c;因此深度学习框架的功能和设计应顺应 算法和模型的发展趋势&#xff1a; 第一&#xff0c;易用性。深度学习领域仍处于快速发展期&#xff0c;参与者和学习者不断增加&#xff0c;新模型大量提出。因 此&#…...

Mysql为json字段创建索引的两种方式

目录 一、前言二、通过虚拟列添加索引&#xff08;Secondary Indexes and Generated Columns&#xff09;三、多值索引&#xff08;Using multi-valued Indexes&#xff09;四、官网地址 一、前言 JSON 数据类型是在mysql5.7版本后新增的&#xff0c;同 TEXT&#xff0c;BLOB …...

cassandra数据库入门-4

插入数据 在表中创建数据 您可以使用命令 INSERT 将数据插入表中一行的列中。 下面给出了在表中创建数据的语法。 INSERT INTO <tablename> (<column1 name>, <column2 name>....) VALUES (<value1>, <value2>....) USING <option> 例子…...

微服务学习——分布式搜索

初识elasticsearch 什么是elasticsearch elasticsearch是一款非常强大的开源搜索引擎&#xff0c;可以帮助我们从海量数据中快速找到需要的内容。 elasticsearch结合kibana、Logstash、Beats&#xff0c;也就是elastic stack(ELK)。被广泛应用在日志数据分析、实时监控等领域…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

UR 协作机器人「三剑客」:精密轻量担当(UR7e)、全能协作主力(UR12e)、重型任务专家(UR15)

UR协作机器人正以其卓越性能在现代制造业自动化中扮演重要角色。UR7e、UR12e和UR15通过创新技术和精准设计满足了不同行业的多样化需求。其中&#xff0c;UR15以其速度、精度及人工智能准备能力成为自动化领域的重要突破。UR7e和UR12e则在负载规格和市场定位上不断优化&#xf…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中&#xff0c;合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式&#xff1a;工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

【Linux】Linux安装并配置RabbitMQ

目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的&#xff0c;需要先安…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中&#xff0c;如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议&#xff08;2PC&#xff09;通过准备阶段与提交阶段的协调机制&#xff0c;以同步决策模式确保事务原子性。其改进版本三阶段提交协议&#xff08;3PC&#xf…...

FOPLP vs CoWoS

以下是 FOPLP&#xff08;Fan-out panel-level packaging 扇出型面板级封装&#xff09;与 CoWoS&#xff08;Chip on Wafer on Substrate&#xff09;两种先进封装技术的详细对比分析&#xff0c;涵盖技术原理、性能、成本、应用场景及市场趋势等维度&#xff1a; 一、技术原…...