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

Mujoco robosuite 机器人模型

import ctypes
import os# 获取当前脚本所在的目录
script_dir = os.path.dirname(os.path.abspath(__file__))# 构建库文件的相对路径
lib_relative_path = os.path.join('dynamic_models', 'UR5e', 'Jb.so')# 拼接成完整的路径
lib_path = os.path.join(script_dir, lib_relative_path)try:fun_grav = ctypes.CDLL(lib_path)print("库文件加载成功!")
except OSError as e:print(f"加载库文件时出错: {e}")

<mujoco model="ur5"><compiler angle="radian" meshdir="ur5/collision/" /><size njmax="500" nconmax="100" /><asset><mesh name="base" file="base.stl" /><mesh name="shoulder" file="shoulder.stl" /><mesh name="upperarm" file="upperarm.stl" /><mesh name="forearm" file="forearm.stl" /><mesh name="wrist1" file="wrist1.stl" /><mesh name="wrist2" file="wrist2.stl" /><mesh name="wrist3" file="wrist3.stl" /></asset><worldbody><geom type="mesh" contype="0" conaffinity="0" group="1" rgba="0.7 0.7 0.7 1" mesh="base" /><geom type="mesh" rgba="0.7 0.7 0.7 1" mesh="base" /><body name="shoulder_link" pos="0 0 0.089159"><inertial pos="0 0 0" mass="3.7" diaginertia="0.0102675 0.0102675 0.00666" /><joint name="shoulder_pan_joint" pos="0 0 0" axis="0 0 1" limited="true" range="-3.14159 3.14159" /><geom type="mesh" contype="0" conaffinity="0" group="1" rgba="0.7 0.7 0.7 1" mesh="shoulder" /><geom type="mesh" rgba="0.7 0.7 0.7 1" mesh="shoulder" /><body name="upper_arm_link" pos="0 0.13585 0" quat="0.707107 0 0.707107 0"><inertial pos="0 0 0.28" mass="8.393" diaginertia="0.226891 0.226891 0.0151074" /><joint name="shoulder_lift_joint" pos="0 0 0" axis="0 1 0" limited="true" range="-3.14159 3.14159" /><geom type="mesh" contype="0" conaffinity="0" group="1" rgba="0.7 0.7 0.7 1" mesh="upperarm" /><geom type="mesh" rgba="0.7 0.7 0.7 1" mesh="upperarm" /><body name="forearm_link" pos="0 -0.1197 0.425"><inertial pos="0 0 0.196125" mass="2.275" diaginertia="0.0312168 0.0312168 0.004095" /><joint name="elbow_joint" pos="0 0 0" axis="0 1 0" limited="true" range="-3.14159 3.14159" /><geom type="mesh" contype="0" conaffinity="0" group="1" rgba="0.7 0.7 0.7 1" mesh="forearm" /><geom type="mesh" rgba="0.7 0.7 0.7 1" mesh="forearm" /><body name="wrist_1_link" pos="0 0 0.39225" quat="0.707107 0 0.707107 0"><inertial pos="0 0.093 0" mass="1.219" diaginertia="0.0025599 0.0025599 0.0021942" /><joint name="wrist_1_joint" pos="0 0 0" axis="0 1 0" limited="true" range="-3.14159 3.14159" /><geom type="mesh" contype="0" conaffinity="0" group="1" rgba="0.7 0.7 0.7 1" mesh="wrist1" /><geom type="mesh" rgba="0.7 0.7 0.7 1" mesh="wrist1" /><body name="wrist_2_link" pos="0 0.093 0"><inertial pos="0 0 0.09465" mass="1.219" diaginertia="0.0025599 0.0025599 0.0021942" /><joint name="wrist_2_joint" pos="0 0 0" axis="0 0 1" limited="true" range="-3.14159 3.14159" /><geom type="mesh" contype="0" conaffinity="0" group="1" rgba="0.7 0.7 0.7 1" mesh="wrist2" /><geom type="mesh" rgba="0.7 0.7 0.7 1" mesh="wrist2" /><body name="wrist_3_link" pos="0 0 0.09465"><inertial pos="0 0.06505 0" quat="1.73123e-12 0.707107 -0.707107 1.73123e-12" mass="0.1879" diaginertia="0.000132117 8.46959e-05 8.46959e-05" /><joint name="wrist_3_joint" pos="0 0 0" axis="0 1 0" limited="true" range="-3.14159 3.14159" /><geom type="mesh" contype="0" conaffinity="0" group="1" rgba="0.7 0.7 0.7 1" mesh="wrist3" /><geom type="mesh" rgba="0.7 0.7 0.7 1" mesh="wrist3" /><site name="ee" pos="0 0 0" rgba="1 0 0 1" size="0.01" type="sphere"/></body></body></body></body></body></body></worldbody><actuator><motor name='motor1' ctrllimited="true" ctrlrange="-100 100" joint='shoulder_pan_joint' gear="1"/><motor name='motor2' ctrllimited="true" ctrlrange="-100 100" joint='shoulder_lift_joint' gear="1"/><motor name='motor3' ctrllimited="true" ctrlrange="-100 100" joint='elbow_joint' gear="1"/><motor name='motor4' ctrllimited="true" ctrlrange="-100 100" joint='wrist_1_joint' gear="1"/><motor name='motor5' ctrllimited="true" ctrlrange="-100 100" joint='wrist_2_joint' gear="1"/><motor name='motor6' ctrllimited="true" ctrlrange="-100 100" joint='wrist_3_joint' gear="1"/></actuator>
</mujoco>

