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

【人工智能】-- 智能机器人

2a20c54b85e042bfa2440367ae4807e9.gif

https://blog.csdn.net/2302_76516899?spm=1000.2115.3001.5343

个人主页:欢迎来到 Papicatch的博客

 课设专栏 :学生成绩管理系统

专业知识专栏: 专业知识 

文章目录

🍉引言

🍉机器人介绍

🍈机器人硬件

🍍机械结构

🍍传感器

🍍控制系统 

🍍能源系统

🍍通信模块

🍈开发环境

🍍ROS(Robot Operating System)

🍍Python

🍍C++

🍍Arduino

🍍V-REP(Virtual Robot Experimentation Platform)

🍈ROS 基本操作详细介绍

🍍工作空间(Workspace)

🍍创建工作空间

🍍创建 ROS 包(Package)

🍍编译包和工作空间 

🍍运行节点(Node)

🍍查看节点信息

🍍发布(Publish)和订阅(Subscribe)话题(Topic)

🍍查看话题信息

🍍服务(Service)和客户端(Client)

🍍参数(Parameter)

🍈OpenCV 在机器人视觉开发

🍍图像采集与预处理

🍍目标检测与识别

🍍特征提取与匹配

🍍视觉跟踪

🍍深度估计

🍍图像拼接与全景图生成

🍈语言合成开发

🍍原理和方法

🍍开发流程

🍍关键技术和挑战

🍍常用工具和框架

🍍应用领域

🍈SLAM激光雷达建图

🍍激光雷达原理

🍍SLAM 流程

🍍关键技术

🍍建图算法

🍍应用场景

🍉总结


2a20c54b85e042bfa2440367ae4807e9.gif

🍉引言

        在当今科技飞速发展的时代,智能机器人正逐渐成为改变我们生活和工作方式的重要力量。

        智能机器人拥有强大的感知能力,它们能够通过传感器收集周围环境的信息,例如光线、声音、温度等。这使得它们可以迅速对环境变化做出反应。比如在家庭中,扫地机器人能够感知家具的位置,避免碰撞,高效完成清扫任务。

        在工业领域,智能机器人的精度和效率更是令人瞩目。它们可以不知疲倦地进行重复且高精度的操作,大幅提高生产效率和产品质量。例如汽车生产线上的焊接机器人,能够精准地完成复杂的焊接工作,且质量稳定。

        智能机器人还具备出色的学习和适应能力。通过不断接收数据和反馈,它们能够优化自己的行为和决策。例如客服机器人,随着与用户交流次数的增加,能够更准确地理解用户需求并提供更满意的回答。

        然而,智能机器人的发展也带来了一些挑战。比如可能导致部分传统岗位的消失,引发就业结构的调整。但从另一方面看,这也促使人们提升自身技能,去从事更具创造性和复杂的工作。

🍉机器人介绍

🍈机器人硬件

STM32硬件框架图

机器人的硬件系统是其实现各种功能的基础,主要包括以下几个关键部分:

🍍机械结构

  • 机身框架:通常由高强度的金属材料或复合材料制成,为机器人的其他部件提供支撑和安装基础。例如,工业机器人的机身框架需要具备足够的刚性和稳定性,以承受重负载和高精度的操作。
  • 关节和驱动器:用于实现机器人的运动,常见的关节类型有旋转关节和直线关节。驱动器可以是电动、液压或气动的,如电动关节中的伺服电机,能够精确控制关节的运动角度和速度。
  • 末端执行器:根据机器人的应用需求而定,如机械爪用于抓取物体,喷枪用于喷漆等。

🍍传感器

  • 位置和姿态传感器:如编码器、陀螺仪和加速度计等,用于测量机器人关节的位置、速度和姿态信息,以实现精确的运动控制。
  • 视觉传感器:包括摄像头、深度相机等,使机器人能够感知周围环境的图像和物体的形状、颜色等特征。例如,服务机器人可以通过视觉传感器识别用户的面部表情和手势。
  • 力传感器:安装在机器人的关节或末端执行器上,用于检测接触力和力矩,实现力控操作。比如在装配机器人中,力传感器可以确保零件的装配精度和避免过度用力损坏零件。

🍍控制系统 

  • 控制器:通常是一个高性能的微处理器或计算机,负责处理传感器数据、生成控制指令和执行算法。
  • 驱动器控制器:将控制器发出的指令转换为驱动器所需的电信号,实现对电机、液压泵等驱动器的精确控制。

🍍能源系统

  • 电池:为移动机器人或便携式机器人提供电能,如家用扫地机器人使用锂电池。
  • 电源供应:对于固定安装的机器人,通过电源线连接到市电网络获取稳定的电源。

🍍通信模块

  • 有线通信:如以太网、USB 等,用于与外部设备进行高速数据传输和控制指令的交互。
  • 无线通信:如 Wi-Fi、蓝牙等,使机器人能够与其他设备进行灵活的通信,方便远程控制和数据传输。

        以一款常见的工业搬运机器人为例,其机械结构采用坚固的铝合金框架,配备高精度的电动关节和强大的抓取末端执行器。通过安装在关节处的编码器和力传感器,以及机身顶部的视觉摄像头,能够精确感知物体的位置和状态,并在控制器的指挥下完成准确的搬运操作。同时,通过 Wi-Fi 模块与工厂的控制系统进行通信,实现协同工作。

