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

实现时间最优轨迹生成/轨迹规划方法(TOTG),不使用moveit,可用于ROS驱动机械臂FollowJointTrajectoryGoal()

前言

在我的这篇文章:https://blog.csdn.net/weixin_45702459/article/details/139293391?spm=1011.2415.3001.5331中,写了不使用moveit来ros驱动机械臂的方法,也就是用FollowJointTrajectoryGoal()来进行一系列点的关节运动,其实这个就是moveit做机械臂控制的内部方法,只是moveit把规划和控制集成到了一起罢了。在我之前的这个代码中,只是传入了路径点,并没有做速度规划,所以导致机械臂每到一个点都会完全停止,之后再运行到下一个点,这个问题在轨迹点间隔较大的情况下其实还不明显,但如果轨迹点之间距离较近,那么卡顿感就会特别明显,卡顿的情况下速度也没法设置地很快,因为会震荡。对FollowJointTrajectoryGoal()进行smooth的相关的教程我全网都没有找到,github和ros网页上也只有人发问,没有什么具体的可行答案,索性自己记录一下以供后人参考。

查看moveit的轨迹运行信息

这里使用gazebo仿真即可,gazebo里就可以看见机械臂运行轨迹的柔顺性。运行以下UR5+moveit+gazebo的roslaunch,这里默认你已经安装好相关的包,还没有的话可以查看我的文章,很快就能装完。 https://blog.csdn.net/weixin_45702459/article/details/139293391?spm=1011.2415.3001.5331

ur5_sim.launch

<launch><!-- 启动UR5仿真 --><include file="$(find ur_gazebo)/launch/ur5_bringup.launch" /><!-- 设置参数 --><rosparam param="/sim">true</rosparam><!-- 启动MoveIt!规划和执行 --><include file="$(find ur5_moveit_config)/launch/moveit_planning_execution.launch"><arg name="sim" value="true"/></include><!-- 启动RViz --><include file="$(find ur5_moveit_config)/launch/moveit_rviz.launch" />
</launch>

这里注意下,<rosparam param="/sim">true</rosparam>这个参数是我自己加的,主要是判断是仿真还是真实机械臂,对程序运行没有影响。

再echo出moveit的FollowJointTrajectoryGoal()信息

rostopic echo /eff_joint_traj_controller/follow_joint_trajectory/goal

在rviz中拖动关节并执行会发现moveit的轨迹是带有速度,加速度,时间信息的。

moveit的轨迹规划方法

这两个网页说明了moveit就是用TOTG系列方法完成的轨迹规划 https://docs.ros.org/en/melodic/api/moveit_tutorials/html/doc/time_parameterization/time_parameterization_tutorial.html https://moveit.picknik.ai/main/doc/concepts/trajectory_processing.html

具体的轨迹规划模块在moveit-noetic-devel\moveit_core\trajectory_processing中,单拎出来是可以编译并跑test的,但是这不是文章的重点,所以跑通过程忽略,后续也不用这个模块。

安装TOTG的python库

使用这个库实现:https://github.com/balakumar-s/trajectory_smoothing

作者在dist中给了.whl的python包,但也可以下载下来直接使用pip install .进行安装:

pip install trajectory_smoothing@git+https://github.com/balakumar-s/trajectory_smoothing.git
pip install .

作者还给了ros1的包,但是个人感觉不如python库灵活性好,一是因为ros包比较老,二是因为如果以后不用ros了也可以用。

在安装完之后不要直接运行作者给出的example,因为会报错

/usr/bin/python3.8 /home/lu/trajectory_smoothing/examples/smooth_example.py 
Traceback (most recent call last):File "/home/lu/trajectory_smoothing/examples/smooth_example.py", line 1, in <module>from trajectory_smoothing import TrajectorySmootherFile "/home/lu/trajectory_smoothing/src/trajectory_smoothing/__init__.py", line 1, in <module>from trajectory import TrajectorySmoother, SmoothResult
ModuleNotFoundError: No module named 'trajectory'