雅克比

from dm_control.mujoco.wrapper import mjbindings
import numpy as npmjlib = mjbindings.mjlibdef get_site_jac(model, data, site_id):"""Return the Jacobian' translational component of the end-effector ofthe corresponding site id."""jacp = np.zeros((3, model.nv))jacr = np.zeros((3, model.nv))mjlib.mj_jacSite(model, data, jacp, jacr, site_id)jac = np.vstack([jacp, jacr])return jacdef get_fullM(model, data):M = np.zeros((model.nv, model.nv))mjlib.mj_fullM(model, M, data.qM)return M

任务空间惯量矩阵

def task_space_inertia_matrix(M, J, threshold=1e-3):"""Generate the task-space inertia matrixParameters----------M: np.arraythe generalized coordinates inertia matrixJ: np.arraythe task space Jacobianthreshold: scalar, optional (Default: 1e-3)singular value threshold, if the detminant of Mx_inv is less thanthis value then Mx is calculated using the pseudo-inverse functionand all singular values < threshold * .1 are set = 0"""# calculate the inertia matrix in task spaceM_inv = np.linalg.inv(M)Mx_inv = np.dot(J, np.dot(M_inv, J.T))if abs(np.linalg.det(Mx_inv)) >= threshold:# do the linalg inverse if matrix is non-singular# because it's faster and more accurateMx = np.linalg.inv(Mx_inv)else:# using the rcond to set singular values < thresh to 0# singular values < (rcond * max(singular_values)) set to 0Mx = np.linalg.pinv(Mx_inv, rcond=threshold * 0.1)return Mx, M_inv
def set_state(model, data, qpos, qvel):assert qpos.shape == (model.nq, ) and qvel.shape == (model.nv, )# old_state = data.get_state()# new_state = mujoco.MjSimState(old_state.time, qpos, qvel, old_state.act,#                                  old_state.udd_state)# data.set_state(new_state)# model.forward()data.qpos[:] = qposdata.qvel[:] = qveldef get_contact_force(mj_model, mj_data, body_name):bodyId = mujoco.mj_name2id(mj_model, MJ_BODY_OBJ, body_name)force_com = mj_data.cfrc_ext[bodyId, :]trn_force = force_com.copy()return np.hstack((trn_force[3:], trn_force[:3]))def get_geom_pose(model, geom_name):"""Return the geom pose (relative to parent body).:param mujoco_py.MjModel model::param str geom_name::return: position, quaternion:rtype: tuple(np.array(3), np.array(4))"""geom_id = mujoco.mj_name2id(model, MJ_GEOM_OBJ, geom_name)pos = model.geom_pos[geom_id, :]quat = model.geom_quat[geom_id, :]return pos, quatdef get_geom_size(model, geom_name):"""Return the geom size.:param mujoco_py.MjModel model::param str geom_name::return: (radius, half-length, _) for cylinder geom, and(X half-size; Y half-size; Z half-size) for box geom:rtype: np.array(3)"""geom_id = mujoco.mj_name2id(model, MJ_GEOM_OBJ, geom_name)if model.geom_type[geom_id] == MJ_BOX or model.geom_type[geom_id] == MJ_CYLINDER:return model.geom_size[geom_id, :]else:return Nonedef get_geom_friction(model, geom_name):geom_id = mujoco.mj_name2id(model, MJ_GEOM_OBJ, geom_name)return model.geom_friction[geom_id, :]def get_body_mass(model, body_name):body_id = mujoco.mj_name2id(model, MJ_BODY_OBJ, body_name)return model.body_mass[body_id]def get_body_pose(model, body_name):body_id = mujoco.mj_name2id(model, MJ_BODY_OBJ, body_name)return model.body_pos[body_id], model.body_quat[body_id]def get_mesh_vertex_pos(model, geom_name):geom_id = mujoco.mj_name2id(model, MJ_GEOM_OBJ, geom_name)assert model.geom_type[geom_id] == MJ_MESHmesh_id = model.geom_dataid[geom_id]first_vertex_id = model.mesh_vertadr[mesh_id]no_vertex = model.mesh_vertnum[mesh_id]vertex_pos = model.mesh_vert[first_vertex_id:first_vertex_id + no_vertex]return vertex_posdef set_geom_size(model, geom_name, size):geom_id = mujoco.mj_name2id(model, MJ_GEOM_OBJ, geom_name)model.geom_size[geom_id, :] = sizedef set_body_mass(model, body_name, mass):body_id = mujoco.mj_name2id(model, MJ_BODY_OBJ, body_name)model.body_mass[body_id] = massdef set_geom_friction(model, geom_name, friction):geom_id = mujoco.mj_name2id(model, MJ_GEOM_OBJ, geom_name)model.geom_friction[geom_id, :] = frictiondef set_body_pose(model, body_name, pos, quat):body_id = mujoco.mj_name2id(model, MJ_BODY_OBJ, body_name)model.body_pos[body_id, :] = posmodel.body_quat[body_id, :] = quatdef set_body_pose_rotm(model, body_name, pos, R):quat = mat2quat(R)body_id = mujoco.mj_name2id(model, MJ_BODY_OBJ, body_name)model.body_pos[body_id, :] = posmodel.body_quat[body_id, :] = quat# -------- GEOMETRY TOOLs
def quat_error(q1, q2):"""Compute the rotation vector (expressed in the base frame), that if followin a unit time, will transform a body with orientation `q1` toorientation `q2`:param list/np.ndarray q1: Description of parameter `q1`.:param list/np.ndarray q2: Description of parameter `q2`.:return: a 3D rotation vector:rtype: np.ndarray"""if isinstance(q1, list):q1 = np.array(q1)if isinstance(q2, list):q2 = np.array(q2)dtype = q1.dtypeneg_q1 = np.zeros(4, dtype=dtype)err_rot_quat = np.zeros(4, dtype=dtype)err_rot = np.zeros(3, dtype=dtype)if q1.dot(q2) < 0:q1 = -q1mujoco.mju_negQuat(neg_q1, q1)mujoco.mju_mulQuat(err_rot_quat, q2, neg_q1)mujoco.mju_quat2Vel(err_rot, err_rot_quat, 1)return err_rotdef quat2mat(q):"""Tranform a quaternion to rotation amtrix.:param type q: Description of parameter `q`.:return: 3x3 rotation matrix:rtype: np.array"""mat = np.zeros(9)mujoco.mju_quat2Mat(mat, q)return mat.reshape((3, 3))def pose_transform(p1, q1, p21, q21):"""Coordinate transformation between 2 frames:param np.ndarray p1: position in frame 1:param np.ndarray q1: orientation (quaternion) in frame 1:param np.ndarray p21: relative position between frame 1 and 2:param np.ndarray q21: relative orientation between frame 1 and 2:return: position and orientation in frame 2:rtype: type"""# quat to rotation matrixR21 = quat2mat(q21)p2 = p21 + R21.dot(p1)q2 = np.zeros_like(q1)mujoco.mju_mulQuat(q2, q21, q1)  # q2 = q21*q1return p2, q2def integrate_quat(q, r, dt):"""Integrate quaternion by a fixed angular velocity over the duration dt.:param np.array(4) q: quaternion.:param np.array(3) r: angular velocity.:param float dt: duration.:return: result quaternion.:rtype: np.array(4)"""qres = np.zeros(4)qe = np.zeros(4)r = r * dtangle = np.linalg.norm(r)if angle < 1e-9:# if angle too small then return current qreturn q.copy()axis = r / anglemujoco.mju_axisAngle2Quat(qe, axis, angle)mujoco.mju_mulQuat(qres, qe, q)return qresdef transform_spatial(v1, q21):"""Coordinate transformation of a spatial vector. The spatial vector can be eithertwist (linear + angular velocity) or wrench (force + torque):param type v1: Spatial vector in frame 1:param type q21: transformation matrix (in terms of quaternion):return: Description of returned object.:rtype: type"""R21 = quat2mat(q21)R = np.block([[R21, np.zeros((3, 3))], [np.zeros((3, 3)), R21]])return R.dot(v1)def similarity_transform(A1, q21):"""Similarity transformation of a matrix from frame 1 to frame 2A2 = R21 * A1 * R12:param np.array((3, 3)) A1: 3x3 matrix.:param np.array(4) q21: quaternion representation.:return: 3x3 matrix:rtype: np.array"""R21 = quat2mat(q21)return R21.dot(A1.dot(R21.T))# NOTE: there are infinite rotation vector solutions for a particular
# orientation, the `ref` is to find the closest solution to a reference.
# Is there another minimal representation that could avoid this?
def quat2vec(q, ref=None):"""Transform quaternion representation to rotation vector representation"""r = np.zeros(3)scale = 1mujoco.mju_quat2Vel(r, q, scale)if ref is not None:if r.dot(ref) < 0:angle = np.linalg.norm(r)r = r / angleangle = angle - 2 * np.pir = r * anglereturn rdef inverse_frame(p, q):pi, qi = np.zeros(3), np.zeros(4)mujoco.mju_negPose(pi, qi, p, q)return pi, qidef mat2quat(R):R = R.flatten()q = np.zeros(4)mujoco.mju_mat2Quat(q, R)return qdef mul_quat(q1, q2):q = np.zeros(4)mujoco.mju_mulQuat(q, q1, q2)return q