🍈开发环境

🍍ROS(Robot Operating System)

  • 这是一个广泛使用的开源机器人操作系统,提供了丰富的功能包和工具,支持多种编程语言(如 C++、Python)。
  • 具有强大的通信机制,便于不同组件之间的数据交换和协作。
  • 例如,通过 ROS 可以轻松集成激光雷达、摄像头等传感器,并实现机器人的导航、路径规划等功能。
  • 提供了直观的图形化编程界面,适合算法设计和仿真。
  • 有专门的机器人工具箱,可用于机器人运动学、动力学建模和控制算法开发。
  • 比如在设计机器人的轨迹跟踪控制器时,可以在 Simulink 中进行快速建模和仿真验证。

🍍Python

  • 简单易学,拥有丰富的科学计算和机器学习库(如 NumPy、SciPy、TensorFlow 等)。
  • 常用于开发机器人的感知、决策和控制算法。
  • 例如,使用 Python 中的 OpenCV 库处理摄像头采集的图像数据。

🍍C++

  • 执行效率高,适合对性能要求严格的机器人底层驱动和实时控制程序开发。
  • 例如,在编写机器人关节的运动控制代码时,C++ 可以确保实时性和准确性。

🍍Arduino

  • 对于简单的机器人项目和硬件原型开发非常方便。
  • 有大量的开源库和硬件扩展板可供选择。
  • 比如制作一个小型的移动机器人,可以使用 Arduino 控制电机和读取传感器数据。

🍍V-REP(Virtual Robot Experimentation Platform)

  • 一款强大的机器人仿真软件,支持多种机器人模型和传感器的模拟。
  • 可以在虚拟环境中进行机器人的开发和测试,减少实际实验的成本和风险。

🍍Unity

  • 主要用于开发具有良好可视化效果的机器人交互应用和虚拟现实场景。

🍈ROS 基本操作详细介绍

        ROS(Robot Operating System)是一个用于机器人开发的开源框架,以下是一些基本操作的详细介绍:

🍍工作空间(Workspace)

  • 工作空间是开发 ROS 项目的目录结构。
  • 通常包含 src(存放源代码)、build(编译生成的中间文件)和 devel(可执行文件和环境设置脚本)等文件夹。

🍍创建工作空间

  • 在终端中使用以下命令创建工作空间:
    mkdir -p ~/catkin_ws/srccd ~/catkin_wscatkin_make

🍍创建 ROS 包(Package)

  • 在工作空间的 src 目录下,使用以下命令创建包:
    cd ~/catkin_ws/srccatkin_create_pkg <package_name> <dependencies>
  • 例如:catkin_create_pkg my_package roscpp rospy std_msgs

🍍编译包和工作空间 

  • 在工作空间的根目录下执行 catkin_make 命令进行编译。

🍍运行节点(Node)

  • 节点是 ROS 中的基本执行单元。
  • 例如,运行一个名为 my_node 的节点:
    rosrun <package_name> <node_name>

🍍查看节点信息

  • 使用 rosnode list 命令查看当前运行的节点列表。
  • rosnode info <node_name> 查看指定节点的详细信息。

🍍发布(Publish)和订阅(Subscribe)话题(Topic)

  • 节点通过发布和订阅话题进行通信。
  • 发布数据:
    import rospyfrom std_msgs.msg import Stringdef publisher():rospy.init_node('publisher_node', anonymous=True)pub = rospy.Publisher('my_topic', String, queue_size=10)rate = rospy.Rate(10)  # 10Hzwhile not rospy.is_shutdown():message = "Hello, ROS!"pub.publish(message)rate.sleep()if __name__ == '__main__':try:publisher()except rospy.ROSInterruptException:pass
  • 订阅数据:
    import rospyfrom std_msgs.msg import Stringdef callback(data):rospy.loginfo(rospy.get_caller_id() + "I heard %s", data.data)def subscriber():rospy.init_node('subscriber_node', anonymous=True)rospy.Subscriber("my_topic", String, callback)rospy.spin()if __name__ == '__main__':subscriber()

🍍查看话题信息

  • rostopic list 查看当前活跃的话题列表。
  • rostopic info <topic_name> 查看指定话题的详细信息。
  • rostopic echo <topic_name> 打印话题上发布的数据。

🍍服务(Service)和客户端(Client)

  • 服务用于节点之间的请求-响应通信。
  • 定义服务:
    from my_package.srv import AddTwoInts, AddTwoIntsResponsedef add_two_ints(req):return AddTwoIntsResponse(req.a + req.b)
  • 服务端代码:
    import rospyfrom my_package.srv import AddTwoIntsrospy.init_node('add_two_ints_server')s = rospy.Service('add_two_ints', AddTwoInts, add_two_ints)rospy.spin()
  • 客户端代码:
    import rospyfrom my_package.srv import AddTwoIntsdef call_add_two_ints():rospy.wait_for_service('add_two_ints')try:add_two_ints = rospy.ServiceProxy('add_two_ints', AddTwoInts)resp1 = add_two_ints(1, 2)return resp1.sumexcept rospy.ServiceException as e:print("Service call failed: %s" % e)if __name__ == "__main__":print("Result: %s" % call_add_two_ints())