把__init__.py重命名为其他名字比如__init__1.py

发现example可以正常运行。

进行轨迹规划

首先写一个轨迹规划的函数,输入是n*dof的轨迹点,类型是ndarray,输出是一个结构,包含轨迹点,加速度,速度,持续时间。最大速度,最大加速度等信息需要自己设置,具体可以问ai。

traj_plan.py

from trajectory_smoothing import TrajectorySmoother
import numpy as np
from typing import NamedTuple
from ros_config import velocity_limit, acceleration_limit# 定义返回的数据结构
class TrajectoryResult(NamedTuple):positions: np.ndarray  # 位置序列 (n_points x n_dof)velocities: np.ndarray  # 速度序列 (n_points x n_dof)accelerations: np.ndarray  # 加速度序列 (n_points x n_dof)time: np.ndarray  # 时间点序列 (n_points,)total_duration: float  # 总持续时间success: bool  # 是否成功生成轨迹def generate_optimal_trajectory(waypoints: np.ndarray,max_velocity = velocity_limit,max_acceleration = acceleration_limit,max_deviation: float = 0.1,interpolation_dt: float = 0.01,traj_dt: float = 0.001
) -> TrajectoryResult:"""生成时间最优轨迹参数:waypoints: 轨迹点数组 (n_points x n_dof)max_velocity: 各关节最大速度 (标量或数组)max_acceleration: 各关节最大加速度 (标量或数组)max_deviation: 允许的最大轨迹偏差interpolation_dt: 插值时间步长traj_dt: 轨迹计算时间步长返回:TrajectoryResult 包含位置、速度、加速度和时间信息"""# 获取自由度数dof = waypoints.shape[1]# 处理最大速度参数if isinstance(max_velocity, (int, float)):max_velocity = np.full(dof, max_velocity, dtype=np.float32)elif isinstance(max_velocity, (list, np.ndarray)):if len(max_velocity) != dof:raise ValueError(f"max_velocity 长度为 {len(max_velocity)},但期望是自由度 {dof}")max_velocity = np.array(max_velocity, dtype=np.float32)else:raise TypeError("max_velocity 必须是标量、列表或 ndarray")# 处理最大加速度参数if isinstance(max_acceleration, (int, float)):max_acceleration = np.full(dof, max_acceleration, dtype=np.float32)elif isinstance(max_acceleration, (list, np.ndarray)):if len(max_acceleration) != dof:raise ValueError(f"max_acceleration 长度为 {len(max_acceleration)},但期望是自由度 {dof}")max_acceleration = np.array(max_acceleration, dtype=np.float32)else:raise TypeError("max_acceleration 必须是标量、列表或 ndarray")# 创建轨迹平滑器trajectory_sm = TrajectorySmoother(dof, max_velocity, max_acceleration, max_deviation)# 生成平滑轨迹result = trajectory_sm.smooth_interpolate(waypoints, interpolation_dt=interpolation_dt, traj_dt=traj_dt)# 计算时间序列time_points = np.arange(result.length) * interpolation_dt# 返回结构化数据return TrajectoryResult(positions=result.position,velocities=result.velocity,accelerations=result.acceleration,time=time_points,total_duration=time_points[-1],success=result.success)# 使用示例
if __name__ == "__main__":# 创建测试轨迹点 (20个点,6自由度)n_points = 20dof = 6waypoints = np.zeros((n_points, dof))# 第一个关节从0到1线性运动waypoints[:, 0] = np.linspace(0, 1, n_points)# 生成轨迹traj_result = generate_optimal_trajectory(waypoints,max_velocity=1.5,max_acceleration=0.1)if traj_result.success:print(f"轨迹生成成功,总持续时间: {traj_result.total_duration:.2f}s")# 可视化第一个关节的结果import matplotlib.pyplot as pltfig, ax = plt.subplots(3, 1, figsize=(8, 8))ax[0].plot(traj_result.time, traj_result.positions[:, 0], label="Position")ax[1].plot(traj_result.time, traj_result.velocities[:, 0], label="Velocity")ax[2].plot(traj_result.time, traj_result.accelerations[:, 0], label="Acceleration")ax[0].set_ylabel("Position (rad)")ax[1].set_ylabel("Velocity (rad/s)")ax[2].set_ylabel("Acceleration (rad/s²)")ax[2].set_xlabel("Time (s)")for a in ax:a.legend()a.grid(True)plt.tight_layout()plt.savefig("trajectory_profile.png")plt.show()else:print("轨迹生成失败")

