ROS实践(二)构建Gazebo机器人模型文件urdf
目录
一、基础语法
1. urdf文件组成
2. robot根标签
3. link 和 joint标签
4. sensor标签
二、 实验:使用launch文件启动rviz查看机器人模型
1. 编写机器人模型的urdf文件。
2. 编写launch文件。
3. 运行launch,查看效果。
URDF(Unified Robot Description Format)是一种基于XML的格式,用于描述机器人模型的结构、关节、连杆和传感器信息,并可以与Gazebo、RViz等仿真环境结合使用。
一、基础语法
1. urdf文件组成
URDF 主要由以下几个核心元素(标签)组成:
(1)一级标签(根标签)
<robot> <!--根标签-->
(2)二级标签
根标签是
robot
,而二级标签通常是在robot
标签内定义的具体组件和元素。以下是一些常见的二级标签:<link> <!-- 定义一个刚体部分 --> <joint> <!-- 定义两个链接之间的连接及其运动方式 --> <sensor> <!-- 定义传感器 --> <transmission> <!-- 定义传动方式,主要用于控制器与电机连接 --> <material> <!-- 定义材质属性 --> <geometry> <!-- 定义几何形状,用于可视化 --> <visual> <!-- 定义视觉表示,用于渲染和模拟 --> <collision> <!-- 定义碰撞体积,用于物理引擎 --> <inertial> <!-- 定义惯性矩阵,用于物理仿真 --> <frame> <!-- 定义坐标系 -->
(3)三级标签
在 URDF 中,三级标签通常是用于具体配置和描述某个二级标签的更多详细信息。以下是一些常见的三级标签,它们一般位于二级标签内部。
<geometry> <!-- 用于定义物体的几何形状 --><box> <!-- 定义立方体的几何形状 --><cylinder> <!-- 定义圆柱体的几何形状 --><sphere> <!-- 定义球形几何形状 --><mesh> <!-- 定义网格形状 --> </geometry><visual> <!-- 定义可视化表示 --><material> <!-- 定义可视化的材质 --><ambient> <!-- 环境光 --><diffuse> <!-- 漫反射光 --><specular> <!-- 高光反射 --></material> </visual><collision> <!-- 定义碰撞体积 --><geometry> <!-- 定义碰撞体积的几何形状 --><box> <!-- 立方体 --><cylinder><!-- 圆柱体 --><sphere> <!-- 球体 --></geometry> </collision><inertial> <!-- 定义惯性属性 --><mass> <!-- 质量 --><inertia> <!-- 惯性矩阵 --> </inertial><origin> <!-- 定义元素在坐标系中的位置和姿态 --><xyz> <!-- 定义位置 --><rpy> <!-- 定义旋转角度 --> </origin><transmission> <!-- 定义传动系统 --><actuator> <!-- 定义执行器 --><hardwareInterface> <!-- 定义硬件接口 --></actuator> </transmission>
2. robot根标签
URDF 中为了保证 XML 语法的完整性,使用
<robot>
标签作为根标签,所有的<link>
和<joint>
以及其他标签都必须包含在<robot>
标签内。在该标签内,可以通过name
属性设置机器人模型的名称。所有其他标签(如<link>
、<joint>
、<material>
、<transmission>
等)都是<robot>
的子级标签。<?xml version="1.0"?> <robot name="simple_robot"> <!-- 名称自定 --><!-- 这里是机器人模型的内容 --> </robot>
3. link 和 joint标签
简述:在机器人模型中,link1
和 link2
分别代表类似于人的大臂和小臂的刚体部分,而 joint
则类似于肘关节,负责连接这两个部件并允许它们相对运动(例如,肘部的弯曲)。
(1)<link>
link
代表机器人中的一个刚性部件,例如机械臂的一个关节、轮式机器人的车轮等。link
主要包含以下元素:
<inertial>
:描述link
的惯性,包括质量、质心和惯性矩阵。<visual>
:定义link
的外观(几何形状、颜色、材质)。<collision>
:定义物理仿真中link
的碰撞形状(通常比visual
简化)。<?xml version="1.0"?> <robot name="simple_robot"><!-- 定义一个 link --><link name="simple_link"><!-- 定义惯性属性 --><inertial><mass value="1.0"/> <!-- 质量 --><origin xyz="0 0 0"/> <!-- 相对坐标 --><inertia ixx="0.1" iyy="0.1" izz="0.1" ixy="0" ixz="0" iyz="0"/> <!-- 惯性矩阵 --></inertial><!-- 定义可视化属性 --><visual><geometry><box size="1 1 1"/> <!-- 立方体形状,尺寸为 1x1x1 --></geometry><material name="green"/> <!-- 绿色 --></visual><!-- 定义碰撞属性 --><collision><geometry><box size="1 1 1"/> <!-- 碰撞盒子,尺寸为 1x1x1 --></geometry></collision></link> </robot>
(2)<joint>
joint
用于连接两个link
,并定义它们的相对运动方式,例如固定连接、旋转或滑动等。joint
主要包含以下元素:
<parent>
:定义joint
连接的父link
。<child>
:定义joint
连接的子link
。<type>
:定义joint
的类型(fixed
、revolute
、prismatic
、continuous
等)。
<origin>
:定义joint
相对于parent
的初始位置。<axis>
(可选):如果是revolute
或prismatic
关节,则定义运动轴。<limit>
(可选):定义joint
的运动范围、速度和力矩限制。<?xml version="1.0"?> <robot name="simple_robot"><!-- 第一个 link --><link name="link1"><visual><geometry><box size="1 1 1"/></geometry></visual></link><!-- 第二个 link --><link name="link2"><visual><geometry><box size="1 1 1"/></geometry></visual></link><!-- 定义关节,连接 link1 和 link2 --><joint name="simple_joint" type="revolute"><parent link="link1"/><child link="link2"/><axis xyz="0 1 0"/> <!-- 旋转轴:绕 y 轴旋转 --><limit lower="-1.57" upper="1.57" effort="10" velocity="1"/> <!-- 旋转范围限制 --></joint> </robot>
4. sensor标签
<sensor>
标签在 URDF 中用于定义机器人上的传感器,例如激光雷达、相机、IMU(惯性测量单元)等。传感器用于模拟机器人感知环境的能力,在 Gazebo 等仿真环境中非常常见。传感器类型如下所示:<sensor type="camera"/> <!-- 相机传感器 --> <sensor type="ray"/> <!-- 激光雷达传感器 --> <sensor type="proximity"/> <!-- 接近传感器 --> <sensor type="imu"/> <!-- 惯性测量单元传感器 --> <sensor type="force_torque"/> <!-- 力与扭矩传感器 --> <sensor type="gps"/> <!-- 全球定位系统传感器 --> <sensor type="contact"/> <!-- 接触传感器 --> <sensor type="barometer"/> <!-- 气压计传感器 --> <sensor type="ultrasonic"/> <!-- 超声波传感器 --> <sensor type="range"/> <!-- 距离传感器 -->
不同类型的传感器(如相机、IMU、激光雷达等)会有不同的子标签和配置项,具体内容会根据传感器的类型而变化。这里将不太过多介绍标签,详细查看其他博客,这里主要是为了让读者了解其结构框架。激光雷达传感器如下所示:
<robot name="example_robot"><!-- 定义一个 Link --><link name="base_link"><visual><geometry><box size="1 1 1"/></geometry></visual></link><!-- 定义一个传感器 (激光雷达) --><sensor name="laser_sensor" type="ray"><origin xyz="0 0 1" rpy="0 0 0"/> <!-- 定义传感器相对于 link 的位置和姿态 --><ray><scan><horizontal><samples value="720"/> <!-- 扫描样本数量 --><resolution value="1"/> <!-- 扫描分辨率 --><min_angle value="-1.5708"/> <!-- 最小扫描角度 (单位: 弧度) --><max_angle value="1.5708"/> <!-- 最大扫描角度 (单位: 弧度) --></horizontal></scan><range><min value="0.1"/> <!-- 最小测距距离 --><max value="10.0"/> <!-- 最大测距距离 --><resolution value="0.01"/> <!-- 测距分辨率 --></range></ray></sensor> </robot>
<sensor>
标签
这是根标签,定义了一个传感器的相关信息。
name
:传感器的名称(在本例中为laser_sensor
)。type
:传感器的类型(在本例中为ray
,表示激光雷达)。
<origin>
标签
这个标签定义了传感器相对于父link
的位置和姿态。
xyz="0 0 1"
:表示传感器在父link
坐标系中的位置。x
、y
和z
表示位置的偏移量。rpy="0 0 0"
:表示传感器的旋转姿态,rpy
表示滚转(roll)、俯仰(pitch)、偏航(yaw)的角度,这里都是 0,表示没有旋转。
<ray>
标签
这个标签用于定义激光传感器的具体扫描行为。
<scan>
标签:定义扫描的相关参数。
<horizontal>
标签:定义水平扫描的参数。
<range>
标签:定义传感器的测距范围。
二、 实验:使用launch文件启动rviz查看机器人模型
注意:什么类型的文件就要放在功能包的什么目录下,没有则手动创建该目录。
1. 编写机器人模型的urdf文件。
my_car.urdf
<?xml version="1.0"?>
<robot name="mybot"> <!-- 定义机器人名称为mybot --><link name="base_footprint"/> <!-- 基础脚印链接,用于表示机器人基座的参考框架 --><joint name="base_joint" type="fixed"> <!-- 固定关节,连接base_footprint和base_link --><parent link="base_footprint"/> <!-- 父链接,表示基座 --><child link="base_link"/> <!-- 子链接,表示机器人主体 --><origin rpy="0 0 0" xyz="0 0 0"/> <!-- 定义关节的相对位置与姿态 --></joint> <link name="base_link"> <!-- 机器人主体链接 --><inertial><origin xyz="0 0 0" rpy="0 0 0"/> <!-- 质量中心的位置与姿态 --><mass value="0.1"/> <!-- 质量 --><inertia ixx="0.0001" ixy="0" ixz="0" iyy="0.0001" iyz="0" izz="0.001" /> <!-- 惯性矩阵 --></inertial><visual> <geometry> <box size="0.25 0.16 0.05"/> <!-- 机器人主体的可视化几何形状,长宽高 --></geometry> <origin rpy="0 0 0" xyz="0 0 0"/> <!-- 可视化位置与姿态 --><material name="blue"> <color rgba="0 0 0.8 1"/> <!-- 可视化颜色,蓝色 --></material> </visual> <collision><origin xyz="0 0 0" rpy="0 0 0"/> <!-- 碰撞模型的相对位置与姿态 --><geometry><box size="0.25 0.16 0.05"/> <!-- 碰撞模型的几何形状 --></geometry></collision></link> <link name="right_wheel_link"> <!-- 右轮链接 --><inertial><origin xyz="0 0 0" rpy="0 0 0"/> <!-- 右轮的质量中心位置与姿态 --><mass value="0.1"/> <!-- 右轮质量 --><inertia ixx="0.0001" ixy="0" ixz="0" iyy="0.0001" iyz="0" izz="0.0001" /> <!-- 右轮惯性矩阵 --></inertial><visual> <geometry> <cylinder length="0.02" radius="0.025"/> <!-- 右轮的可视化几何形状,圆柱 --></geometry> <material name="black"> <color rgba="0 0 0 1"/> <!-- 右轮的颜色,黑色 --></material> </visual> <collision><origin xyz="0 0 0" rpy="0 0 0"/> <!-- 碰撞模型的位置与姿态 --><geometry><cylinder length="0.02" radius="0.025"/> <!-- 碰撞模型为圆柱 --></geometry></collision></link> <joint name="right_wheel_joint" type="continuous"> <!-- 右轮关节,连续旋转 --><axis xyz="0 0 -1"/> <!-- 旋转轴,垂直于地面 --><parent link="base_link"/> <!-- 父链接为机器人主体 --><child link="right_wheel_link"/> <!-- 子链接为右轮 --><origin rpy="1.5707 0 0" xyz=" 0.1 -0.09 -0.03"/> <!-- 关节相对于父链接的相对位置与姿态 --></joint> <link name="left_wheel_link"> <!-- 左轮链接 --><inertial><origin xyz="0 0 0" rpy="0 0 0"/> <!-- 左轮质量中心的位置与姿态 --><mass value="0.1"/> <!-- 左轮质量 --><inertia ixx="0.0001" ixy="0" ixz="0" iyy="0.0001" iyz="0" izz="0.0001" /> <!-- 左轮惯性矩阵 --></inertial><visual> <geometry> <cylinder length="0.02" radius="0.025"/> <!-- 左轮可视化几何形状,圆柱 --></geometry> <material name="black"> <color rgba="0 0 0 1"/> <!-- 左轮颜色,黑色 --></material> </visual> <collision><origin xyz="0 0 0" rpy="0 0 0"/> <!-- 左轮碰撞模型的位置与姿态 --><geometry><cylinder length="0.02" radius="0.025"/> <!-- 碰撞模型为圆柱 --></geometry></collision> </link> <joint name="left_wheel_joint" type="continuous"> <!-- 左轮关节,连续旋转 --><axis xyz="0 0 -1"/> <!-- 旋转轴,垂直于地面 --><parent link="base_link"/> <!-- 父链接为机器人主体 --><child link="left_wheel_link"/> <!-- 子链接为左轮 --><origin rpy="1.5707 0 0" xyz="0.1 0.09 -0.03"/> <!-- 关节相对于父链接的相对位置与姿态 --></joint> <link name="ball_wheel_link"> <!-- 小球轮链接 --><inertial><origin xyz="0 0 0" rpy="0 0 0"/> <!-- 小球轮的质量中心位置与姿态 --><mass value="0.1"/> <!-- 小球轮质量 --><inertia ixx="0" ixy="0" ixz="0" iyy="0" iyz="0" izz="0" /> <!-- 小球轮惯性矩阵,设为零 --></inertial><visual> <geometry> <sphere radius="0.025"/> <!-- 小球轮的可视化几何形状,球形 --></geometry> <material name="black"> <color rgba="0 0 0 1"/> <!-- 小球轮颜色,黑色 --></material> </visual> <collision><origin xyz="0 0 0" rpy="0 0 0"/> <!-- 小球轮的碰撞模型的位置与姿态 --><geometry><sphere radius="0.025"/> <!-- 碰撞模型为球形 --></geometry></collision> </link> <joint name="ball_wheel_joint" type="fixed"> <!-- 小球轮的固定关节 --><axis xyz="0 0 1"/> <!-- 旋转轴,沿Z轴 --><parent link="base_link"/> <!-- 父链接为机器人主体 --><child link="ball_wheel_link"/> <!-- 子链接为小球轮 --><origin rpy="0 0 0" xyz="-0.10 0 -0.03"/> <!-- 关节相对于父链接的相对位置与姿态 --></joint> </robot>
2. 编写launch文件。
mycar_rviz.launch
<launch><!-- 传入参数,决定是否启用图形界面 --><arg name="gui" default="true" /><!-- 加载 URDF 机器人模型 --><param name="robot_description" command="$(find xacro)/xacro $(find my_package)/urdf/my_car.urdf"/><!-- 机器人状态发布器 --><node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"><param name="use_sim_time" value="false"/></node><!-- 关节状态发布器(如果机器人有 Revolute/Prismatic 关节) --><node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher"><param name="use_gui" value="false"/> <!-- 这里设置为 false,避免重复图形化界面 --></node><!-- 关节状态发布器图形界面(可选,基于 "gui" 参数) --><node name="joint_state_publisher_gui" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" if="$(arg gui)" /><!-- 启动 RViz --><node name="rviz" pkg="rviz" type="rviz" required="true"><param name="config" value="$(find my_package)/rviz/robot.rviz"/></node>
</launch>
3. 运行launch,查看效果。
运行完后,界面中没有机器人模型,我们需要先添加模型。
注意:如果没有下面base_link的选项,则关闭重新启动一下launch文件。
相关文章:
ROS实践(二)构建Gazebo机器人模型文件urdf
目录 一、基础语法 1. urdf文件组成 2. robot根标签 3. link 和 joint标签 4. sensor标签 二、 实验:使用launch文件启动rviz查看机器人模型 1. 编写机器人模型的urdf文件。 2. 编写launch文件。 3. 运行launch,查看效果。 URDF(Unifi…...
论文阅读-秦汉时期北方边疆组织的空间互动模式与直道的定位(中国)
论文英文题目:A spatial interaction model of Qin-Han Dynasty organisation on the northern frontier and the location of the Zhidao highway (China) 发表于:journal of archaeological science,影响因子:3.030 论文主要是…...
【MySQL_04】数据库基本操作(用户管理--配置文件--远程连接--数据库信息查看、创建、删除)
文章目录 一、MySQL 用户管理1.1 用户管理1.11 mysql.user表详解1.12 添加用户1.13 修改用户权限1.14 删除用户1.15 密码问题 二、MySQL 配置文件2.1 配置文件位置2.2 配置文件结构2.3 常用配置参数 三、MySQL远程连接四、数据库的查看、创建、删除4.1 查看数据库4.2 创建、删除…...
设计模式之建造者模式:原理、实现与应用
引言 建造者模式(Builder Pattern)是一种创建型设计模式,它通过将复杂对象的构建过程分解为多个简单的步骤,使得对象的创建更加灵活和可维护。建造者模式特别适用于构建具有多个组成部分的复杂对象。本文将深入探讨建造者模式的原…...
2025最新群智能优化算法:山羊优化算法(Goat Optimization Algorithm, GOA)求解23个经典函数测试集,MATLAB
一、山羊优化算法 山羊优化算法(Goat Optimization Algorithm, GOA)是2025年提出的一种新型生物启发式元启发式算法,灵感来源于山羊在恶劣和资源有限环境中的适应性行为。该算法旨在通过模拟山羊的觅食策略、移动模式和躲避寄生虫的能力&…...
Apache Log4j 2
目录 1. Apache Log4j 2 简介 1.1 什么是Log4j 2? 1.2 Log4j 2 的主要特性 2. Log4j 2 的核心组件 2.1 Logger 2.2 Appender 2.3 Layout 2.4 Filter 2.5 Configuration 3. Log4j 2 的配置 4. Log4j 2 的使用示例 4.1 Maven 依赖 4.2 示例代码 4.3 输出…...
ArcGIS Pro字段编号相关代码
一、引言 在地理信息系统(GIS)的数据管理与分析中,字段操作是不可或缺的一环。 SHP文件作为常见的地理数据存储格式,其字段的灵活运用对于数据的组织、展示和分析具有重要意义。 在实际工作中,常常需要对字段进行编…...
ubuntu22.04机器人开发环境配置
1. ros2环境配置(humble) #配置源 # https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debs.html sudo apt install software-properties-common sudo add-apt-repository universe sudo apt update && sudo apt install curl -y# …...
万字深度剖析——JS数据结构(上)
数组本质是对象,键就是索引,值就是元素。 push /unshift 在数组最后/最前添加 pop /shift 把数组最后/最前的元素删除,返回的是被删除的元素 splice(0,2,5)从第0给位置开始删除2个元素,并添加一个元素 数组自带的…...
golang dlv调试工具
golang dlv调试工具 在goland2022.2版本 中调试go程序报错 WARNING: undefined behavior - version of Delve is too old for Go version 1.20.7 (maximum supported version 1.19) 即使你go install了新的dlv也无济于事 分析得出Goland实际使用的是 Goland安装目录下dlv 例…...
【算法 C/C++】二维前缀和
2025 - 03 - 08 - 第 70 篇 Author: 郑龙浩 / 仟濹 【二维前缀和】 文章目录 前缀和与差分 - 我的博客前缀和(二维)1 基本介绍(1) **sum[i][j] 表示什么???**(2) **前缀和怎么求???计算 sum[i][j]…...
如何使用postman来测试接口
一、postman的介绍与下载 可参考: https://blog.csdn.net/freeking101/article/details/80774271 二、api获取网站 阿里云API应用市场 地址:云市场_镜像市场_软件商店_建站软件_服务器软件_API接口_应用市场 - 阿里云 三、具体测试过程 可模拟浏览…...
olmOCR:高效精准的 PDF 文本提取工具
在日常的工作和学习中,是否经常被 PDF 文本提取问题困扰?例如: 想从学术论文 PDF 中提取关键信息,却发现传统 OCR 工具识别不准确或文本格式混乱?需要快速提取商务合同 PDF 中的条款内容,却因工具不给力而…...
Vue项目通过内嵌iframe访问另一个vue页面,获取token适配后端鉴权(以内嵌若依项目举例)
1. 改造子Vue项目进行适配(ruoyi举例) (1) 在路由文件添加需要被外链的vue页面配置 // 若依项目的话是 router/index.js文件 {path: /contrast,component: () > import(/views/contrast/index),hidden: true },(2) 开放白名单 // 若依项目的话是 permission.js 文件 cons…...
请谈谈 HTTP 中的重定向,如何处理 301 和 302 重定向?
HTTP重定向深度解析:301与302的正确使用姿势 一、重定向本质解析 重定向就像快递员送快递时发现地址变更,新地址会写在包裹单的"改派地址"栏。 浏览器收到3xx状态码时,会自动前往Location头指定的新地址。 常用状态码对比&…...
隧道定向号角喇叭为隧道安全保驾护航
隧道广播系统的搭建:科技赋能,打造安全高效的隧道环境。隧道作为现代交通网络的重要组成部分,其安全管理和信息传递的效率直接关系到整个交通系统的运行。然而,隧道环境的特殊性——封闭、狭窄、回声干扰多,使得传统的…...
RuleOS:区块链开发的“破局者”,开启Web3新纪元
RuleOS:区块链开发的“破冰船”,驶向Web3的星辰大海 在区块链技术的浩瀚宇宙中,一群勇敢的探索者正驾驶着一艘名为RuleOS的“破冰船”,冲破传统开发的冰层,驶向Web3的星辰大海。这艘船,正以一种前所未有的姿…...
C#程序结构及基本组成说明
C# 程序的结构主要由以下几个部分组成,以下是对其结构的详细说明和示例: 1. 基本组成部分 命名空间 (Namespace) 用于组织代码,避免命名冲突。通过 using 引入其他命名空间。 using System; // 引入 System 命名空间类 (Class) C# 是面向对象的语言,所有代码必须定义在类或…...
Django与数据库
我叫补三补四,很高兴见到大家,欢迎一起学习交流和进步 今天来讲一讲alpha策略制定后的测试问题 mysql配置 Django模型体现了面向对象的编程技术,是一种面向对象的编程语言和不兼容类型能相互转化的编程技术,这种技术也叫ORM&#…...
力扣热题 100:二叉树专题进阶题解析(后7道)
系列文章目录 力扣热题 100:哈希专题三道题详细解析(JAVA) 力扣热题 100:双指针专题四道题详细解析(JAVA) 力扣热题 100:滑动窗口专题两道题详细解析(JAVA) 力扣热题 100:子串专题三道题详细解析(JAVA) 力…...
Linux——system V共享内存
共享内存区是最快的IPC(进程内通信)形式,不再通过执行进入内核的系统调用来传递彼此的数据 1.共享内存的原理 IPC通信的本质是让不同的进程先看到同一份资源,然后再进行通信,所以想要通过共享内存进行通信,那么第一步一定是让两个…...
【C语言】指针篇
目录 C 语言指针概述指针的声明和初始化声明指针初始化指针 指针的操作解引用操作指针算术运算 指针的用途动态内存分配作为函数参数 指针与数组数组名作为指针通过指针访问数组元素指针算术和数组数组作为函数参数指针数组和数组指针指针数组数组指针 函数指针函数指针的定义和…...
XGBoost介绍
XGBoost:是eXtreme Gradient Boosting(极端梯度提升)的缩写,是一种强大的集成学习(ensemble learning)算法,旨在提高效率、速度和高性能。XGBoost是梯度提升(Gradient Boosting)的优化实现。集成学习将多个弱模型组合起来,形成一个…...
力扣:找到一个数字的 K 美丽值(C++)
一个整数 num 的 k 美丽值定义为 num 中符合以下条件的 子字符串 数目: 子字符串长度为 k 。子字符串能整除 num 。 给你整数 num 和 k ,请你返回 num 的 k 美丽值。 注意: 允许有 前缀 0 。0 不能整除任何值。 一个 子字符串 是一个字符串里…...
数据结构:有序表的合并
前文介绍了《有序表的插入》,本文介绍有序表的合并。这两种对有序表的操作,是数据结构中常考的内容,特别是在 408 考卷中,在算法设计的题目中,有可能会考查对有序表的操作。那么,这两篇文章中的方法就是能够…...
AI写论文提示词指令大全,快速写论文
目录 一、十大学术写作提示词1、研究主题2、研究问题3、论文架构4、学术论证5、文献关键要素6、专业文本可读性转换7、学术语言规范化8、提高语言准确性9、多维度、深层论证10、优化文本结构 二、快速写论文提示词1、确认研究选题2、整理相关资料3、快速完成论文大纲4、整合文献…...
物联网IoT系列之MQTT协议基础知识
文章目录 物联网IoT系列之MQTT协议基础知识物联网IoT是什么?什么是MQTT?为什么说MQTT是适用于物联网的协议?MQTT工作原理核心组件核心机制 MQTT工作流程1. 建立连接2. 发布和订阅3. 消息确认4. 断开连接 MQTT工作流程图MQTT在物联网中的应用 …...
【从零开始学习计算机科学】计算机组成原理(七)存储器与存储器系统
【从零开始学习计算机科学】计算机组成原理(七)存储器与存储器系统 存储器存储器相关概念存储器分类存储器系统存储器性能指标存储器层次概述程序访问的局部性原理SRAM存储器存储器的读写周期DRAM存储器DRAM控制器高性能的主存储器存储器扩展只读存储器ROM光擦可编程只读存储…...
ctf-WEB: 关于 GHCTF Message in a Bottle plus 与 Message in a Bottle 的非官方wp解法
Message in a Bottle from bottle import Bottle, request, template, runapp Bottle()# 存储留言的列表 messages [] def handle_message(message):message_items "".join([f"""<div class"message-card"><div class"me…...
Java集合_八股场景题
Java集合 在Java开发中,集合框架是面试和实际开发中非常重要的内容。以下是一些常见的Java集合八股文问题和场景题,以及详细答案和示例代码。 1. Java集合框架的结构是什么? 答案: Java集合框架主要分为三大接口:Col…...
Scaled_dot_product_attention(SDPA)使用详解
在学习huggingFace的Transformer库时,我们不可避免会遇到scaled_dot_product_attention(SDPA)这个函数,它被用来加速大模型的Attention计算,本文就详细介绍一下它的使用方法,核心内容主要参考了torch.nn.functional中该函数的注释…...
SpringBoot(一)--搭建架构5种方法
目录 一、⭐Idea从spring官网下载打开 2021版本idea 1.打开创建项目 2.修改pom.xml文件里的版本号 2017版本idea 二、从spring官网下载再用idea打开 三、Idea从阿里云的官网下载打开 编辑 四、Maven项目改造成springboot项目 五、从阿里云官网下载再用idea打开 Spri…...
初识大模型——大语言模型 LLMBook 学习(一)
1. 大模型发展历程 🔹 1. 早期阶段(1950s - 1990s):基于规则和统计的方法 代表技术: 1950s-1960s:规则驱动的语言处理 早期的 NLP 主要依赖 基于规则的系统,如 Noam Chomsky 提出的 生成语法&…...
Array and string offset access syntax with curly braces is deprecated
警告信息 “Array and string offset access syntax with curly braces is deprecated” 是 PHP 中的一个弃用警告(Deprecation Notice),表明在 PHP 中使用花括号 {} 来访问数组或字符串的偏移量已经被标记为过时。 背景 在 PHP 的早期版本…...
27. Harmonyos Next仿uv-ui 组件NumberBox 步进器组件禁用状态
温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! 文章目录 1. 组件介绍2. 效果展示3. 禁用状态设置3.1 整体禁用3.2 输入框禁用3.3 长按禁用 4. 完整示例代码5. 知识点讲解5.1 禁用状态属性5.2 禁用…...
Java高频面试之集合-08
hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶 面试官:详细说说CopyOnWriteArrayList CopyOnWriteArrayList 详解 CopyOnWriteArrayList 是 Java 并发包(java.util…...
做到哪一步才算精通SQL
做到哪一步才算精通SQL-Structured Query Language 数据定义语言 DDL for StructCREATE:用来创建数据库、表、索引等对象ALTER:用来修改已存在的数据库对象DROP:用来删除整个数据库或者数据库中的表TRUNCATE:用来删除表中所有的行…...
SpringAI介绍及本地模型使用方法
博客原文地址 前言 Spring在Java语言中一直稳居高位,与AI的洪流碰撞后也产生了一些有趣的”化学反应“,当然你要非要说碰撞属于物理反应也可以, 在经历了一系列复杂的反应方程后,Spring家族的新成员——SpringAI,就…...
空指针异常的触发
面向对象分析: 当你要吃饭,饭是对象,提供吃饭这个功能,所以饭为null时,你去调吃饭这个功能,就是去操作饭这个抽象模型,但这个模型是null,就是空指针异常了,但如果有了饭…...
尚硅谷爬虫note15n
1. 多条管道 多条管道开启(2步): (1)定义管道类 (2)在settings中开启管道 在pipelines中: import urllib.request # 多条管道开启 #(1)定义管道类 #(2)在setti…...
基于SSM+Vue的汽车维修保养预约系统+LW示例
1.项目介绍 系统角色:管理员、员工、用户功能模块:用户管理、员工管理、汽车类型管理、项目类型管理、维修/预约订单管理、系统管理、公告管理等技术选型:SSM,vue(后端管理web),Layuiÿ…...
【商城实战(13)】购物车价格与数量的奥秘
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配…...
在线json转ArkTs-Harmonyos
轻松将 JSON 数据转换为类型安全的 ArkTs 接口。快速准确地生成代码,提升开发效率,告别手动编写,让您的开发流程更加流畅! gotool...
Cannot resolve symbol ‘view‘ Androidstudio报错解决办法
报错原因 出现 Cannot resolve symbol view 错误是因为代码中的 view 变量未正确定义或不在当前作用域内。以下是常见场景和解决方法: 场景 1:在 点击事件监听器 中获取 view 如果代码在 OnClickListener 的 onClick 方法中,view 是方法的参…...
三级缓存架构
三级缓存架构是一种通过分层缓存设计来优化系统性能、降低数据库负载、提高数据访问效率的解决方案,尤其适用于高并发、高吞吐量的业务场景(如电商、社交平台、实时推荐等)。其核心思想是通过多级缓存逐层过滤请求,减少对底层存储…...
webshell一些上传心得
我们以upload-labs为基础 一、前端拦截: 如第一关 工作方式: 直接在前端拦截 绕过方式: 因为没有限制后端,所有可以用bs 绕过前端修改格式即可 将需要上传的php文件改成jpg格式 使用burp suite 拦截上传后,使用re…...
doris:阿里云 MaxCompute
MaxCompute 是阿里云上的企业级 SaaS(Software as a Service)模式云数据仓库。 什么是 MaxCompute 连接 MaxCompute 示例 -- 1. 创建Catalog。 CREATE CATALOG mc PROPERTIES ("type" "max_compute","mc.default.projec…...
MyBatis-Plus 分页查询接口返回值问题剖析
在使用 MyBatis-Plus 进行分页查询时,很多开发者会遇到一个常见的问题:当分页查询接口返回值定义为 Page<T> 时,执行查询会抛出异常;而将返回值修改为 IPage<T> 时,分页查询却能正常工作。本文将从 MyBatis-Plus 的分页机制入手,详细分析这一问题的根源,并提…...
【面试】框架
框架 1、介绍一下Spring 的 IOC2、将一个类声明为 Bean 的注解有哪些3、Bean 的作用域有哪些4、Spring 框架中的 Bean 是线程安全的吗5、Spring 容器对象的懒加载6、Spring 容器中的 bean 生命周期7、谈谈自己对于 Spring DI 的了解8、注入 Bean 的注解有哪些9、Spring Boot 如…...
MWC 2025 | 紫光展锐联合移远通信推出全面支持R16特性的5G模组RG620UA-EU
2025年世界移动通信大会(MWC 2025)期间,紫光展锐联合移远通信,正式发布了全面支持5G R16特性的模组RG620UA-EU,以强大的灵活性和便捷性赋能产业。 展锐芯加持,关键性能优异 RG620UA-EU模组基于紫光展锐V62…...