🍍参数(Parameter)

  • 节点可以使用参数来配置。
  • 设置参数:rosparam set <parameter_name> <value>
  • 获取参数:rosparam get <parameter_name>

🍈OpenCV 在机器人视觉开发

        OpenCV(Open Source Computer Vision Library)是一个广泛应用于计算机视觉领域的开源库,在机器人视觉开发中发挥着重要作用。

🍍图像采集与预处理

  • 机器人可以通过摄像头采集图像。使用 OpenCV 可以对采集到的图像进行去噪、灰度化、二值化等预处理操作,以提高后续图像处理的效率和准确性。
  • 例如,通过高斯滤波去除图像中的噪声,增强图像的质量。

🍍目标检测与识别

  • 利用 OpenCV 的各种算法和函数,实现对特定目标的检测和识别。
  • 如使用 Haar 特征和级联分类器进行人脸检测,或者基于形状、颜色等特征识别特定的物体。

🍍特征提取与匹配

  • 提取图像中的特征点,如 SIFT(Scale-Invariant Feature Transform)、SURF(Speeded Up Robust Features)等,并进行特征匹配,用于机器人的定位、地图构建等任务。
  • 例如,在机器人同时定位与地图构建(SLAM)中,通过特征匹配来确定机器人在环境中的位置。

🍍视觉跟踪

  • 实现对运动目标的跟踪。
  • 可以使用基于颜色、形状或特征的跟踪算法,让机器人能够持续跟踪感兴趣的目标。

🍍深度估计

  • 结合立体视觉或结构光等技术,使用 OpenCV 估计场景的深度信息,帮助机器人理解环境的三维结构。

🍍图像拼接与全景图生成

  • 当机器人需要获取更广阔的视野时,可以将多个图像拼接成全景图。

以下是一个简单的示例,展示如何使用 OpenCV 进行图像中的圆形物体检测:

import cv2
import numpy as npdef detect_circles(image_path):# 读取图像image = cv2.imread(image_path)# 转换为灰度图像gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 进行高斯模糊blurred = cv2.GaussianBlur(gray, (9, 9), 2)# 霍夫圆检测circles = cv2.HoughCircles(blurred, cv2.HOUGH_GRADIENT, 1, 20,param1=50, param2=30, minRadius=0, maxRadius=0)if circles is not None:circles = np.uint16(np.around(circles))for i in circles[0, :]:# 绘制圆形cv2.circle(image, (i[0], i[1]), i[2], (0, 255, 0), 2)cv2.circle(image, (i[0], i[1]), 2, (0, 0, 255), 3)cv2.imshow('Circles Detected', image)cv2.waitKey(0)cv2.destroyAllWindows()detect_circles('image.jpg')

        在实际的机器人视觉开发中,通常会结合机器人的运动控制、传感器数据融合等方面,充分发挥 OpenCV 的图像处理能力,为机器人提供准确的环境感知和决策依据。

🍈语言合成开发

        语言合成,也称为文本到语音(Text-to-Speech,TTS)转换,是将输入的文本转换为可听的语音输出的技术。以下是对语言合成开发的详细介绍:

🍍原理和方法

  • 基于规则的方法:使用预定义的语音规则和模式将文本转换为语音。但这种方法灵活性较差,语音质量有限。
  • 拼接合成:将预先录制的语音片段拼接起来生成语音。语音的自然度相对较高,但需要大量的录音数据和复杂的拼接算法。
  • 参数合成:通过对语音参数(如基频、时长、幅度等)进行建模来生成语音。具有较高的灵活性,但可能在自然度上稍逊一筹。
  • 深度学习方法:特别是基于神经网络的模型,如循环神经网络(RNN)、长短时记忆网络(LSTM)和 Transformer 架构,已经成为当前语言合成的主流方法。这些模型能够学习从文本到语音特征的复杂映射,生成更加自然和流畅的语音。

🍍开发流程

  • 数据收集:收集大量的文本和对应的语音数据,用于模型的训练。
  • 文本预处理:对输入的文本进行清洗、分词、词性标注等处理,以便模型更好地理解。
  • 特征提取:从语音数据中提取声学特征,如梅尔频率倒谱系数(MFCC)等。
  • 模型训练:使用选择的方法和架构训练模型,优化模型的参数以最小化预测语音与真实语音之间的差异。
  • 模型评估:使用各种指标,如主观听觉测试(MOS)、客观指标(如相似度、失真度等)来评估模型的性能。
  • 优化和调整:根据评估结果对模型进行优化,调整超参数、增加数据、改进模型结构等。
  • 部署和集成:将训练好的模型部署到实际应用中,与其他系统进行集成,如语音助手、有声读物生成等。