https://github.com/google-deepmind/mujoco_menageriehttps://github.com/google-deepmind/mujoco_menagerie

https://github.com/ARISE-Initiative/robosuitehttps://github.com/ARISE-Initiative/robosuite

相关文章:

Mujoco robosuite 机器人模型

import ctypes import os# 获取当前脚本所在的目录 script_dir os.path.dirname(os.path.abspath(__file__))# 构建库文件的相对路径 lib_relative_path os.path.join(dynamic_models, UR5e, Jb.so)# 拼接成完整的路径 lib_path os.path.join(script_dir, lib_relative_path…...

进阶篇 第 7 篇 (终章):融会贯通 - 多变量、模型选择与未来之路

进阶篇 第 7 篇 (终章)&#xff1a;融会贯通 - 多变量、模型选择与未来之路 (图片来源: Pixabay on Pexels) 我们已经一起走过了时间序列分析的进阶之旅&#xff01;从深入经典统计模型 ETS、ARIMA、SARIMA&#xff0c;到探索现代利器 Prophet&#xff0c;再到拥抱机器学习和初…...

网络安全·第五天·TCP协议安全分析

一、传输层协议概述 1、功能 传输层负责建立端到端的连接&#xff0c;即应用进程之间的通信&#xff0c;负责数据在端到端之间的传输。与网络层不同的是&#xff0c;网络层负责主机与主机之间的通信。 同时&#xff0c;传输层还要对收到的报文进行差错检测&#xff08;首部和…...

