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

机器人夹爪的选型与ROS通讯——机器人抓取系统基础系列(六)

文章目录

  • 前言
  • 一、夹爪的选型
    • 1.1 任务需求分析
    • 1.2 软体夹爪的选型
  • 二、夹爪的ROS通讯
    • 2.1 夹爪的通信方式介绍
    • 2.2 串口助手测试
    • 2.3 ROS通讯节点实现
  • 总结
  • Reference:


前言

本文将介绍夹爪的选型方法和通讯方式。以鞋子这类操作对象为例,将详细阐述了对应的夹爪选型过程及其ROS通讯控制方法。


一、夹爪的选型

1.1 任务需求分析

夹爪选型的第一步是确定任务需求,然后根据任务需求逐步确定夹爪的要素。
任务需求能够用两类宏观的参数进行概括 [1]:

第一类是描述物体的属性,包括物理属性和几何属性。
1)物理属性包括诸如尺寸、重量、刚度等,对于一些特殊行业可能还要考虑电导率(3C行业)和卫生性(食品行业);
2)几何属性包括形状、粗糙度、结构等。

第二类是描述物体的操作需求,比如
1)放置(例如高精度对准);
2)上料(例如上料物体的定向/非定向状态);
3)搬运(例如提升、移动、重定向)。

以鞋子打包任务为例,被操作对象为鞋子(图1),分析如下:
物体属性:鞋子可变形而且形状不规则,鞋子的重量虽轻,但是其尺寸各异。
操作需求:鞋子的放置虽然不需要高精度,但是从任意初态到打包状态,需要对物体进行重定向。
鞋子的属性

图1:某品牌单只运动鞋的属性。

综合上述两类宏观参数,软体夹爪为优先选择。首先,软体夹爪对于鞋子的形状、刚度、尺寸都具有较好的适应性;其次,在重定向过程中,软体夹爪的柔顺性也能够保护鞋面不被划伤。尽管软体夹爪的夹持力较小并且精度有限,但能够满足该任务的需求。

1.2 软体夹爪的选型

对于软体夹爪,国内的厂家主要有Rochu [2] 和SRT [5] 两家。对于该任务,两家的产品均能满足需求,本文以Rochu夹爪为例,简单展示其选型过程。

根据上述分析,鞋子的长度较长,为了稳定地抓取,最好选择两指并拢的四指布局。同时,Rochu的末端执行器是模块化的,所以要按照模块逐步选择(图2)。

柔触抓取系统

图2:柔触抓取系统 [3]。左:完整的机器人抓取系统。右:机器人末端执行器模块。

针对鞋子打包任务,各模块选择的主要依据如下:
1)手指模块选型的主要依据是鞋子的高度,确保能够有效包络鞋子;
2)滑移安装板选型的主要依据是鞋子的宽度,确保其指间距足够大;
3)法兰连接模块需要考虑其长度对安装的便携性;
4)快换模块对于此任务暂不需要;

综合上述因素,最终确定的柔触夹爪的型号为GC-4FMA6V5/LS1-SMP2L-FCMR03。

温馨提示:
1)柔触夹爪的选型手册下载地址:https://www.rochu.com/fileDownload。
2)对于各模块的选型,相关销售也会辅助决策。

二、夹爪的ROS通讯

2.1 夹爪的通信方式介绍

当机器人的末端执行器确定之后,需要确定其对应的驱动器。本案例选择无源驱动器PCU(图3),其输入包括来自气泵的气体和电脑的控制信号,其输出气体直接控制着夹爪的状态 [4]。
柔触夹爪驱动器

图3:柔触驱动器(PCU)的功能示意图 [4]。

根据驱动器手册 [4],驱动器的控制方式有以下两种:
1)I/O控制方式:通过24VDC电平信号和DB25端口进行控制。
2)Modbus通信方式:通过TCP/RTU-485协议进行通信。

如果要集成到ROS系统,推荐使用Modbus通信方式,因为它提供了更灵活的控制方式,并且可以通过网络进行通信,适合ROS环境中的分布式控制。

在进行通讯测试之前请确保所有的气路连接和通讯连接都已完成。如图3所示,包括进气口和出气口,还有Modbus通信连接线。如果使用Modbus TCP,就准备网线,如果使用Modbus RTU-485,就准备好USB转485的通讯数据线。

本文以Modbus RTU-485通讯方式为例,需要额外准备一根USB转485的通讯数据线,其端口TR+/TR-和DB25的17/18端子线(对应485通讯)连接,以保证信号的转换和传输。