🍍关键技术和挑战

  • 韵律和情感表达:使合成的语音具有正确的语调、重音和情感色彩,以提高自然度和表现力。
  • 多语言支持:能够处理多种语言的文本,并生成相应语言的自然语音。
  • 个性化:根据特定的说话人特征生成个性化的语音。
  • 实时性:在一些应用场景中,如实时交互系统,需要快速生成语音。
  • 模型压缩和优化:以便在资源受限的设备上运行。

🍍常用工具和框架

  • TensorFlow:广泛使用的深度学习框架,可用于构建和训练语言合成模型。
  • PyTorch:另一个流行的深度学习框架,提供了灵活的开发环境。
  • Mozilla TTS:一个基于 Python 的开源 TTS 工具包。
  • Microsoft Azure Cognitive Services - Speech:提供了强大的语音合成服务,可通过 API 调用。

🍍应用领域

  • 智能语音助手:如手机中的语音助手、智能音箱等。
  • 有声读物和电子书籍:将文字内容转换为语音,方便阅读。
  • 导航系统和语音提示:为驾驶、出行等提供语音导航。
  • 辅助教学和学习:为教育软件生成语音讲解。
  • 客服机器人:通过语音回答用户的问题。

        例如,使用 TensorFlow 开发一个基于 Transformer 的语言合成模型,首先需要定义模型的架构,包括编码器和解码器部分,然后使用准备好的数据集进行训练。在训练过程中,通过不断调整学习率、层数等参数来优化模型性能。训练完成后,可以将模型部署到服务器上,通过网络接口接收文本输入,并返回合成的语音数据。

🍈SLAM激光雷达建图

        SLAM(Simultaneous Localization and Mapping,即时定位与地图构建)技术结合激光雷达在机器人和自动驾驶等领域中具有重要应用,以下是对 SLAM 激光雷达建图的详细分析:

🍍激光雷达原理

        激光雷达通过发射激光束并测量反射光的时间和强度来获取周围环境的距离信息。它能够快速、精确地扫描周围物体,提供大量的点云数据。

🍍SLAM 流程

  • 传感器数据采集:激光雷达不断扫描环境,获取点云数据。
  • 前端处理:
    • 特征提取:从点云中提取有代表性的特征,如直线、平面等。
    • 数据关联:将当前帧的特征与之前的帧进行匹配和关联。
  • 位姿估计:根据数据关联结果,估计机器人的位姿(位置和姿态)。
  • 后端优化:
    • 构建优化问题:将位姿估计的误差作为优化目标。
    • 求解优化:使用非线性优化算法(如高斯牛顿法、列文伯格-马夸尔特法等)来优化位姿和地图。
  • 地图构建:
    • 点云融合:将不同时刻获取的点云整合到一个统一的地图中。
    • 地图表示:可以采用栅格地图、八叉树地图等形式来表示环境。

🍍关键技术

  • 特征提取与匹配:高效准确地提取和匹配特征对于数据关联和位姿估计至关重要。
  • 回环检测:检测机器人是否回到之前访问过的位置,以消除累积误差。
  • 鲁棒性:应对环境中的动态物体、噪声和传感器误差等干扰。
  • 实时性:在保证精度的前提下,能够快速处理数据并实时更新地图。

🍍建图算法

  • GMapping:基于粒子滤波的算法,适用于较小规模的环境。
  • Cartographer:使用图优化的方法,能够构建高质量的二维地图。
  • LOAM(LiDAR Odometry and Mapping):针对激光雷达数据特点设计的算法,在速度和精度上有较好的平衡。

🍍应用场景

  • 室内机器人导航:如仓储机器人、清洁机器人等。
  • 自动驾驶:为车辆提供环境感知和定位信息。
  • 虚拟现实和增强现实:构建虚拟环境的地图。

        例如,在一个仓储环境中,使用安装有激光雷达的移动机器人进行 SLAM 建图。激光雷达扫描到的点云数据经过前端处理提取特征,通过位姿估计确定机器人的位置,后端优化消除累积误差,最终构建出仓库的二维栅格地图。机器人可以根据这个地图进行自主导航和货物搬运。

🍉总结

        智能机器人作为现代科技的杰出成果,正以前所未有的速度改变着我们的生活和工作方式。

        智能机器人融合了众多先进技术,如人工智能、机器学习、传感器技术、计算机视觉和自然语言处理等。它们具备强大的感知能力,能够精准地获取和理解周围环境的信息,通过复杂的算法和模型进行分析和决策。

        在工业领域,智能机器人不知疲倦地执行着高精度、高重复性的任务,大幅提升了生产效率和产品质量,降低了生产成本和人为错误。从汽车制造到电子产品组装,它们的身影无处不在。

        在服务行业,智能机器人为人们提供了便捷和高效的服务。例如,在医疗领域,它们可以协助医生进行手术、照顾患者;在物流行业,它们能够实现货物的分拣和搬运;在家庭中,它们可以承担清洁、安防等任务。

        智能机器人还在不断拓展其应用领域,如教育、科研、娱乐等。它们可以作为个性化的学习伙伴,激发学生的学习兴趣;在科研中,协助科学家进行复杂的实验和数据采集;在娱乐方面,为人们带来全新的互动体验。

        然而,智能机器人的发展也带来了一些挑战。例如,可能导致部分传统岗位的消失,引发就业结构的调整;在安全和伦理方面,也需要制定相关的法规和准则,以确保其合理、安全地应用。

        尽管存在挑战,但智能机器人的发展前景依然广阔。随着技术的不断进步,它们将变得更加智能、灵活和人性化,为人类创造更多的价值,成为推动社会进步和发展的重要力量。