这是我设置的参数:

velocity_limit = [1.0, 1.0, 1.5, 1.5, 2.5, 2.5]
acceleration_limit = [0.2, 0.2, 0.3, 0.3, 0.8, 0.8]

这是我调用轨迹规划函数的FollowJointTrajectoryGoal()部分

def move(Positions):# goal就是我们向发送的关节运动数据,实例化为FollowJointTrajectoryGoal()类goal = FollowJointTrajectoryGoal()# goal当中的trajectory就是我们要操作的,其余的Header之类的不用管goal.trajectory = JointTrajectory()# goal.trajectory底下一共还有两个成员,分别是joint_names和points,先给joint_names赋值goal.trajectory.joint_names = JOINT_NAMES# # 从joint_state话题上获取当前的关节角度值,因为后续要移动关节时第一个值要为当前的角度值# joint_states = rospy.wait_for_message("joint_states", JointState)# joints_pos = joint_states.position# print("here")## Positions.insert(0, joints_pos)#轨迹规划waypoints = np.array(Positions, dtype=np.float32)traj_result = generate_optimal_trajectory(waypoints)goal.trajectory.points = []for i in range(len(traj_result.positions)):point = JointTrajectoryPoint(positions=traj_result.positions[i].tolist(),velocities=traj_result.velocities[i].tolist(),accelerations=traj_result.accelerations[i].tolist(),time_from_start=rospy.Duration(float(traj_result.time[i])))goal.trajectory.points.append(point)# 没有轨迹规划的版本# # print(Positions)# goal.trajectory.points = [0] * (len(Positions) + 1)  # 填充用的# goal.trajectory.points[0] = JointTrajectoryPoint(positions=joints_pos, velocities=[0] * 6, accelerations=[0] * 6,#                                                  time_from_start=rospy.Duration(0.0))# # goal.trajectory.points=[0]*(len(Positions))# for i in range(len(Positions)):#     goal.trajectory.points[i + 1] = JointTrajectoryPoint(positions=Positions[i], velocities=[0.1] * 6,#                                                          accelerations=[0.] * 6,#                                                          time_from_start=rospy.Duration(float((i + 1) * 0.15)))# 使用partial包装回调函数,传递额外的goal_positionsfeedback_cb_with_args = partial(feedback_callback, goal_positions=Positions)client.send_goal(goal, feedback_cb=feedback_cb_with_args)

运行后可以在gazebo中看到机械臂柔顺地执行轨迹。

相关文章:

实现时间最优轨迹生成/轨迹规划方法(TOTG),不使用moveit,可用于ROS驱动机械臂FollowJointTrajectoryGoal()

前言 在我的这篇文章&#xff1a;https://blog.csdn.net/weixin_45702459/article/details/139293391?spm1011.2415.3001.5331中&#xff0c;写了不使用moveit来ros驱动机械臂的方法&#xff0c;也就是用FollowJointTrajectoryGoal()来进行一系列点的关节运动&#xff0c;其实…...

2025年推荐使用的开源大语言模型top20:核心特性、选择指标和开源优势

李升伟 编译 随着人工智能技术的持续发展&#xff0c;开源大型语言模型&#xff08;LLMs&#xff09;正变得愈发强大&#xff0c;使最先进的AI能力得以普及。到2025年&#xff0c;开源生态系统中涌现出多个关键模型&#xff0c;它们在各类应用场景中展现出独特优势。 大型语言…...