2.2 串口助手测试

在进行ROS通讯之前,最好先进行串口通讯测试,一方面可以测试系统的联通性,另一方面可以熟悉系统的工作特性。其中,夹爪的状态包括open, close, nature三个状态,而夹爪的控制信号是四个,分别是open, relax_open, close, relax_close (如图5(a)所示)。

在Windows上进行串口测试时,首先确保系统的串口驱动已安装,然后再安装串口助手软件(如SSCOM,ECOM等)。串口助手的通讯参数设置如图4(左)所示,发送的十六进制指令的对应功能参考PCU驱动器手册 [4]。

串口助手

图4:串口助手界面。左:Windows中的ECOM串口助手。右:Ubuntu中的CuteCom串口助手。

对于Ubuntu系统,可安装其串口助手如cutecom(图4(右)),进行通讯测试,通讯参数设置和Windows类似。以cutecom串口助手为例,其安装和串口设置如下所示 [6]:

# 安装cutecom
sudo apt-get install cutecom# 编辑串口权限
ls -l /dev/ttyUSB* # 串口查询并设置权限
sudo chmod 777 /dev/ttyUSB0  #根据自己的设备名自行改变# 打开串口
cutecom

注意在cutecom串口中输入的16进制控制指令,要加上末尾的CRC校验码,在图4(左)的Windows串口助手中的历史数据就是包含CRC校验码的数据。这些带CRC校验码的16进制控制指令也将会用到接下来的ROS通讯中。

2.3 ROS通讯节点实现

ROS的serial功能包是一个用于ROS与串行设备进行通信的库。这个库是跨平台的,简单易用,它提供了一个C++的面向对象接口。通过安装serial功能包,可以创建一个串口对象,并通过该对象的成员函数read读取数据。serial功能包的安装指令如下:

sudo apt update
sudo apt install ros-noetic-serial # 注意替换为你的系统名称

这里创建一个专门用于ROS和串行设备通信的功能包,该功能包的消息传输路线如下图5(b)所示,该功能包包括两个节点 [7]。
夹爪不同状态切换和ROS通讯控制

图5:夹爪的不同状态切换和ROS通讯控制功能包。(a)夹爪的三个状态和控制它们之间切换的四个控制指令(通过/gripper_control话题传输给ROS通讯功能包)。(b)控制串口设备(如本文柔触驱动器)的ROS通讯功能包的话题消息传递。

第一个节点负责接受Gripper的指令,Rochu Gripper的四个指令包括open, relax_open, close, relax_close(图5(a)),然后将这些指令转换为对应的Modbus RTU协议格式16进制控制指令发布出去。具体实施代码和详细注释如下所示:

#include <ros/ros.h>
#include <serial/serial.h>
#include <std_msgs/String.h>
#include <std_msgs/Bool.h>
#include <std_msgs/Empty.h>
#include "serial_msgs/serial.h"#define rBUFFERSIZE 8  // 定义接收缓冲区大小
unsigned char r_buffer[rBUFFERSIZE];  // 接收缓冲区
serial::Serial ser;  // 串口对象
std_msgs::String gripper;  // 夹爪控制消息// 订阅者回调函数,接收夹爪控制指令
void write_callback(const std_msgs::String::ConstPtr& msg)
{ROS_INFO_STREAM("写入串口数据: " << msg->data);gripper.data = msg->data;  // 更新夹爪状态
}int main(int argc, char** argv)
{// ROS节点初始化ros::init(argc, argv, "serial_example_node1");ros::NodeHandle nh;// 创建订阅者订阅夹爪控制指令ros::Subscriber write_sub = nh.subscribe("/gripper_control", 10, write_callback);// 创建发布者发布串口消息ros::Publisher msg_pub = nh.advertise<serial_msgs::serial>("read1", 10);// 设置循环频率50Hzros::Rate loop_rate(50);while(ros::ok()){serial_msgs::serial msg;  // 创建串口消息对象msg.serial.clear();      // 清空消息内容ros::spinOnce();  // 处理回调函数// 根据接收到的指令生成对应的串口控制指令if(gripper.data == "close") {          // 闭合夹爪指令r_buffer[0] = 0x01;r_buffer[1] = 0x05;r_buffer[2] = 0x01;r_buffer[3] = 0x00;r_buffer[4] = 0xFF;r_buffer[5] = 0x00;r_buffer[6] = 0x8D;r_buffer[7] = 0xC6;}else if(gripper.data  == "relax_close") { // 松开闭合指令r_buffer[0] = 0x01;r_buffer[1] = 0x05;r_buffer[2] = 0x01;r_buffer[3] = 0x00;r_buffer[4] = 0x00;r_buffer[5] = 0x00;r_buffer[6] = 0xCC;r_buffer[7] = 0x36;}else if(gripper.data  == "open") {      // 打开夹爪指令r_buffer[0] = 0x01;r_buffer[1] = 0x05;r_buffer[2] = 0x01;r_buffer[3] = 0x01;r_buffer[4] = 0xFF;r_buffer[5] = 0x00;r_buffer[6] = 0xDC;r_buffer[7] = 0x06;}else if(gripper.data == "relax_open") { // 松开打开指令r_buffer[0] = 0x01;r_buffer[1] = 0x05;r_buffer[2] = 0x01;r_buffer[3] = 0x01;r_buffer[4] = 0x00;r_buffer[5] = 0x00;r_buffer[6] = 0x9D;r_buffer[7] = 0xF6;}// 将缓冲区数据填充到消息中for(int l=0; l<rBUFFERSIZE; l++) {msg.serial.push_back(r_buffer[l]);}msg_pub.publish(msg);  // 发布串口消息loop_rate.sleep();     // 维持循环频率}
}