2a20c54b85e042bfa2440367ae4807e9.gif

相关文章:

【人工智能】-- 智能机器人

个人主页&#xff1a;欢迎来到 Papicatch的博客 课设专栏 &#xff1a;学生成绩管理系统 专业知识专栏&#xff1a; 专业知识 文章目录 &#x1f349;引言 &#x1f349;机器人介绍 &#x1f348;机器人硬件 &#x1f34d;机械结构 &#x1f34d;传感器 &#x1f34d;控…...

Android广播机制

简介 某个网络的IP范围是192.168.0.XXX&#xff0c;子网 掩码是255.255.255.0&#xff0c;那么这个网络的广播地址就是192.168.0.255。广播数据包会被发送到同一 网络上的所有端口&#xff0c;这样在该网络中的每台主机都将会收到这条广播。为了便于进行系统级别的消息通知&…...

SQL FOREIGN KEY

SQL FOREIGN KEY 简介 SQL(Structured Query Language)是用于管理关系数据库管理系统(RDBMS)的标准编程语言。在SQL中,FOREIGN KEY是一个重要的概念,用于建立和维护数据库中不同表之间的关系。本文将详细介绍SQL FOREIGN KEY的概念、用途、以及如何在SQL中实现和使用FO…...

绘唐3最新版本哪里下载

绘唐3最新版本哪里下载 绘唐最新版本下载地址 推文视频创作设计是一种通过视频和文字的形式来进行推广的方式&#xff0c;可以通过一些专业的工具来进行制作。 以下是一些常用的小说推文视频创作设计工具&#xff1a; 视频剪辑软件&#xff1a;如Adobe Premiere Pro、Fina…...

[ES6] 箭头函数

JavaScript 是一种广泛使用的编程语言&#xff0c;随着其发展和演变&#xff0c;引入了很多新的特性来提高代码的可读性和开发效率。其中一个重要的特性就是 ES6&#xff08;ECMAScript 2015&#xff09;中引入的箭头函数&#xff08;Arrow Function&#xff09;。箭头函数不仅…...

BiLSTM模型实现

# 本段代码构建类BiLSTM, 完成初始化和网络结构的搭建 # 总共3层: 词嵌入层, 双向LSTM层, 全连接线性层 # 本段代码构建类BiLSTM, 完成初始化和网络结构的搭建 # 总共3层: 词嵌入层, 双向LSTM层, 全连接线性层 import torch import torch.nn as nn# 本函数实现将中文文本映射为…...

linux内核源码学习所需基础

1.面向对象的思想&#xff0c;尤其是oopc的实现方式。 2.设计模式。 这两点需要内核源码学习者不仅要会c和汇编&#xff0c;还要接触一门面向对象的语言&#xff0c;比如c&#xff0b;&#xff0b;/java/python等等任意一门都行&#xff0c;起码要了解面向对象的思想。 另外li…...

Java并发编程-AQS详解及案例实战(上篇)

文章目录 AQS概述AQS 的核心概念AQS 的工作原理AQS 的灵活性使用场景使用指南使用示例AQS的本质:为啥叫做异步队列同步器AQS的核心机制“异步队列”的含义“同步器”的含义总结加锁失败的时候如何借助AQS异步入队阻塞等待AQS的锁队列加锁失败时的处理流程异步入队的机制总结Ree…...

第11章 规划过程组(二)(11.8排列活动顺序)

第11章 规划过程组&#xff08;二&#xff09;11.8排列活动顺序&#xff0c;在第三版教材第391页&#xff1b; 文字图片音频方式 第一个知识点&#xff1a;主要输出 1、项目进度网络图 如图11-20 项目进度网络图示例 带有多个紧前活动的活动代表路径汇聚&#xff0c;而带有…...

DP学习——观察者模式

学而时习之&#xff0c;温故而知新。 敌人出招&#xff08;使用场景&#xff09; 多个对象依赖一个对象的状态改变&#xff0c;当业务中有这样的关系时你出什么招&#xff1f; 你出招 这个时候就要用观察者模式这招了&#xff01; 2个角色 分为啥主题和观察者角色。 我觉…...

如何利用GPT-4o生成有趣的梗图

文章目录 如何利用GPT-4o生成有趣的梗图一、引言二、使用GPT-4o生成梗图1. 提供主题2. 调用工具3. 获取图片实际案例输入输出 三、更多功能1. 创意和灵感2. 梗图知识 四、总结 如何利用GPT-4o生成有趣的梗图 梗图&#xff0c;作为互联网文化的一部分&#xff0c;已经成为了我们…...

深入理解 KVO