高并发多级缓存架构实现思路

目录 1.整体架构 3.安装环境 1.1 使用docket安装redis 1.2 配置redis缓存链接&#xff1a; 1.3 使用redisTemplate实现 1.4 缓存注解优化 1.4.1 常用缓存注解简绍 1.4.2 EnableCaching注解的使用 1.4.3使用Cacheable 1.4.4CachePut注解的使用 1.4.5 优化 2.安装Ngin…...

Qt 的 事件队列

Qt 的 事件队列 是其核心事件处理机制之一&#xff0c;用于管理和分发系统与用户生成的事件&#xff08;如鼠标点击、键盘输入、定时器、信号槽中的队列连接等&#xff09;。理解 Qt 的事件队列对多线程、界面响应以及异步处理尤为关键。 一、Qt 的事件处理模型概览 Qt 是基于…...

html-css样式

1. 所有类型为文本的 元素的样式 指定所有类型为文本的 元素的样式 /* 文本框的样式 */ input[type"text"] { font-size: 25px;width: 80px; /* 文本框的宽度 */ padding: 25px; } font-size&#xff1a;字体大小 width&#xff1a;文本框宽度 padding&#…...

Qemu-STM32(十五):STM32F103加入Flash控制器

概述 本文主要描述了在Qemu平台中&#xff0c;如何添加STM32F103的Flash控制器模拟代码。 参考资料 STM32F1XX TRM手册&#xff0c;手册编号&#xff1a;RM0008 添加步骤 1、在hw/arm/Kconfig文件中添加STM32F1XX_FLASH&#xff0c;如下所示: 号部分为新增加内容 diff -…...

设计模式(责任链模式)

责任链模式 模板模式、策略模式和责任链模式&#xff0c;这三种模式具有相同的作用&#xff1a;复用和扩展&#xff0c;在实际的项目开发中比较常用&#xff0c;特别是框架开发中&#xff0c;我们可以利用它们来提供框架的扩展点&#xff0c;能够让框架的使用者在不修改框架源…...

【Mac-ML-DL】深度学习使用MPS出现内存泄露(leaked semaphore)以及张量转换错误

MPS加速修改总结 先说设备&#xff1a;MacBook Pro M4 24GB 事情的起因是我在进行深度学习的时候想尝试用苹果自带的MPS进行训练加速&#xff0c;修改设备后准备开始训练&#xff0c;但是出现如下报错&#xff1a; UserWarning: resource_tracker: There appear to be 1 leak…...

Hadoop集群部署教程-P5

Hadoop集群部署教程-P5 Hadoop集群部署教程&#xff08;续&#xff09; 第十七章&#xff1a;安全增强配置 17.1 认证与授权 Kerberos认证集成&#xff1a; # 生成keytab文件 kadmin -q "addprinc -randkey hdfs/masterEXAMPLE.COM" kadmin -q "xst -k hdfs.…...

Github 2FA(Two-Factor Authentication/两因素认证)

Github 2FA认证 多因素用户认证(Multi-Factor Authentication)&#xff0c;基本上各个大互联网平台&#xff0c;尤其是云平台厂商&#xff08;如&#xff1a;阿里云的MFA、华为云、腾讯云/QQ安全中心等&#xff09;都有启用了&#xff0c;Github算是搞得比较晚些了。 双因素身…...

Spark大数据分析与实战笔记(第四章 Spark SQL结构化数据文件处理-05)

文章目录 每日一句正能量第4章 Spark SQL结构化数据文件处理章节概要4.5 Spark SQL操作数据源4.5.1 Spark SQL操作MySQL4.5.2 操作Hive数据集 每日一句正能量 努力学习&#xff0c;勤奋工作&#xff0c;让青春更加光彩。 第4章 Spark SQL结构化数据文件处理 章节概要 在很多情…...