LX10-MDK的使用技巧

MDK5的使用技巧 查找匹配花括号 ​ Ctrle table键的妙用 一次右缩进4个(个人偏好设置)空格shiftenter取消,即左缩进 快速注释/取消注释 先选代码→ 快速编辑一列 按住ALT键选择一列编辑(实用性极强) 窗口拆分 倒数第一个:按列拆分倒数第二个:按行拆分 查找与替换(一个超级…...

IDEA创建Gradle项目然后删除报错解决方法

根据错误信息&#xff0c;你的项目目录中缺少Gradle构建必需的核心文件&#xff08;如settings.gradle/build.gradle&#xff09;&#xff0c;且IDEA可能残留了Gradle的配置。以下是具体解决方案&#xff1a; 一、问题根源分析 残留Gradle配置 你通过IDEA先创建了Gradle子模块…...

JavaScript性能优化实战(2):DOM操作优化策略

浏览器渲染原理与重排重绘机制 浏览器将HTML和CSS转换为用户可见页面的过程是前端开发的基础知识,也是理解DOM性能优化的关键。这个渲染过程大致可分为以下几个步骤: 渲染过程的核心步骤 解析HTML构建DOM树:浏览器解析HTML标记,转换为DOM树(Document Object Model),表…...

乐视系列玩机---乐视1s x500 x501 x502等系列线刷救砖以及刷写第三方twrp 卡刷第三方固件步骤解析

乐视乐1S(X500 x501 x502 等)采用联发科 Helio X10(MT6795T)Turbo 64位8核处理器 通过博文了解💝💝💝 1💝💝💝-----详细解析乐视1s x500 x501x502等系列黑砖线刷救砖的步骤 2💝💝💝----官方两种更新卡刷步骤以及刷写第三方twrp过程与资源 3💝💝…...

Spark-Streaming(1)

Spark Streaming概述&#xff1a; 用于流式计算&#xff0c;处理实时数据流。 数据流以DStream&#xff08;Discretized Stream&#xff09;形式表示&#xff0c;内部由一系列RDD组成。 Spark Streaming特点&#xff1a; 易用、容错、易整合到spark体系。 易用性&#xff1a…...

【Git】Git Revert 命令详解

Git Revert 命令详解 1. Git Revert 的基本概念 Git Revert 是一个用于撤销特定提交的命令。与 Git Reset 不同&#xff0c;Git Revert 不会更改提交历史&#xff0c;而是会创建一个新的提交来撤销指定提交的更改。这意味着&#xff0c;使用 Git Revert 后&#xff0c;项目的…...

SpringClound 微服务分布式Nacos学习笔记

一、基本概述 在实际项目中&#xff0c;选择哪种架构需要根据具体的需求、团队能力和技术栈等因素综合考虑。 单体架构&#xff08;Monolithic Architecture&#xff09; 单体架构是一种传统的软件架构风格&#xff0c;将整个应用程序构建为一个单一的、不可分割的单元。在这…...

PageIndex:构建无需切块向量化的 Agentic RAG

引言 你是否对长篇专业文档的向量数据库检索准确性感到失望&#xff1f;传统的基于向量的RAG系统依赖于语义相似性而非真正的相关性。但在检索中&#xff0c;我们真正需要的是相关性——这需要推理能力。当处理需要领域专业知识和多步推理的专业文档时&#xff0c;相似度搜索常…...

使用Java调用TensorFlow与PyTorch模型:DJL框架的应用探索

在现代机器学习的应用场景中&#xff0c;Python早已成为广泛使用的语言&#xff0c;尤其是在深度学习框架TensorFlow和PyTorch的开发和应用中。尽管Java在许多企业级应用中占据一席之地&#xff0c;但因为缺乏直接使用深度学习框架的能力&#xff0c;往往使得Java开发者对机器学…...

nodejs的包管理工具介绍,npm的介绍和安装,npm的初始化包 ,搜索包,下载安装包

nodejs的包管理工具介绍&#xff0c;npm的介绍和安装&#xff0c;npm的初始化包 &#xff0c;搜索包&#xff0c;下载安装包 &#x1f9f0; 一、Node.js 的包管理工具有哪些&#xff1f; 工具简介是否默认特点npmNode.js 官方的包管理工具&#xff08;Node Package Manager&am…...

LeetCode 热题 100_分割等和子集(89_416_中等_C++)(动态规划)

LeetCode 热题 100_分割等和子集&#xff08;89_416&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;动态规划&#xff09;&#xff1a; 代码实现代码实现&#xff08;思路一&#xff08;动态规划&#xff0…...

EasyCVR视频智能分析平台助力智慧园区:全场景视频监控摄像头融合解决方案

一、方案背景 在智慧园区建设的浪潮下&#xff0c;设备融合、数据整合与智能联动已成为核心诉求。视频监控作为智慧园区的“视觉中枢”&#xff0c;其高效整合直接影响园区的管理效能与安全水平。然而&#xff0c;园区内繁杂的视频监控设备生态——不同品牌、型号、制式的摄像…...

《剥开卷积神经网络CNN的 “千层酥”:从基础架构到核心算法》

文章目录 前言卷积神经网络&#xff08;Convolutional Neural Network&#xff0c;CNN&#xff09;是一种专门用于处理网格结构数据&#xff08;如图像、视频、音频&#xff09;的深度学习模型。它在计算机视觉任务&#xff08;如图像分类、目标检测&#xff09;中表现尤为出色…...

win10中打开python的交互模式

不是输入python3&#xff0c;输入python&#xff0c;不知道和安装python版本有没有关系。做个简单记录&#xff0c;不想记笔记了...

技术与情感交织的一生 (七)

目录 出师 大三 MVP 首战 TYMIS はじめまして 辣子鸡丁 报价 日本人 致命失误 大佬 包围 品质保障 扩军 唯快不破 闪电战 毕业 总攻 Hold On 出师 大三 大三的学习生活&#xff0c;能认认真真的上一天课的时候很少&#xff0c;甚至经常因为客户的 “传呼”…...

ElasticSearch深入解析(一):Elastic Stack全景

一、Elastic Stack的发展 过去和现在&#xff1a; Elastic数据平台在搜索、地理位置、内部日志、数据指标、安全监控和APM应用性能管理等场景中的应用颇具亮点。 APM&#xff08;Application Performance Management&#xff0c;应用性能管理&#xff09;是一种用于监控和管理…...

CAD在线查看免费,可以支持DWG/GLB/GLTF/doc/wps/pdf/psd/eml/zip, rar/MP3/MP4/svg/OBJ/FBX格式

CAD在线查看免费&#xff0c;可以支持DWG/GLB/GLTF/doc/wps/pdf/psd/eml/zip, rar/MP3/MP4/svg/OBJ/FBX格式 m.gszh.xyz m.gszh.xyz 免费支持以下格式文件在线查看类型 支持 doc, docx, xls, xlsx, xlsm, ppt, pptx, csv, tsv, dotm, xlt, xltm, dot, dotx, xlam, xla, pages …...

【机器学习案列-21】基于 LightGBM 的智能手机用户行为分类

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...

多路转接poll服务器

目录 函数原型 poll服务器 对比select的优点 关于select的详解&#xff0c;可查看多路转接select服务器-CSDN博客 函数原型 #include <poll.h> int poll(struct pollfd *fds, nfds_t nfds, int timeout); poll作为多路转接的实现方案&#xff0c;与select要解决的问…...

全本地化智能数字人

&#x1f31f;EdgePersona- 全本地化智能数字人 ​完全离线 | 隐私无忧 | 轻量高效 |笔记本友好 测试效果&#xff1a;【纯本地部署的电子魅魔&#xff01;笔记本也能离线&#xff0c;隐私性拉满】 https://www.bilibili.com/video/BV1jydeYTETD/?share_sourcecopy_web&v…...

第6次课 贪心算法 A

向日葵朝着太阳转动&#xff0c;时刻追求自身成长的最大可能。 贪心策略在一轮轮的简单选择中&#xff0c;逐步导向最佳答案。 课堂学习 引入 贪心算法&#xff08;英语&#xff1a;greedy algorithm&#xff09;&#xff0c;是用计算机来模拟一个「贪心」的人做出决策的过程…...

Docker 部署 PostgreSQL 数据库

Docker 部署 PostgreSQL 数据库 基于 Docker 部署 PostgreSQL 数据库一、拉取 PostgreSQL 镜像二、运行 PostgreSQL 容器三、运行命令参数详解四、查看容器运行状态 基于 Docker 部署 PostgreSQL 数据库 一、拉取 PostgreSQL 镜像 首先&#xff0c;确保你的 Docker 环境已正确…...

Android如何通过aspectj打造一个无侵入式动态权限申请框架

目录 一,背景 二,通过Aspectj管理所有的注解 三,配置注解 四,通过空白Activity完成真正的权限申请 五,引入依赖配置 一,背景 在Activity或者fragment中&#xff0c;写在几个方法写一些注释&#xff0c;用来表示权限申请成功&#xff0c;申请失败&#xff0c;多次拒绝。…...

Flink介绍——实时计算核心论文之Dataflow论文详解

引入 在过去的几篇文章里&#xff0c;我们看到了大数据的流式处理系统是如何一步一步进化的。从最早出现的S4&#xff0c;到能够做到“至少一次”处理的Storm&#xff0c;最后是能够做到“正好一次”数据处理的MillWheel。我们会发现&#xff0c;这些流式处理框架&#xff0c;…...

浅克隆(--depth 1)后如何获取完整的历史记录

如果远程remote为origin&#xff0c;则origin可以不写&#xff0c;如不是&#xff0c;则必须要写 获取全部分支 git fetch origin refs/heads/*:refs/remotes/origin/* 单独获取master分支 git fetch origin refs/heads/master:refs/remotes/origin/master 获取全部历史…...

安宝特案例 | 某知名日系汽车制造厂,借助AR实现智慧化转型

案例介绍 在全球制造业加速数字化的背景下&#xff0c;工厂的生产管理与设备维护效率愈发重要。 某知名日系汽车制造厂当前面临着设备的实时监控、故障维护&#xff0c;以及跨地域的管理协作等挑战&#xff0c;由于场地分散和突发状况的不可预知性&#xff0c;传统方式已无法…...

Feign 深度解析:Java 声明式 HTTP 客户端的终极指南

Feign 深度解析&#xff1a;Java 声明式 HTTP 客户端的终极指南 Feign 是由 Netflix 开源的 ​声明式 HTTP 客户端&#xff0c;后成为 Spring Cloud 生态的核心组件&#xff08;现由 OpenFeign 维护&#xff09;。它通过注解和接口定义简化了服务间 RESTful 通信&#xff0c;并…...

WPS Office安卓版云文档同步速度与PDF转换体验测评

WPS Office安卓版是很多人常用的移动办公软件。它支持在线编辑、文档同步、格式转换等功能&#xff0c;适合手机和平板用户随时处理文档。我们用它配合谷歌浏览器打开网页文档时&#xff0c;也可以将内容快速保存到云端或转换成PDF格式使用。 先说云文档同步。在打开WPS Office…...

ARM汇编的LDM和STM指令

批量加载/存储指令可以实现在一组寄存器和一块连续的内存单元之间传输数据.LDM 为加载多个寄存器&#xff0c;STM 为存储多个寄存器.允许一条指令传送 16 个寄存器的任何子集或所有寄存器.指令格式如下: LDM{cond}<模式> Rn{!},reglist{^} STM{cond}<模式> Rn{!}…...

Python-27:游戏英雄升级潜力评估

问题描述 小U在一款挂机游戏中拥有n个英雄。游戏中有一种历练升级机制&#xff0c;每天可以选择两个英雄进行历练&#xff0c;如果两位英雄的等级相同&#xff0c;则他们的等级都不会改变。如果英雄等级不同&#xff0c;那么等级较高的英雄会增加1级&#xff0c;而等级较低的英…...

【基于SprintBoot+Mybatis+Mysql】电脑商城项目之显示勾选的购物车数据和创建订单

&#x1f9f8;安清h&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;【Spring篇】【计算机网络】【Mybatis篇】 &#x1f6a6;作者简介&#xff1a;一个有趣爱睡觉的intp&#xff0c;期待和更多人分享自己所学知识的真诚大学生。 目录 &#x1f680;1.显示勾选的购物…...

AWS Lambda 架构深入探究

AWS Lambda 是现代云架构中最受欢迎的服务之一&#xff0c;因其能够在完全托管的无服务器环境中运行代码而广受认可。然而&#xff0c;尽管 Lambda 广受欢迎&#xff0c;许多开发者和架构师对它的底层运作机制却知之甚少&#xff0c;常常将其视为“编写能够在云端神奇运行的代码…...

信奥赛CSP-J复赛集训(DP专题)(19):P3399 丝绸之路

信奥赛CSP-J复赛集训&#xff08;DP专题&#xff09;&#xff08;19&#xff09;&#xff1a;P3399 丝绸之路 题目背景 张骞于公元前 138 年曾历尽艰险出使过西域。加强了汉朝与西域各国的友好往来。从那以后&#xff0c;一队队骆驼商队在这漫长的商贸大道上行进&#xff0c;他…...

网络NAT类型测试

免费收录PCDN、GPU算力网站_算力收录站需要专业的PCDN、GPU算力网站收录服务吗&#xff1f;算力收录站为您提供高效、可信赖的收录服务&#xff0c;提升您的网站能见度。https://www.cdngpu.com/ 什么是 NAT&#xff1a;NAT代表网络地址转换&#xff0c;允许多个内网设备共享一…...

Postman下载安装与使用汉化版教程

简介&#xff1a; Postman 是一款常用的 API 测试工具&#xff0c;可以方便地进行接口测试、调试和文档编写。本文将详细介绍如何下载安装 Postman 并汉化&#xff0c;包括每个步骤的详细说明。 Postman 是一款常用的 API 测试工具&#xff0c;可以方便地进行接口测试、调试和…...

使用Python+OpenCV对视频抽帧保存为JPG图像

使用PythonOpenCV对视频抽帧保存为JPG图像 import os import cv2 import time#视频文件夹路径&#xff0c;可修改 videoPath D:\\video\\ #保存的图片文件夹路径&#xff0c;可修改 savePath D:\\images\\ videolist os.listdir(videoPath) if not os.path.exists(savePath…...

Java的反射机制(曼波超易懂图文版)

(✪▽✪)曼波~~~~&#xff01;好的呀~让曼波用最可爱的姿势为你讲解Java反射机制吧&#xff01; &#x1f31f;反射机制核心概念 曼波觉得反射就像编程世界的"魔法镜"(◕ᴗ◕✿) 可以让我们在运行时动态获取类的信息并操作类对象&#xff01; // 举个栗子&#…...

【DeepSeek 学习推理】Llumnix: Dynamic Scheduling for Large Language Model Serving实验部分

6.1 实验设置 测试平台。我们使用阿里云上的16-GPU集群&#xff08;包含4个GPU虚拟机&#xff0c;类型为ecs.gn7i-c32g1.32xlarge&#xff09;。每台虚拟机配备4个NVIDIA A10&#xff08;24 GB&#xff09;GPU&#xff08;通过PCI-e 4.0连接&#xff09;、128个vCPU、752 GB内…...

运行neo4j.bat console 报错无法识别为脚本,PowerShell 教程:查看语言模式并通过注册表修改受限模式

无法将“D:\neo4j-community-4.4.38-windows\bin\Neo4j-Management\Get-Args.ps1”项识别为cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c;然后再试一次。 前提配置好环境变量之后依然报上面的错…...

AI写代码之GO+Python写个爬虫系统

下面我们我们来利用AI&#xff0c;来用GOPython写个爬虫系统。 帮我写一个Python语言爬取数据写入Mysql的案例&#xff0c;信息如下&#xff1a; 1、Mysql数据库地址是&#xff1a;192.168.1.20 &#xff0c;mysql用户名是&#xff1a;root&#xff0c; Mysql密码是&#xff1…...

【FAQ】如何配置PCoIP零客户端AWI能访问

应用场景 在安全性要求较高的环境中&#xff0c;禁用 AWI 并使用 PCoIP 管理控制台配置端点&#xff0c;建议隐藏 OSD 以提高安全性。 通过OSD和AWI: 阻止 PCoIP 管理工具管理 PCoIP 零客户端。禁用对 Tera2 PCoIP Zero Client 的 AWI 的管理访问。下次访问 AWI 或 OSD 时强…...

RAGFlow:构建高效检索增强生成流程的技术解析

引言 在当今信息爆炸的时代&#xff0c;如何从海量数据中快速准确地获取所需信息并生成高质量内容已成为人工智能领域的重要挑战。检索增强生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;技术应运而生&#xff0c;它将信息检索与大型语言模型&#xff08;L…...

go语言中defer使用指南

目录 1.使用场景 2.执行顺序 3.for循环中的defer及defer中的闭包陷阱 4.defer与返回值的关系 5.总结 1.使用场景 在编程的时候&#xff0c;经常需要打开一些资源&#xff0c;比如数据库连接、文件、锁等&#xff0c;这些资源需要在用完之后释放掉&#xff0c;否则会造成内…...

成熟软件项目解决方案:360°全景影像显控软件系统

​若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/147425300 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、Open…...

域名解析体系中 IPv4/IPv6 地址切换的关键技术剖析

前言&#xff1a; 对接的一家学校业务&#xff0c;学校老师要求域名解析既能解析到ipv4地址又能解析到ipv6地址。听学校老师叙述&#xff08;还是会考察v6开通率的&#xff09;&#xff0c;所以通过这个方法来实现的&#xff0c;域名解析到ipv6和ipv4都可以。 准备一台机器 机…...

PHP 爬虫如何获取 1688 商品详情(代码示例)

在电商领域&#xff0c;获取 1688 商品的详细信息对于市场分析、选品上架、库存管理和价格策略制定等方面至关重要。1688 作为国内领先的 B2B 电商平台&#xff0c;提供了丰富的商品数据。通过 PHP 爬虫技术&#xff0c;我们可以高效地获取 1688 商品的详细信息&#xff0c;包括…...

Mysql的redolog

保证事务持久性&#xff0c;用于崩溃恢复&#xff0c;崩溃恢复时&#xff0c;把redo上记载的页读到内存&#xff0c;对其修改&#xff0c;变为脏页&#xff0c;刷盘运用于WAL技术&#xff0c;将随机写改为顺序写 redo log有三种状态&#xff1a; 存在 redo log buffer 中&…...