第二个节点负责接受第一个节点传过来的控制指令,然后将其通过成员函数read写到串口设备。具体实施代码和详细注释如下所示:

#include "ros/ros.h"
#include "std_msgs/String.h"
#include "serial_msgs/serial.h"
#include <serial/serial.h>
#include <std_msgs/Empty.h>#define sBUFFERSIZE 8       // 定义发送缓冲区大小
unsigned char s_buffer[sBUFFERSIZE]; // 发送缓冲区
serial::Serial ser;         // 串口通信对象// 串口数据回调函数
void chatterCallback(const serial_msgs::serial::ConstPtr& msg)
{ROS_INFO_STREAM("正在写入串口数据");// 将接收到的消息数据复制到发送缓冲区for(int i=0; i<msg->serial.size(); ++i){s_buffer[i] = msg->serial[i];}// 通过串口发送二进制数据ser.write(s_buffer, sBUFFERSIZE);
}int main(int argc, char **argv)
{// ROS节点初始化ros::init(argc, argv, "listen1");ros::NodeHandle n;// 串口配置和初始化try {ser.setPort("/dev/ttyUSB0");    // 设置串口设备ser.setBaudrate(9600);          // 设置波特率serial::Timeout to = serial::Timeout::simpleTimeout(1000);ser.setTimeout(to);             // 设置超时时间ser.open();                    // 打开串口} catch (serial::IOException& e) {ROS_ERROR_STREAM("无法打开串口端口"); // 异常处理return -1;}// 检查串口是否成功打开if(ser.isOpen()) {ROS_INFO_STREAM("串口初始化成功");} else {return -1;}// 创建订阅者,监听read1主题ros::Subscriber sub = n.subscribe("read1", 10, chatterCallback);// 进入ROS事件循环ros::spin();return 0;
}

在调试节点时,可以使用以下常用的关于ros topic的指令来调试:

rostopic list # 列出当前所有活跃的话题。
rostopic info /topic_name # 显示指定话题的详细信息,包括发布者和订阅者。
rostopic echo /topic_name # 打印指定话题上的消息内容。
rostopic pub /topic_name message_type "message_content" # 向指定话题发布消息。message_type 是消息的类型,message_content 是消息内容。

本文中ROS和串口设备(如本文柔触驱动器)通讯的完整功能包下载地址参考博主的博客资源。
本文是以柔触的旧版驱动器(PCU-v1.2.6)开展的实验,注意和新版驱动器的区别。


总结

本文主要讲解了夹爪的选型和通讯控制。首先介绍了如何根据任务需求对夹进行选型,其次以柔触夹爪为例,讲解了其控制方式和ROS通讯控制方法,为类似的夹爪选型和通讯任务提供参考。

Reference:

[1] Fantoni G, Capiferri S, Tilli J. Method for supporting the selection of robot grippers[J]. Procedia CIRP, 2014, 21: 330-335.
[2] 柔触官网:https://www.rochu.com/.
[3] 柔触机器人选型手册V2.6版: https://www.rochu.com/fileDownload.
[4] Rochu用户手册PCU-V1.2.6版: https://www.rochu.com/fileDownload.
[5] SRT官网:https://softrobottech.com/.
[6] Linux下使用可视化的串口调试工具cutecom: https://www.cnblogs.com/Netsharp/p/16010814.html.
[7] 在ROS中与其他器件使用十六进制串口通信 - 代码下载: https://download.csdn.net/download/chduan_10/9920218.

相关文章:

机器人夹爪的选型与ROS通讯——机器人抓取系统基础系列(六)

文章目录 前言一、夹爪的选型1.1 任务需求分析1.2 软体夹爪的选型 二、夹爪的ROS通讯2.1 夹爪的通信方式介绍2.2 串口助手测试2.3 ROS通讯节点实现 总结Reference: 前言 本文将介绍夹爪的选型方法和通讯方式。以鞋子这类操作对象为例&#xff0c;将详细阐述了对应的夹爪选型过…...

第二十八章 RTC——实时时钟

第二十八章 RTC——实时时钟​​​​​​​ 目录 第二十八章 RTC——实时时钟 1 RTC实时时钟简介 2 RTC外设框图剖析 3 UNIX时间戳 4 与RTC控制相关的库函数 4.1 等待时钟同步和操作完成 4.2 使能备份域涉及RTC配置 4.3 设置RTC时钟分频 4.4 设置、获取RTC计数器及闹钟 5 实时时…...

使用 DuckLake 和 DuckDB 构建 S3 数据湖实战指南

本文介绍了由 DuckDB 和 DuckLake 组成的轻量级数据湖方案&#xff0c;旨在解决传统数据湖&#xff08;如HadoopHive&#xff09;元数据管理复杂、查询性能低及厂商锁定等问题。该方案为中小规模数据湖场景提供了简单、高性能且无厂商锁定的替代选择。 1. 什么是 DuckLake 和 D…...

大语言模型提示词(LLM Prompt)工程系统性学习指南:从理论基础到实战应用的完整体系

文章目录 前言&#xff1a;为什么提示词工程成为AI时代的核心技能一、提示词的本质探源&#xff1a;认知科学与逻辑学的理论基础1.1 认知科学视角下的提示词本质信息处理理论的深层机制图式理论的实际应用认知负荷理论的优化策略 1.2 逻辑学框架下的提示词架构形式逻辑的三段论…...

如何基于Mihomo Party http端口配置git与bash命令行代理

如何基于Mihomo Party http端口配置git与bash命令行代理 1. 确定Mihomo Party http端口配置 点击内核设置后即可查看 默认7892端口&#xff0c;开启允许局域网连接 2. 配置git代理 配置本机代理可以使用 127.0.0.1 配置局域网内其它机代理需要使用本机的非回环地址 IP&am…...

CMake 为 Debug 版本的库或可执行文件添加 d 后缀

在使用 CMake 构建项目时,我们经常需要区分 Debug 和 Release 构建版本。一个常见的做法是为 Debug 版本的库或可执行文件添加后缀(如 d),例如 libmylibd.so 或 myappd.exe。 本文将介绍几种在 CMake 中实现为 Debug 版本自动添加 d 后缀的方法。 方法一:使用 CMAKE_DEBU…...

Linux 特殊权限位详解:SetUID, SetGID, Sticky Bit