使用 Azure AKS 保护 Kubernetes 部署的综合指南

企业不断寻求增强其软件开发和部署流程的方法。DevOps 一直是这一转型的基石&#xff0c;弥合了开发与运营之间的差距。然而&#xff0c;随着安全威胁日益复杂&#xff0c;将安全性集成到 DevOps 流水线&#xff08;通常称为 DevSecOps&#xff09;已变得势在必行。本指南深入探…...

遵守 Vue3 的单向数据流原则:父组件传递对象 + 子组件修改对象属性,安全地实现父子组件之间复杂对象的双向绑定示例代码及讲解

以下是针对 父组件传递对象 子组件修改对象属性 的完整示例代码&#xff0c;同时遵守 Vue3 的单向数据流原则&#xff1a; 1. 父组件代码 (ParentComponent.vue) vue <template><!-- 通过 v-model 传递整个对象 --><ChildComponent v-model"formData&qu…...

Unchained 内容全面上链,携手 Walrus 迈入去中心化媒体新时代

加密新闻媒体 Unchained — — 业内最受信赖的声音之一 — — 现已选择 Walrus 作为其去中心化存储解决方案&#xff0c;正式将其所有媒体内容&#xff08;文章、播客和视频&#xff09;上链存储。Walrus 将替代 Unchained 现有的中心化存储架构&#xff0c;接管其全部历史内容…...

20.3 使用技巧2

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的 20.3.3 修改表头单元格 设置列表头单元格的内容&#xff1a; 一是可以通过 DataGridView.Columns[列号].HeaderCell来获得对应列的单…...

【Axure绘制原型】小图标使用技巧

获取小图标的网站&#xff1a;https://www.iconfont.cn/ 搜索相关图标 点击下载-复制SVG代码 回到Axure软件中粘贴&#xff0c;此时会显示出图片 在Axure软件中右键-变换图片-转换为形状 即可...

音视频之H.265/HEVC预测编码

H.265/HEVC系列文章&#xff1a; 1、音视频之H.265/HEVC编码框架及编码视频格式 2、音视频之H.265码流分析及解析 3、音视频之H.265/HEVC预测编码 预测编码是视频编码中的核心技术之一。对于视频信号来说&#xff0c;一幅图像内邻近像素之间有着较强的空间相关性,相邻图像之…...

无人机遥感与传统卫星遥感:谁更适合你的需求?

在对地观测领域&#xff0c;无人机遥感和卫星遥感是两种重要的技术手段&#xff0c;各自具有独特的技术原理、性能特点和应用优势。本文将从技术原理、性能特点和应用场景三个方面&#xff0c;对无人机遥感和卫星遥感进行系统对比&#xff0c;帮助读者全面了解两种技术的差异与…...

学习笔记—C++—模板初阶

目录 模板初阶 泛型编程 函数模板 模版概念 函数模版格式 模版的原理 函数模板的实例化 模版参数的匹配规则 类模板 模板初阶 泛型编程 使用函数重载虽然可以实现&#xff0c;但是有一下几个不好的地方&#xff1a; 1. 重载的函数仅仅是类型不同&#xff0c;代码复…...

【Python进阶】字典:高效键值存储的十大核心应用

目录 前言&#xff1a;技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块技术选型对比 二、实战演示环境配置要求核心代码实现&#xff08;10个案例&#xff09;案例1&#xff1a;基础操作案例2&#xff1a;字典推导式…...

充电宝项目中集成地图地址解析功能梳理

文章目录 MongoDB数据库引入pom依赖配置yaml配置文件参考POJOXLocationRepositoryservice服务方法 腾讯地图接口申请api key配置api key启动类配置RestTemplate控制层服务层 MongoDB数据库 MongoDB对应经纬度的查询具体很好的支持. 引入pom依赖 <dependency><group…...

算法基础(以acwing讲述顺序为主,结合自己理解,持续更新中...)