在 iOS 中&#xff0c;KVO&#xff08;Key-Value Observing&#xff09;是一个强大的观察机制&#xff0c;它的底层实现相对复杂。KVO 利用 Objective-C 的动态特性&#xff0c;为对象的属性提供观察能力。 KVO 的底层实现 1. 动态子类化 当一个对象的属性被添加观察者时&am…...

当需要对大量数据进行排序操作时,怎样优化内存使用和性能?

文章目录 一、选择合适的排序算法1. 快速排序2. 归并排序3. 堆排序 二、数据结构优化1. 使用索引2. 压缩数据3. 分块排序 三、外部排序1. 多路归并排序 四、利用多核和并行计算1. 多线程排序2. 使用并行流 五、性能调优技巧1. 避免不必要的内存复制2. 缓存友好性3. 基准测试和性…...

kubernetes集群部署:node节点部署和cri-docker运行时安装(四)

安装前准备 同《kubernetes集群部署&#xff1a;环境准备及master节点部署&#xff08;二&#xff09;》 安装cri-docker 在 Kubernetes 1.20 版本之前&#xff0c;Docker 是 Kubernetes 默认的容器运行时。然而&#xff0c;Kubernetes 社区决定在 Kubernetes 1.20 及以后的…...

第五十章 Web Service URL 汇总

文章目录 第五十章 Web Service URL 汇总Web 服务 URLWeb 服务的端点WSDL 使用受密码保护的 WSDL URL 第五十章 Web Service URL 汇总 本主题总结了与 IRIS 数据平台 Web 服务相关的 URL。 Web 服务 URL 与 IRIS Web 服务相关的 URL 如下&#xff1a; Web 服务的端点 http…...

动态白色小幽灵404网站源码

动态白色小幽灵404网站源码&#xff0c;页面时单页HTML源码&#xff0c;将代码放到空白的html里面&#xff0c;鼠标双击html即可查看效果&#xff0c;或者上传到服务器&#xff0c;错误页重定向这个界面即可&#xff0c;喜欢的朋友可以拿去使用 <!DOCTYPE html> <ht…...

axios的使用,处理请求和响应,axios拦截器

1、axios官网 https://www.axios-http.cn/docs/interceptors 2、安装 npm install axios 3、在onMouunted钩子函数中使用axios来发送请求&#xff0c;接受响应 4.出现的问题&#xff1a; &#xff08;1&#xff09; 但是如果发送请求请求时间过长&#xff0c;回出现请求待处…...

visual studio 2017增加.cu文件

右击项目名称&#xff0c;选择生成依赖项>生成自定义把CUDA11.3target勾选上&#xff1b; 把带有cuda代码的.cpp文件和.cu文件右击属性>项类型>选择CUDA C/C 右击项目名称&#xff0c;C/C>命令行添加/D _CRT_SECURE_NO_WARNINGS&#xff1b; 选择CUDA C/C>命…...

linux 管道符 |

在Linux中&#xff0c;管道符&#xff08;|&#xff09;是一个非常重要的概念&#xff0c;它允许你将一个命令的输出作为另一个命令的输入。这种机制使得Linux命令可以非常灵活地进行组合&#xff0c;从而执行复杂的任务。 管道符的基本用法 假设你有两个命令&#xff1a;com…...

Android - SIP 协议

SIP 代表(会话发起协议)。 它是一种协议&#xff0c;可让应用程序轻松设置呼出和呼入语音呼叫&#xff0c;而无需直接管理会话、传输级通信或音频记录或回放。 SIP 应用程序 SIP 的一些常见应用是。 视频会议即时消息 开发要求 以下是开发 SIP 应用程序的要求 − Android 操作系…...

Python结合MobileNetV2:图像识别分类系统实战

一、目录 算法模型介绍模型使用训练模型评估项目扩展 二、算法模型介绍 图像识别是计算机视觉领域的重要研究方向&#xff0c;它在人脸识别、物体检测、图像分类等领域有着广泛的应用。随着移动设备的普及和计算资源的限制&#xff0c;设计高效的图像识别算法变得尤为重要。…...

【】AI八股-神经网络相关

Deep-Learning-Interview-Book/docs/深度学习.md at master amusi/Deep-Learning-Interview-Book GitHub 网上相关总结&#xff1a; 小菜鸡写一写基础深度学习的问题&#xff08;复制大佬的&#xff0c;自己复习用&#xff09; - 知乎 (zhihu.com) CV面试问题准备持续更新贴 …...

NodeJs的安装与环境变量配置

Node.js的环境变量配置主要涉及设置Node.js的安装路径、npm&#xff08;Node Package Manager&#xff09;的全局模块安装路径和缓存路径&#xff0c;以及可能需要的国内镜像源配置。以下是详细的配置步骤&#xff1a; 一、安装Node.js 下载Node.js安装包&#xff1a; 访问Nod…...

进程输入输出及终端属性学习

进程的标准输入输出 当主进程fork或exec子进程&#xff0c;文件描述符被继承&#xff0c;因此0,1,2句柄也被继承&#xff0c;从而使得telnet等服务&#xff0c;可以做到间接调用别的shell或程序。比如如果是远程登录使用的zsh&#xff0c;那么其会重定向到相应的pts $ ps|gre…...