Linux 特殊权限位详解:SetUID, SetGID, Sticky Bit 在Linux权限系统中,除了基本的读、写(w)、执行(x)权限外,还有三个特殊权限位:SetUID、SetGID和Sticky Bit。这些权限位提供了更精细的权限控制机制,尤其在需要临时提升权限或管理共享资源时非常有用。 一、SetUID (s位…...

埃文科技智能数据引擎产品入选《中国网络安全细分领域产品名录》

嘶吼安全产业研究院发布《中国网络安全细分领域产品名录》&#xff0c;埃文科技智能数据引擎产品成功入选数据分级分类产品名录。 在数字化转型加速的今天&#xff0c;网络安全已成为企业生存与发展的核心基石&#xff0c;为了解这一蓬勃发展的产业格局&#xff0c;嘶吼安全产业…...

使用VTK还是OpenGL集成到qt程序里哪个好?

在Qt程序中集成VTK与OpenGL&#xff1a;选择哪个更好&#xff1f; 在Qt程序中实现三维可视化时&#xff0c;开发者常常面临一个选择&#xff1a;是使用VTK&#xff08;Visualization Toolkit&#xff09;还是OpenGL&#xff08;Open Graphics Library&#xff09;。这两种技术…...

Java-IO流之打印流详解

Java-IO流之打印流详解 一、打印流概述1.1 什么是打印流1.2 打印流的特点1.3 打印流的应用场景 二、PrintStream详解2.1 基本概念2.2 构造函数2.3 核心方法2.4 使用示例 三、PrintWriter详解3.1 基本概念3.2 构造函数3.3 核心方法3.4 使用示例 四、PrintStream与PrintWriter的比…...

高效图像处理:使用 Pillow 进行格式转换与优化

高效图像处理:使用 Pillow 进行格式转换与优化 1. 背景引入 在图像处理应用中,格式转换、裁剪、压缩等操作是常见需求。Python 的 Pillow 库基于 PIL(Python Imaging Library),提供 轻量、强大 的图像处理能力,广泛用于 Web 开发、数据分析、机器学习 等领域。 本文将…...

Github 2025-06-06 Java开源项目日报Top10

根据Github Trendings的统计,今日(2025-06-06统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目10TypeScript项目1Java实现的算法集合:使用Gitpod.io进行编辑和贡献 创建周期:2883 天开发语言:Java协议类型:MIT LicenseStar数量…...

使用 Ansible 在 Windows 服务器上安装 SSL 证书

在本教程中&#xff0c;我将向您展示如何使用 Ansible 在 Windows 服务器上安装 SSL 证书。使用 Ansible 自动化 SSL 证书安装过程可以提高 IT 运营的效率、一致性和协作性。我将介绍以下步骤&#xff1a; 将 SSL 证书文件复制到服务器将 PFX 证书导入指定的存储区获取导入的证…...

厂区能源监控系统:网关赋能下的高效能源管理与环保监测

在现代工业生产领域&#xff0c;能源的有效利用与环境保护是企业实现可持续发展的两大关键要素。厂区能源监控系统借助先进的信息技术与自动化控制手段&#xff0c;对厂区内能源消耗及污水处理等核心环节展开实时监控与精细化管理。其中&#xff0c;御控网关作为系统关键枢纽&a…...

CentOS 7 如何安装llvm-project-10.0.0?

CentOS 7 如何安装llvm-project-10.0.0&#xff1f; 需要先升级gcc至7.5版本&#xff0c;详见CentOS 7如何编译安装升级gcc版本?一文 # 备份之前的yum .repo文件至 /tmp/repo_bak 目录 mkdir -p /tmp/repo_bak && cd /etc/yum.repo.d && /bin/mv ./*.repo …...

Cursor 1.0 的核心功能亮点及技术价值分析

Cursor 1.0 的核心功能亮点及技术价值分析 结合官方更新和开发者实测整理&#xff1a; &#x1f6e0;️ 一、BugBot&#xff1a;智能自动化代码审查 功能亮点&#xff1a;深度集成 GitHub&#xff0c;自动扫描 Pull Request&#xff08;PR&#xff09;中的潜在 Bug&#xff08;…...

软考 系统架构设计师系列知识点之杂项集萃(83)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之杂项集萃&#xff08;82&#xff09; 第150题 体系结构权衡分析方法&#xff08;Architecture Tradeoff Analysis Method&#xff0c;ATAM&#xff09;是一种常见的系统架构评估框架&#xff0c;该框架主要关注系统的…...

NLP学习路线图(二十六):自注意力机制

一、为何需要你&#xff1f;序列建模的困境 在你出现之前&#xff0c;循环神经网络&#xff08;RNN&#xff09;及其变种LSTM、GRU是处理序列数据&#xff08;如文本、语音、时间序列&#xff09;的主流工具。它们按顺序逐个处理输入元素&#xff0c;将历史信息压缩在一个隐藏…...

Unity3D仿星露谷物语开发60之定制角色其他部位

1、目标 上一篇中定制了角色的衬衫、手臂。 本篇中将定制角色其他部位的图形&#xff0c;包括&#xff1a;裤子、发型、皮肤、帽子等。 2、定制裤子 &#xff08;1&#xff09;修改ApplyCharacterCustomisation.cs脚本 我们需要设置一个输入框选择裤子的颜色。 // Select …...

C++动态链接库封装,供C#/C++ 等编程语言使用——C++动态链接库概述(总)

目录&#xff1a; 一、前言及背景1.1需求描述1.2常见编程语言对比1.3应用背景 二、C对外接口2.1C对外封装2.2基于目标平台封装接口形式 三、系列文章汇总 一、前言及背景 1.1需求描述 不同的编程语言&#xff0c;具有不同的编程生态环境&#xff0c;对于项目应用来说&#xff…...

Google机器学习实践指南(机器学习模型泛化能力)

&#x1f525; Google机器学习(14)-机器学习模型泛化能力解析 Google机器学习(14)-机器学习模型泛化原理与优化&#xff08;约10分钟&#xff09; 一、泛化问题引入 ▲ 模型表现对比&#xff1a; 假设森林中树木健康状况预测模型&#xff1a; 图1&#xff1a;初始模型表现 …...

MySQL性能调优:Mysql8高频面试题汇总

1&#xff0c;主键和唯一键有什么区别&#xff1f; 主键不能重复&#xff0c;不能为空&#xff0c;唯一键不能重复&#xff0c;可以为空。 建立主键的目的是让外键来引用。 一个表最多只有一个主键&#xff0c;但可以有很多唯一键 2&#xff0c;MySQL常用的存储引擎有哪些&…...

Neo4j 数据建模:原理、技术与实践指南

Neo4j 作为领先的图数据库,其核心优势在于利用图结构直观地表达和高效地查询复杂关系。其数据建模理念与传统关系型数据库截然不同,专注于实体(节点)及其连接(关系)。以下基于官方文档,系统阐述其建模原理、关键技术、实用技巧及最佳实践: 一、 核心原理:以关系为中心…...

【数据结构知识分享】顺序表详解

一、存储结构 物理相邻性&#xff1a; 若元素 a 和 b 逻辑相邻&#xff0c;则它们在内存中的地址也连续&#xff08;如 &a[i1] &a[i] sizeof(ElemType)&#xff09;。 内存布局x&#xff1a; 基地址 索引 元素大小&#xff0c;通过首地址直接计算任意位置地址。 …...

vue+elementUI+springboot实现文件合并前端展示文件类型

项目场景&#xff1a; element的table上传文件并渲染出文件名称点击所属行可以查看文件,并且可以导出合并文件,此文章是记录合并文档前端展示的帖子 解决方案&#xff1a; 后端定义三个工具类 分别是pdf,doc和word的excle的目前我没整 word的工具类 package com.sc.modules…...

高效绘制业务流程图!专业模板免费下载

在复杂的业务流程管理中&#xff0c;可视化工具已成为提升效能的核心基础设施。为助力开发者、项目经理及业务架构师高效落地流程标准化&#xff0c;本文将为你精选5套开箱即用的专业流程图模板。这些模板覆盖跨部门协作、电商订单、客户服务等高频场景&#xff0c;具备以下核心…...

Spring Boot + Prometheus 实现应用监控(基于 Actuator 和 Micrometer)

文章目录 Spring Boot Prometheus 实现应用监控&#xff08;基于 Actuator 和 Micrometer&#xff09;环境准备示例结构启动和验证验证 Spring Boot 应用Prometheus 抓取配置&#xff08;静态方式&#xff09;Grafana 面板配置总结 Spring Boot Prometheus 实现应用监控&…...

PowerBI企业运营分析—列互换式中国式报表分析

PowerBI企业运营分析—列互换式中国式报表分析 欢迎来到Powerbi小课堂&#xff0c;在竞争激烈的市场环境中&#xff0c;企业运营分析平台成为提升竞争力的核心工具。 该平台通过高效整合多源数据&#xff0c;并实时监控关键指标&#xff0c;能够迅速揭示业务表现的全貌&#…...

BugKu Web渗透之需要管理员

启动场景&#xff0c;打开网页&#xff0c;显示如下&#xff1a; 一般没有上面头绪的时候&#xff0c;就是两步&#xff1a;右键查看源代码 和 扫描网站目录。 步骤一&#xff1a; 右键查看源代码 和 扫描网站目录。 右键查看源代码没有发现异常。 于是扫描网站目录&…...

Java集合初始化:Lists.newArrayList vs new ArrayList()

文章目录 前言一、核心区别全景图二、代码实现深度对比1. 初始化方式对比2. 容量预分配机制 三、性能与底层原理1. 内存分配策略2. 基准测试数据&#xff08;JMH&#xff09; 四、Guava的进阶功能生态1. 集合转换2. 集合分片3. 不可变集合创建 五、最佳实践指南六、源码级实现解…...