文章目录 算法的定义一、基础算法排序二分高精度前缀和与差分双指针算法位运算离散化区间合并 算法的定义 这是我从百度上面搜的定义 算法&#xff08;Algorithm&#xff09;是指解题方案的准确而完整的描述&#xff0c;是一系列解决问题的清晰指令&#xff0c;算法代表着用系…...

栈实现队列

栈实现队列 用栈实现队列&#xff1a;C 语言代码解析栈的基本实现栈的初始化栈的销毁入栈操作检查栈是否为空出栈操作获取栈顶元素获取栈中元素个数 用栈实现队列队列的创建入队操作出队操作获取队首元素检查队列是否为空队列的销毁 总结 用栈实现队列&#xff1a;C 语言代码解…...

Redis原理与Windows环境部署实战指南:助力测试工程师优化Celery调试

引言 在分布式系统测试中&#xff0c;Celery作为异步任务队列常被用于模拟高并发场景。而Redis作为其核心消息代理&#xff0c;其性能和稳定性直接影响测试结果。本文将深入解析Redis的核心原理&#xff0c;主要讲解Windows环境部署redis&#xff0c;为测试工程师提供一套完整…...

HWDeviceDRM的三个子类,HWPeripheralDRM HWTVDRM HWVirtualDRM

在很多采用 DRM 架构的 Android 平台&#xff08;尤其是 QTI 平台&#xff0c;比如 sdm / display-hal 模块中&#xff09;&#xff0c;HWDeviceDRM 是一个基类&#xff0c;抽象了所有类型的 Display 输出设备的共通 DRM 行为&#xff0c;而它有三个常见的子类&#xff0c;对应…...

金融 IC 卡 CCRC 认证:从合规到业务安全的升级路径

在金融科技飞速发展的当下&#xff0c;金融 IC 卡作为现代金融交易的重要载体&#xff0c;广泛应用于各类支付场景&#xff0c;从日常的购物消费到线上金融理财&#xff0c;其安全性直接关系到用户的资金安全和金融机构的稳定运营。CCRC&#xff08;中国网络安全审查技术与认证…...

微硕WSP6949 MOS管在强排热水器中的应用与市场分析

微硕WSP6949 MOS管在强排热水器中的应用与市场分析 一、引言 强排热水器作为一种常见的家用电器&#xff0c;其核心部件之一是驱动电路&#xff0c;而MOS管作为驱动电路中的关键元件&#xff0c;其性能直接影响到热水器的运行效率和稳定性。微硕半导体推出的WSP6949 MOS管&am…...

文件操作(二进制文件)

C中对文件操作需要包含头文件 #include<fstream> 文件类型分为两类&#xff1a; 1. 文本文件&#xff1a;文件以文本对应的 ASCII 码形式存储在计算机中 2. 二进制文件&#xff1a;文件以文本的二进制形式存储在计算机中&#xff0c;用户一 般不能直接读懂 文件…...

ESP-ADF外设子系统深度解析:esp_peripherals组件架构与核心设计(输入类外设之按键Button)

ESP-ADF外设子系统深度解析&#xff1a;esp_peripherals组件架构与核心设计&#xff08;输入类外设之按键Button&#xff09; 版本信息: ESP-ADF v2.7-65-gcf908721 简介 本文档详细分析ESP-ADF中的输入类外设实现机制&#xff0c;包括按键(button)、触摸(touch)和ADC按键(a…...

HOW - 企业团队自建 npm 仓库

文章目录 一、明确需求二、选型:常用方案三、Verdaccio 搭建步骤1. 安装 Node.js 环境2. 全局安装 verdaccio3. 启动服务4. 配置(可选)5. 用户登录与发布四、团队使用方式1. 使用 `.npmrc` 文件统一配置2. 发布范围包(Scoped packages)五、权限控制六、进阶集成七、测试和…...

键值对和Map的区别