关于redis集群和事务

最近为了核算项目的两个架构指标&#xff08;可用性和伸缩性&#xff09;&#xff0c;需要对项目中使用的Redis数据库的集群部署进行一定程度的了解&#xff0c;当然顺便再学习一遍它的事务细节。 既然我在上面把Redis称之为数据库&#xff0c;那么在我们目前的项目里&#xf…...

ctfshow-web入门-文件包含(web88、web116、web117)

目录 1、web88 2、web116 3、web117 1、web88 没有过滤冒号 : &#xff0c;可以使用 data 协议&#xff0c;但是过滤了括号和等号&#xff0c;因此需要编码绕过一下。 这里有点问题&#xff0c;我 (ls) 后加上分号发现不行&#xff0c;可能是编码结果有加号&#xff0c;题目…...

My sql 安装,环境搭建

以下以MySQL 8.0.36为例。 一、下载软件 1.下载地址官网&#xff1a;https://www.mysql.com 2. 打开官网&#xff0c;点击DOWNLOADS 然后&#xff0c;点击 MySQL Community(GPL) Downloads 3. 点击 MySQL Installer for Windows 4.点击Archives选择合适版本 5.选择后下载…...

JVM原理(二十):JVM虚拟机内存的三特性详解

1. 原子性、可进行、有序性 1.1. 原子性 Java内存模型围绕着在并发过程中如何处理原子性、可见性和有序性这三个特征来建立的。 Java内存模型来直接保证的原子性变量操作包括read、load、assign、use、store和write这六个。我们大致可以认为&#xff0c;基本数据类型的访问、…...

Flink 窗口触发器(Trigger)(二)

Flink 窗口触发器(Trigger)(一) Flink 窗口触发器(Trigger)(二) Apache Flink 是一个开源流处理框架&#xff0c;用于处理无界和有界数据流。在 Flink 的时间窗口操作中&#xff0c;触发器&#xff08;Trigger&#xff09;是一个非常重要的概念&#xff0c;它决定了窗口何时应…...

CH12_函数和事件

第12章&#xff1a;Javascript的函数和事件 本章目标 函数的概念掌握常用的系统函数掌握类型转换掌握Javascript的常用事件 课程回顾 Javascript中的循环有那些&#xff1f;Javascript中的各个循环特点是什么&#xff1f;Javascript中的各个循环语法分别是什么&#xff1f;…...

Android- Framework 非Root权限实现修改hosts

一、背景 修改system/etc/hosts&#xff0c;需要具备root权限&#xff0c;而且remount后&#xff0c;才能修改&#xff0c;本文介绍非root状态下修改system/etc/hosts方案。 环境&#xff1a;高通 Android 13 二、方案 非root&#xff0c;system/etc/hosts只有只读权限&…...

mac安装达梦数据库

参考&#xff1a;mac安装达梦数据库​​​​​​ 实践如下&#xff1a; 1、下载达梦Docker镜像文件 同参考链接 2、导入镜像 镜像可以随便放在某个目录&#xff0c;相当于安装包&#xff0c;导入后就没有作用了。 查找达梦镜像名称&#xff1a;dm8_20240613_rev229704_x86…...

14-41 剑和诗人15 - RLAIF 大模型语言强化培训

​​​​​​ 介绍 大型语言模型 (LLM) 在自然语言理解和生成方面表现出了巨大的能力。然而&#xff0c;这些模型仍然存在严重的缺陷&#xff0c;例如输出不可靠、推理能力有限以及缺乏一致的个性或价值观一致性。 为了解决这些限制&#xff0c;研究人员采用了一种名为“人工…...

每日一题~oj(贪心)

对于位置 i来说&#xff0c;如果 不选她&#xff0c;那她的贡献是 vali-1 *2&#xff0c;如果选他 &#xff0c;那么她的贡献是 ai. 每一个数的贡献 是基于前一个数的贡献 来计算的。只要保证这个数的前一个数的贡献是最优的&#xff0c;那么以此类推下去&#xff0c;整体的val…...

成人高考报名条件及收费标准详解

成人高考报名条件及收费标准详解 您想通过成人高考改变自己的命运&#xff0c;但不知道报名条件和收费标准&#xff1f;本文将为您详细介绍成人高考报名条件和收费标准&#xff0c;并为您提供专业的成人教育服务。 深圳成人高考www.shenzhixun.com 成人高考报名条件 成人高考…...

openmetadata1.3.1 自定义连接器 开发教程

openmetadata自定义连接器开发教程 一、开发通用自定义连接器教程 官网教程链接&#xff1a; 1.https://docs.open-metadata.org/v1.3.x/connectors/custom-connectors 2.https://github.com/open-metadata/openmetadata-demo/tree/main/custom-connector &#xff08;一&…...

PostgreSQL 如何优化存储过程的执行效率?

文章目录 一、查询优化1. 正确使用索引2. 避免不必要的全表扫描3. 使用合适的连接方式4. 优化子查询 二、参数传递1. 避免传递大对象2. 参数类型匹配 三、减少数据量处理1. 限制返回结果集2. 提前筛选数据 四、优化逻辑结构1. 分解复杂的存储过程2. 避免过度使用游标 五、事务处…...