数组里存储键值对和使用Map&#xff08;在不同语言里也被叫做字典、哈希表等&#xff09;存在多方面的区别&#xff0c;下面从多个维度进行分析&#xff0c;同时给出C#和C的代码示例。 区别分析 1. 查找效率 数组存储键值对&#xff1a;查找特定键的值时&#xff0c;通常需要…...

CS61A:STRING REPRESENTATION

Python 规定所有对象都应该产生两种不同的字符串表示形式&#xff1a;一种是人类可解释的文本&#xff0c;另一种是 Python 可解释的表达式。字符串的构造函数 str 返回一个人类可读的字符串。在可能的情况下&#xff0c;repr 函数会返回一个计算结果相等的 Python 表达式。rep…...

AI编程新纪元:GitHub Copilot、CodeGeeX与VS2022的联合开发实践

引言:AI编程时代的到来 在软件开发领域,我们正站在一个历史性的转折点上。GitHub Copilot、CodeGeeX等AI编程助手的出现,结合Visual Studio 2022的强大功能,正在重塑代码编写的本质。这不仅是工具层面的革新,更是开发范式的根本转变。能够有效利用这些AI工具的开发者将跨…...

iOS崩溃堆栈分析

文章目录 一、背景二、获取崩溃日志三、使用 dSYM 文件符号化堆栈信息1. 准备 dSYM 文件2. 符号化方法使用 Xcode使用 atos 命令 一、背景 在 iOS 开发中&#xff0c;分析崩溃日志和堆栈信息是调试的重要环节。上线APP往往只能获取到堆栈信息无法获取到具体的崩溃日志&#xf…...

kafka服务端和springboot中使用

kafka服务端和springboot中使用 一、kafka-sever安装使用 下载kafka-server https://kafka.apache.org/downloads.html 启动zookeeper zookeeper-server-start.bat config\zookeeper.properties 启动kafka-server kafka-server-start.bat config\server.properties创建主…...

05-DevOps-Jenkins自动拉取构建代码

新建Gitlab仓库 先在Gitab上创建一个代码仓库&#xff0c;选择创建空白项目 安装说明进行填写&#xff0c;然后点击创建项目 创建好的仓库是空的&#xff0c;什么都没有 新建一个springboot项目&#xff0c;用于代码上传使用。 只是为了测试代码上传功能&#xff0c;所以代码…...

win7/win10/macos如何切换DNS,提升网络稳定性

本篇教程教您如何在Windows10、Windows8.1、Windows7、MacOS操作系统切换DNS&#xff0c;以提升系统的稳定性&#xff0c;获得更好的操作体验。 Windows10及Windows8.1 1、右键单击“此计算机”&#xff0c;然后选择“属性”。进入Windows系统界面后&#xff0c;选择左侧的“…...

【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——A35M33异核通信测试

1&#xff09;实验平台&#xff1a;正点原子ATK-DLMP257B开发板 2&#xff09;浏览产品&#xff1a;https://www.alientek.com/Product_Details/135.html 3&#xff09;全套实验源码手册视频下载&#xff1a;正点原子资料下载中心 第四章 ATK-DLMP257B功能测试——A35&M33…...

maven如何解决jar包依赖冲突

maven如何解决jar包依赖冲突 1.背景2.报错信息3.解决思路3.1.查找jsqlparser冲突3.2.发现冲突3.2.解决冲突 4.Dromara Warm-Flow 1.背景 在ruoyi-vue项目集成Warm-Flow过程中&#xff0c;需要把mybatis升级为mybatis-plus&#xff0c;按照Warm-Flow常见问题中升级过程&#xf…...

过往记录系列 篇六:国家队护盘历史规律梳理

文章目录 系列文章护盘触发条件与时间规律护盘信号识别特征市场反应规律退出策略历史演变系列文章 过往记录系列 篇一:牛市板块轮动顺序梳理 过往记录系列 篇二:新年1月份(至春节前)行情历史梳理 过往记录系列 篇三:春节行情历史梳理 过往记录系列 篇四:年报月行情历史梳…...

string的模拟实现 (6)

目录 1.string.h 2.string.cpp 3.test.cpp 4.一些注意点 本篇博客就学习下如何模拟实现简易版的string类&#xff0c;学好string类后面学习其他容器也会更轻松些。 代码实现如下&#xff1a; 1.string.h #define _CRT_SECURE_NO_WARNINGS 1 #pragma once #include <…...

多模态思维链AI医疗编程:从计算可持续性到开放域推理的系统性解决方案

多模态思维链AI医疗编程:从计算可持续性到开放域推理的系统性解决方案 医疗AI领域的多模态思维链技术正在重塑临床决策支持、医学影像分析和医疗流程优化的范式。本指南从计算可持续性、错误传播控制、伦理安全防护和通用性扩展四大维度,系统解析医疗大模型落地落地的关键要…...

BTS7960 直流电机控制程序

/*************正转逻辑*****************/ LEN1 REN1 while() { LPWN0 DELAY LPWM1 DELAY } /************反转逻辑******************/ LEN1 REN1 while() { RPWN0 DELAY RPWM1 DELAY } /******************************/ /***2025 测试直流电机正反转past…...

vue3 uniapp vite 配置之定义指令

动态引入指令 // src/directives/index.js import trim from ./trim;const directives {trim, };export default {install(app) {console.log([✔] 自定义指令插件 install 触发了&#xff01;);Object.entries(directives).forEach(([key, directive]) > {app.directive(…...

Mysql-JDBC

JDBCUtils public class JDBCUtils {/*** 工具类的构造方法一般写成私有*/private JDBCUtils(){}//静态代码块再类加载的时候执行&#xff0c;且执行一次static{try {Class.forName("com.mysql.cj.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackT…...

如何在爬虫中合理使用海外代理?在爬虫中合理使用海外ip

我们都知道&#xff0c;爬虫工作就是在各类网页中游走&#xff0c;快速而高效地采集数据。然而如果目标网站分布在多个国家或者存在区域性限制&#xff0c;那靠普通的网络访问可能会带来诸多阻碍。而这时&#xff0c;“海外代理”俨然成了爬虫工程师们的得力帮手&#xff01; …...

安卓环境搭建开发工具下载Gradle下载

1.安装jdk(使用java语言开发安卓app) 核心库 java.lang java.util java.sq; java.io 2.安装开发工具(IDE)android studio https://r3---sn-2x3elnel.gvt1-cn.com/edgedl/android/studio/install/2023.3.1.18/android-studio-2023.3.1.18-windows.exe下载完成后一步一步安装即…...

k8s+helm部署tongweb7云容器版(by lqw)

安装准备 1.联系销售获取安装包和授权&#xff08;例如&#xff1a;tongweb-cloud-7.0.C.6_P3.tar.gz&#xff09;。 2.已安装docker和k8s集群&#xff0c;参考&#xff1a; k8s集群搭建 3.有对应的docker私库&#xff0c;没有的可以参考&#xff1a; harbor搭建 4.docker已经…...

关于DApp、DeFi、IDO私募及去中心化应用开发的综合解析

一、DApp&#xff08;去中心化应用&#xff09;技术开发 1. 技术架构与开发流程 分层架构 &#xff1a; 前端层 &#xff1a;使用React/Vue.js构建用户界面&#xff0c;通过Web3.js或Ethers.js与区块链交互。 智能合约层 &#xff1a;以太坊系常用Solidity&#xff0c;Solana…...

招贤纳士|Walrus 亚太地区招聘高级开发者关系工程师

职位介绍&#xff1a; 开发者关系团队&#xff08;Developer Relations&#xff09;通过线上线下方式与开发者社区互动&#xff0c;提供专业支持和指导&#xff0c;帮助他们在 Sui 和 Walrus 上构建下一代 Web3 应用。团队通过与社区对话&#xff0c;了解开发者的痛点&#xf…...