普中51单片机:数码管显示原理与实现详解(四)

文章目录 引言数码管的结构数码管的工作原理静态数码管电路图开发板IO连接图代码演示 动态数码管实现步骤数码管驱动方式电路图开发板IO连接图真值表代码演示1代码演示2代码演示3 引言 数码管&#xff08;Seven-Segment Display&#xff09;是一种常见的显示设备&#xff0c;广…...

web缓存代理服务器

一、web缓存代理 web代理的工作机制 代理服务器是一个位于客户端和原始&#xff08;资源&#xff09;服务器之间的服务器&#xff0c;为了从原始服务器取得内容&#xff0c;客户端向代理服务器发送一个请求&#xff0c;并指定目标原始服务器&#xff0c;然后代理服务器向原始…...

容器:queue(队列)

以下是关于queue容器的总结 1、构造函数&#xff1a;queue [queueName] 2、添加、删除元素: push() 、pop() 3、获取队头/队尾元素&#xff1a;front()、back() 4、获取栈的大小&#xff1a;size() 5、判断栈是否为空&#xff1a;empty() #include <iostream> #include …...

探索 WebKit 的后台同步新纪元:Web Periodic Background Synchronization 深度解析

探索 WebKit 的后台同步新纪元&#xff1a;Web Periodic Background Synchronization 深度解析 随着 Web 应用逐渐成为我们日常生活中不可或缺的一部分&#xff0c;用户对应用的响应速度和可靠性有了更高的期待。Web Periodic Background Synchronization API&#xff08;周期…...

ctfshow web入门 web338--web344

web338 原型链污染 comman.js module.exports {copy:copy };function copy(object1, object2){for (let key in object2) {if (key in object2 && key in object1) {copy(object1[key], object2[key])} else {object1[key] object2[key]}}}login.js var express …...

mupdf加载PDF显示中文乱码

现象 加载PDF显示乱码,提示非嵌入字体 non-embedded font using identity encoding调式 在pdf-font.c中加载字体 调试源码发现pdf文档的字体名字居然是GBK&#xff0c;估计又是哪个windows下写的pdf生成工具生成pdf 字体方法&#xff1a; static pdf_font_desc * load_cid…...

常用的限流工具Guava RateLimiter 或Redisson RRateLimiter

在分布式系统和高并发场景中&#xff0c;限流是一个非常常见且重要的需求。以下是一些常用的限流工具和库&#xff0c;包括它们的特点和使用场景&#xff1a; 1. Guava RateLimiter Google 的 Guava 库中的 RateLimiter 是一个简单且高效的限流工具&#xff0c;适用于单节点应…...

卷积神经网络(CNN)和循环神经网络(RNN) 的区别与联系

卷积神经网络&#xff08;CNN&#xff09;和循环神经网络&#xff08;RNN&#xff09;是两种广泛应用于深度学习的神经网络架构&#xff0c;它们在设计理念和应用领域上有显著区别&#xff0c;但也存在一些联系。 ### 卷积神经网络&#xff08;CNN&#xff09; #### 主要特点…...

Unity【入门】场景切换和游戏退出及准备

1、必备知识点场景切换和游戏退出 文章目录 1、必备知识点场景切换和游戏退出1、场景切换2、鼠标隐藏锁定相关3、随机数和自带委托4、模型资源的导入1、模型由什么构成2、Unity支持的模型格式3、如何指导美术同学导出模型4、学习阶段在哪里获取模型资源 2、小项目准备工作需求分…...

Python 函数递归

以下是一个使用递归计算阶乘的 Python 函数示例 &#xff1a; 应用场景&#xff1a; 1. 动态规划问题&#xff1a;在一些需要逐步求解子问题并利用其结果的动态规划场景中&#xff0c;递归可以帮助直观地表达问题的分解和求解过程。 2. 遍历具有递归结构的数据&#xff1a;如递…...

MyBatis(27)如何配置 MyBatis 实现打印可执行的 SQL 语句

在开发过程中&#xff0c;打印可执行的SQL语句对于调试和性能优化是非常有帮助的。MyBatis提供了几种方式来实现SQL语句的打印。 1. 使用日志框架 MyBatis可以通过配置其内部使用的日志框架&#xff08;如Log4j、Logback等&#xff09;来打印SQL语句。这是最常用的方法。 Lo…...

3.js - 裁剪平面(clipIntersection:交集、并集)

看图 代码 // ts-nocheck// 引入three.js import * as THREE from three// 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls// 导入lil.gui import { GUI } from three/examples/jsm/libs/lil-gui.module.min.js// 导入tween import …...

在5G/6G应用中实现高性能放大器的建模挑战

来源&#xff1a;Modelling Challenges for Enabling High Performance Amplifiers in 5G/6G Applications {第28届“集成电路和系统的混合设计”(Mixed Design of Integrated Circuits and Systems)国际会议论文集&#xff0c;2021年6月24日至26日&#xff0c;波兰洛迪} 本文讨…...