nav2 调节纯追踪算法

news2024/11/24 15:55:51

纯追踪算法

纯追踪基础

The core idea is to find a point on the path in front of the robot and find the linear and angular velocity to help drive towards it.
核心思想是在机器人前方的路径上找到一个点,并找到一个合适的线速度和角速度,以驱动机器人朝向该点运动。
Once it moves forward, a new point is selected, and the process repeats until the end of the path.
一旦它向前移动,就会选择一个新的前视点,这个过程会一直重复,直到到达路径终点。
In order to simply book-keeping, the global path is continuously pruned to the closest point to the robot (see the figure below) so that we only have to process useful path points. Then, the section of the path within the local costmap bounds is transformed to the robot frame and a lookahead point is determined using a predefined distance
为了简化簿记,全局路径被持续修剪到离机器人最近的点(见下图),这样我们只需要处理有用的路径点。然后,在局部代价地图内的路径被转换到机器人坐标系下,并使用预定义前视距离确定一个前瞻点。

在这里插入图片描述
Finally, the lookahead point will be given to the pure pursuit algorithm which finds the curvature of the path required to drive the robot to the lookahead point. This curvature is then applied to the velocity commands to allow the robot to drive
最后,前瞻点将被传递给纯追踪算法,该算法找到驱动机器人到达前瞻点所需的路径曲率。然后,将该曲率应用于速度指令,以使机器人能够行驶。
Note that a pure pursuit controller is that, it “purely” pursues the path without interest or concern about dynamic obstacles. Therefore, this controller should only be used when paired with a path planner that can generate a path the robot can follow. For a circular (or can be treated as circular) robot, this can really be any planner since you can leverage the particle / inflation relationship in planning. For a “large” robot for the environment or general non-circular robots, this must be something kinematically feasible, like the Smac Planner, such that the path is followable
需要注意的是,纯追踪控制器“纯粹”追踪路径而不关心动态障碍物。因此,该控制器应该只在与能够生成机器人可遵循路径的路径规划器配对时使用。对于圆形(或可被视为圆形)的机器人来说,这可以是任何规划器,因为你可以利用规划中的粒子/膨胀关系。对于“大型”环境或一般非圆形机器人,必须使用一些在运动学上可行的东西,比如Smac Planner,这样路径才能被跟随。

Regulated Pure Pursuit Features

We have created a new variation on the pure pursuit algorithm that we dubb the Regulated Pure Pursuit algorithm. We combine the features of the Adaptive Pure Pursuit algorithm with rules around linear velocity with a focus on consumer, industrial, and service robot’s needs. We also implement several common-sense safety mechanisms like collision detection
我们创建了一种新的纯追踪算法变体,称之为调节纯追踪(Regulated Pure Pursuit)算法。我们将自适应纯追踪(Adaptive Pure Pursuit)算法的特性与围绕线性速度的规则相结合,重点关注消费类、工业和服务型机器人的需求。我们还实现了几种常识性的安全机制,如碰撞检测。
The Regulated Pure Pursuit controller implements active collision detection. We use a parameter to set the maximum allowable time before a potential collision on the current velocity command. Using the current linear and angular velocity, we project forward in time that duration and check for collisions. Intuitively, you may think that collision checking between the robot and the lookahead point seems logical. However, if you’re maneuvering in tight spaces, it makes alot of sense to only search forward a given amount of time to give the system a little leeway to get itself out. In confined spaces especially, we want to make sure that we’re collision checking a reasonable amount of space for the current action being taken (e.g. if moving at 0.1 m/s, it makes no sense to look 10 meters ahead to the carrot, or 100 seconds into the future). This helps look further at higher speeds / angular rotations and closer with fine, slow motions in constrained environments so it doesn’t over report collisions from valid motions near obstacles. If you set the maximum allowable to a large number, it will collision check all the way, but not exceeding, the lookahead point. We visualize the collision checking arc on the lookahead_arc topic
这个Regulated Pure Pursuit控制器实现了主动碰撞检测。我们使用一个参数来设置在当前速度命令上可能发生潜在碰撞之前的最大允许时间。利用当前的线性和角速度,我们在将来的这段时间内进行投影,并检查是否存在碰撞。直观地看,你可能会认为在机器人和预瞄点之间进行碰撞检查是合理的。然而,如果你在狭窄空间中操纵,只搜索一定时间范围内是有意义的,这样可以给系统一些余地来解决问题。特别是在狭窄空间中,我们希望确保为当前正在执行的动作进行合理范围的碰撞检查(例如,以0.1米/秒移动时,向前查找到预瞄点10米甚至100秒的未来是没有意义的)。这有助于在高速度/角速度下进一步查看,以及在受限环境中进行细微、缓慢运动时更加接近,这样就不会因为靠近障碍物的有效运动而过度报告碰撞。如果将最大允许时间设置为一个较大的数字,它将在预瞄点之前进行碰撞检查,但不会超过该点。我们将这种碰撞检测弧线可视化在预瞄弧线话题上。
The regulated pure pursuit algorithm also makes use of the common variations on the pure pursuit algorithm. We implement the adaptive pure pursuit’s main contribution of having velocity-scaled lookahead point distances. This helps make the controller more stable over a larger range of potential linear velocities. There are parameters for setting the lookahead gain (or lookahead time) and thresholded values for minimum and maximum.
调节纯追踪算法还利用了纯追踪算法的常见变体。我们实现了自适应纯追踪算法的主要特点,即基于速度缩放的前瞻点距离。这有助于使控制器在更大范围的潜在线性速度下更加稳定。我们设置了前瞻增益(或前瞻时间)的参数,并对最小和最大值进行了阈值化。
The final minor improvement we make is slowing on approach to the goal. Knowing that the optimal lookahead distance is X, we can take the difference in X and the actual distance of the lookahead point found to find the lookahead point error. During operations, the variation in this error should be exceptionally small and won’t be triggered. However, at the end of the path, there are no more points at a lookahead distance away from the robot, so it uses the last point on the path. So as the robot approaches a target, its error will grow and the robot’s velocity will be reduced proportional to this error until a minimum threshold. This is also tracked by the kinematic speed limits to ensure drivability.
我们所做的最后一项小改进是在接近目标时减速。知道最佳前瞻距离为X,我们可以计算实际前瞻点距离与X之间的差值,从而得到前瞻点误差。在操作过程中,这种误差的变化应该异常地小,并且不会被触发。然而,在路径结束时,没有点距离机器人有一个前瞻距离,因此它会使用路径上的最后一个点。因此,随着机器人接近目标,其误差会增大,并且机器人的速度会按比例减小,直到达到最小阈值。这也受到运动学速度限制的跟踪,以确保可驾驶性。

The major improvements that this work implements is the regulations on the linear velocity based on some cost functions. They were selected to remove long-standing bad behavior within the pure pursuit algorithm. Normal Pure Pursuit has an issue with overshoot and poor handling in particularly high curvature (or extremely rapidly changing curvature) environments. It is commonly known that this will cause the robot to overshoot from the path and potentially collide with the environment. These cost functions in the Regulated Pure Pursuit algorithm were also chosen based on common requirements and needs of mobile robots uses in service, commercial, and industrial use-cases; scaling by curvature creates intuitive behavior of slowing the robot when making sharp turns and slowing when its near a potential collision so that small variations don’t clip obstacles. This is also really useful when working in partially observable environments (like turning in and out of aisles / hallways often) so that you slow before a sharp turn into an unknown dynamic environment to be more conservative in case something is in the way immediately requiring a stop.
这项工作实施的主要改进是基于一些成本函数对线性速度进行调节。这些函数的选择旨在消除Pure Pursuit算法中长期存在的不良行为。普通的Pure Pursuit算法在特别高曲率(或曲率极快变化)的环境中存在超调和较差的处理能力的问题。众所周知,这会导致机器人超出路径,并有可能与环境发生碰撞。Regulated Pure Pursuit算法中的这些成本函数也是基于服务、商业和工业用例中移动机器人的常见需求和需求而选择的;通过曲率缩放可以形成直观的行为,使机器人在进行急转弯时减速,并在靠近潜在碰撞物时减速,以防止小的变化导致碰撞障碍物。这在部分可观测的环境中非常有用(比如经常在过道/走廊间转弯),可以在进入未知动态环境之前减速,更保守地假设有可能立即需要停车的障碍物。
The cost functions penalize the robot’s speed based on its proximity to obstacles and the curvature of the path. This is helpful to slow the robot when moving close to things in narrow spaces and scaling down the linear velocity by curvature helps to stabilize the controller over a larger range of lookahead point distances. This also has the added benefit of removing the sensitive tuning of the lookahead point / range, as the robot will track paths far better. Tuning is still required, but it is substantially easier to get reasonable behavior with minor adjustments
成本函数根据机器人与障碍物的接近程度和路径的曲率对其速度进行惩罚。这有助于在狭窄空间中接近物体时减缓机器人的速度,并通过曲率缩减线性速度有助于稳定控制器在更大范围的预瞄点距离上。这还有一个额外的好处,即消除了对预瞄点/范围的敏感调整,因为机器人将更好地跟踪路径。仍然需要进行调整,但通过微小调整可以更容易地获得合理的行为。
An unintended tertiary benefit of scaling the linear velocities by curvature is that a robot will natively rotate to rough path heading when using holonomic planners that don’t start aligned with the robot pose orientation. As the curvature will be very high, the linear velocity drops and the angular velocity takes over to rotate to heading. While not perfect, it does dramatically reduce the need to rotate to a close path heading before following and opens up a broader range of planning techniques. Pure Pursuit controllers otherwise would be completely unable to recover from this in even modestly confined spaces
通过曲率缩减线性速度的一个意外的第三个好处是,当使用不与机器人姿势方向对齐的全向规划器时,机器人将自然旋转到粗糙的路径航向。由于曲率会非常高,线性速度下降,角速度接管旋转到航向的任务。虽然不完美,但确实大大减少了在跟随路径之前需要旋转到接近路径航向的需求,并扩大了规划技术的广泛范围。否则,纯追踪控制器甚至在相对狭窄的空间中都无法从中恢复。
Mixing the proximity and curvature regulated linear velocities with the time-scaled collision checker, we see a near-perfect combination allowing the regulated pure pursuit algorithm to handle high starting deviations from the path and navigate collision-free in tight spaces without overshoot
通过将距离和曲率调节的线性速度与时间缩放的碰撞检测器结合起来,我们可以看到几乎完美的组合,使得调节后的Pure Pursuit算法能够处理路径上的高起始偏差,并且在狭窄空间中无需超调即可避开碰撞。
Note: The maximum allowed time to collision is thresholded by the lookahead point, starting in Humble. This is such that collision checking isn’t significantly overshooting the path, which can cause issues in constrained environments. For example, if there were a straight-line path going towards a wall that then turned left, if this parameter was set to high, then it would detect a collision past the point of actual robot intended motion. Thusly, if a robot is moving fast, selecting further out lookahead points is not only a matter of behavioral stability for Pure Pursuit, but also gives a robot further predictive collision detection capabilities. The max allowable time parameter is still in place for slow commands, as described in detail above
注意:允许的最大碰撞时间由观测点作为阈值进行限制,从Humble开始。这样做是为了确保碰撞检测不会明显超出路径,这可能会在受限环境中引发问题。举例来说,如果有一条直线路径指向一堵墙,然后向左转,若该参数设置过高,那么它将在实际机器人意图运动点之后检测到碰撞。因此,如果机器人移动速度较快,选择更远的观测点不仅是Pure Pursuit算法行为稳定性的问题,同时也赋予机器人更强大的预测性碰撞检测能力。最大允许时间参数仍然适用于慢速指令,就像上面详细描述的那样。

参数名描述
desired_linear_vel所需的最大线性速度
lookahead_dist用于查找前瞻点的前瞻距离
min_lookahead_dist当使用速度缩放的前瞻距离时的最小前瞻距离阈值
max_lookahead_dist当使用速度缩放的前瞻距离时的最大前瞻距离阈值
lookahead_time用于通过投影速度找到速度缩放的前瞻距离的时间。也称为前瞻增益
rotate_to_heading_angular_vel如果使用旋转到航向,则使用的角速度
transform_toleranceTF变换容差
use_velocity_scaled_lookahead_dist是否使用速度缩放的前瞻距离或常量前瞻距离
min_approach_linear_velocity靠近目标时应用的最小速度阈值
approach_velocity_scaling_dist从变换路径末端开始应用速度缩放的累积距离。默认为代价地图正向范围减去一个代价地图单元长度
use_collision_detection是否启用碰撞检测
max_allowed_time_to_collision_up_to_carrot在启用碰撞检测时,检查碰撞的最大时间。限制为所选前瞻距离的最大距离
use_regulated_linear_velocity_scaling是否使用曲率的调节功能
use_cost_regulated_linear_velocity_scaling是否使用障碍物接近的调节功能
cost_scaling_dist触发线性速度缩放的障碍物最小距离。如果启用了use_cost_regulated_linear_velocity_scaling,则设置的值应小于或等于代价地图膨胀层中设置的膨胀半径,因为膨胀用于计算距离障碍物的距离
cost_scaling_gain乘法增益,应<= 1.0,用于在障碍物处于cost_scaling_dist内时进一步缩放速度。较低的值会更快地降低速度。
inflation_cost_scaling_factor本地代价地图膨胀层中设置的cost_scaling_factor的值。为了使用膨胀单元值准确计算距离障碍物,该值应完全相同
regulated_linear_scaling_min_radius触发调节功能的转弯半径。请记住,转弯越急,半径越小
regulated_linear_scaling_min_speed调节功能可以发送的最小速度,以确保即使在成本高且曲率高的空间中仍然可以实现进程
use_fixed_curvature_lookahead启用曲率检测的固定前瞻。对于具有长前瞻的系统非常有用
curvature_lookahead_dist用于确定速度调节目的的曲率的前瞻距离。仅当启用use_fixed_curvature_lookahead时使用
use_rotate_to_heading是否在使用全向规划器时启用旋转到粗略航向和目标方向。建议对除了阿克曼类型之外的所有机器人类型都启用
rotate_to_heading_min_angle路径方向与起始机器人方向之间的差异,触发原地旋转的最小角度,如果启用use_rotate_to_heading
max_angular_accel在旋转到航向时允许的最大角加速度
max_robot_pose_search_dist沿路径绑定机器人最近姿态的最大集成距离。默认情况下,它设置为最大代价地图范围,因此除非本地代价地图中有循环,否则不应手动设置

Example fully-described XML with default parameter values:

controller_server:
  ros__parameters:
    controller_frequency: 20.0
    min_x_velocity_threshold: 0.001
    min_y_velocity_threshold: 0.5
    min_theta_velocity_threshold: 0.001
    progress_checker_plugins: ["progress_checker"]
    goal_checker_plugins: "goal_checker"
    controller_plugins: ["FollowPath"]

    progress_checker:
      plugin: "nav2_controller::SimpleProgressChecker"
      required_movement_radius: 0.5
      movement_time_allowance: 10.0
    goal_checker:
      plugin: "nav2_controller::SimpleGoalChecker"
      xy_goal_tolerance: 0.25
      yaw_goal_tolerance: 0.25
      stateful: True
    FollowPath:
      plugin: "nav2_regulated_pure_pursuit_controller::RegulatedPurePursuitController"
      desired_linear_vel: 0.5
      lookahead_dist: 0.6
      min_lookahead_dist: 0.3
      max_lookahead_dist: 0.9
      lookahead_time: 1.5
      rotate_to_heading_angular_vel: 1.8
      transform_tolerance: 0.1
      use_velocity_scaled_lookahead_dist: false
      min_approach_linear_velocity: 0.05
      approach_velocity_scaling_dist: 1.0
      use_collision_detection: true
      max_allowed_time_to_collision_up_to_carrot: 1.0
      use_regulated_linear_velocity_scaling: true
      use_cost_regulated_linear_velocity_scaling: false
      regulated_linear_scaling_min_radius: 0.9
      regulated_linear_scaling_min_speed: 0.25
      use_fixed_curvature_lookahead: false
      curvature_lookahead_dist: 1.0
      use_rotate_to_heading: true
      rotate_to_heading_min_angle: 0.785
      max_angular_accel: 3.2
      max_robot_pose_search_dist: 10.0
      cost_scaling_dist: 0.3
      cost_scaling_gain: 1.0
      inflation_cost_scaling_factor: 3.0

Topics

主题类型描述
lookahead_pointgeometry_msgs/PointStamped路径上的当前前瞻点
lookahead_arcnav_msgs/Path机器人和"胡萝卜"之间的可行驶弧线。弧长取决于max_allowed_time_to_collision_up_to_carrot,在给定时间内从机器人姿态处向前模拟。在碰撞状态下,最后发布的弧线将是导致碰撞的点,包括第一个碰撞点及之前的点。

注意:lookahead_arc也是一个很好的速度指示器,当到达“full”或最大时间时,您就知道机器人以最大速度行驶。如果少了20%,那么您就可以知道机器人的速度大约低于最大速度的20%。可以将其视为碰撞检测边界,同时也是速度表。

用户须知:

默认情况下,use_cost_regulated_linear_velocity_scaling设置为false,因为我们设置的通用沙盒环境是TB3世界。这是一个高度受限制的环境,所以它会过度触发,使机器人减速,因为每个地方的代价都很高。建议在不在成本持续高的空间工作时将其设置为true。

要调整以获得自适应Pure Pursuit行为,请将所有布尔参数设置为false,除了use_velocity_scaled_lookahead_dist,并确保调整lookahead_time、min_lookahead_dist和max_lookahead_dist。

要调整以获得Pure Pursuit行为,请将所有布尔参数设置为false,并确保调整lookahead_dist。

目前,没有旋转到目标方向的行为,因此预期路径的朝向是目标的朝向,或者目标检查器已设置了一个大致的min_theta_velocity_threshold。旋转到目标航向的实现正在进行中。

前瞻距离的选择高度依赖于机器人的大小、响应性、控制器更新频率和速度。请确保为您的平台调整此值,尽管规则特性主要减少了对该值的大量调整的必要性。如果看到摆动,增加距离或比例。如果收敛到路径的速度不如预期的快,减小它。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1190021.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Netty 是如何利用EventLoop实现千万级并发的

经过前面几篇文章的介绍&#xff0c;我们掌握了 Netty 的 5 个核心组件&#xff0c;但是有了这 5 个核心组件 Netty 这个工厂还是无法很好的运转&#xff0c;因为缺少了一个最核心的组件&#xff1a;EventLoop&#xff0c;它 是 Netty 中最最核心的组件&#xff0c;也是 Netty …

竞赛选题 深度学习疫情社交安全距离检测算法 - python opencv cnn

文章目录 0 前言1 课题背景2 实现效果3 相关技术3.1 YOLOV43.2 基于 DeepSort 算法的行人跟踪 4 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习疫情社交安全距离检测算法 ** 该项目较为新颖&#xff0c;适合作为竞赛…

SQL 注入漏洞详解

SQL 注入漏洞详解 漏洞描述 sql注入漏洞是指恶意用户在应用与数据库交互的地方利用非法的操作获取数据库内容从以下两点分析: 没有对用户输入的数据进行充分的过滤和验证&#xff0c;导致一些用户利用此漏洞向数据库插入恶意sql语句非法请求数据库从而获得一些敏感数据在与数…

【服务发现与配置】Consul特性及搭建

文章目录 一、前言二、概念2.1、什么是Consul&#xff1f;2.2、Consul具有哪些特点?2.3、Consul 架构图2.4、Consul的使用场景 三、安装3.1. 下载3.2. 解压3.3. 拷贝到usr目录下3.4. 查看 安装是否成功3.5. 启动 四、Consul 开机自启动4.1. 路径/usr/lib/systemd/system/&…

ubuntu 安装redis详细教程

下载redis安装包 链接如下&#xff1a; http://redis.io/download 本例版本为&#xff1a;redis-7.2.3.tar.gz 下载安装包到目录/opt下&#xff0c;路径可修改&#xff0c;本例为/opt wget https://github.com/redis/redis/archive/7.2.3.tar.gz 解压安装包&#xff0c;并…

操作系统 day09(线程)

线程 为什么引入线程 在没引入进程之前&#xff0c;系统中的各个程序只能串行的执行&#xff0c;比如&#xff1a;只能先听歌&#xff0c;再聊QQ。引入进程之后&#xff0c;各个程序可以并发执行&#xff0c;比如&#xff1a;一边听歌&#xff0c;一边聊QQ。但是现在QQ可以一…

C++ 图解二叉树非递归中序 + 实战力扣题

leetCode 94.二叉树的中序遍历 94. 二叉树的中序遍历 - 力扣&#xff08;LeetCode&#xff09; 算法思路&#xff1a; 总结&#xff1a; 对中序遍历这个例子进行总结&#xff0c;找出打印“中”节点的时刻&#xff0c;来寻找本质。打印的是一棵二叉树的“中”节点&#xff0c…

MySQL -- mysql connect

MySQL – mysql connect 文章目录 MySQL -- mysql connect一、Connector/C 使用1.环境安装2.尝试链接mysql client 二、MySQL接口1.初始化2.链接数据库3.下发mysql命令4.获取执行结果5.关闭mysql链接6.在C语言中连接MySQL 三、MySQL图形化界面推荐 使用C接口库来进行连接 一、…

Python按类别和比例从Labelme数据集中划分出训练数据集和测试数据集

Python按类别和比例从Labelme数据集中划分出训练数据集和测试数据集 前言前提条件相关介绍实验环境按类别和比例从Labelme数据集中划分出训练数据集和测试数据集代码实现输出结果 前言 由于本人水平有限&#xff0c;难免出现错漏&#xff0c;敬请批评改正。更多精彩内容&#x…

Java算法(六):模拟评委打分案例 方法封装抽离实现 程序的节流处理

Java算法&#xff08;六&#xff09; 评委打分 需求&#xff1a; 在编程竞赛中&#xff0c;有 6 个评委为参赛选手打分&#xff0c;分数为 0 - 100 的整数分。 选手的最后得分为&#xff1a;去掉一个最高分和一个最低分后 的 4个评委的平均值。 注意程序的节流 package c…

聊聊室内导航在应用方面

大家去大型的商场时&#xff0c;应该都见过一些提示牌&#xff0c;微信扫一扫导航。当拿微信扫了之后&#xff0c;就会打开一个小程序&#xff0c;里面显示整个商场的二维或三维的平面结构&#xff0c;以及当前自己的位置。此时可以通过手机快速的查看商场内其他的商铺、公共区…

NAND Vpass对读干扰和IO性能有什么影响?

1.SSD基础知识 SSD的存储介质是什么&#xff0c;它就是NAND闪存。那你知道NAND闪存是怎么工作的吗&#xff1f;其实&#xff0c;它就是由很多个晶体管组成的。这些晶体管里面存储着电荷&#xff0c;代表着我们的二进制数据&#xff0c;要么是“0”&#xff0c;要么是“1”。NA…

C++打怪升级(十)- STL之vector

~~~~ 前言1. vector 是什么2. 见见vector的常用接口函数吧构造函数无参构造函数使用n个val构造拷贝构造使用迭代器范围构造初始化形参列表构造 析构函数赋值运算符重载函数元素访问[]运算符重载函数访问at函数访问front函数back函数 迭代器相关正向迭代器反向迭代器 容量相关si…

2023.11.09 homework (2)

【七年级上数学】 教别人也是教自己&#xff0c;总结下&#xff1a; 13&#xff09;找规律的题目&#xff0c;累加题目&#xff0c;要整体看&#xff0c;不然不容易算出来&#xff0c;求最大值&#xff0c;那么就是【最大值集群和】减去【最小集群和】就是最大值 9-12&#x…

Python进行数据可视化,探索和发现数据中的模式和趋势。

文章目录 前言第一步&#xff1a;导入必要的库第二步&#xff1a;加载数据第三步&#xff1a;创建基本图表第四步&#xff1a;添加更多细节第五步&#xff1a;使用Seaborn库创建更复杂的图表关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Pyth…

离散数学第一章知识点复习

命题&#xff1a;陈述句 真值已经确定 原子命题&#xff08;简单命题&#xff09;&#xff1a;不能被分解为更简单的命题 命题化的时候的解题步骤&#xff1a; 1. 先给出原子命题 2. 符号化 注意蕴含式&#xff1a;记作 p -> q &#xff0c;p是前件&#xff0c;q 是后…

洛谷P5731 【深基5.习6】蛇形方阵java版题解

import java.util.Arrays; import java.util.Scanner;// 给出一个不大于9的正整数n&#xff0c;输出nn的蛇形方阵。 public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int[][] a new int[n][n];int total…

【Git】Git安装入门使用常用命令Gitee远程仓库上传文件与下载

一&#xff0c;Git入门 1.1 Git是什么 Git是一款分布式版本控制系统&#xff0c;被广泛用于软件开发中的源代码管理。它由Linus Torvalds在2005年创造并发布&#xff0c;旨在解决传统版本控制系统&#xff08;如SVN&#xff09;的一些局限性。主要用于敏捷高效地处理任何或小或…

qframework 架构 (作者:凉鞋)使用笔记

一些准则&#xff1a; 根据VIEW->SYSTEM->MODEL的分层架构 初始架构&#xff1a; app. using FrameworkDesign;namespace ShootingEditor2D&#xff08;项目的命名空间&#xff09; {public class ShootingEditor2D &#xff08;游戏名称&#xff09;: Architecture&l…

vue 子页面通过暴露属性,实现主页面的某事件的触发

目录 1.前言2.代码2-1 子页面2-2 主页面 1.前言 需求&#xff1a;当我在子页面定义了一个定时器&#xff0c;点击获取验证码&#xff0c;计时器开始倒计时&#xff0c;在这个定时器没有走完&#xff0c;退出关闭子页面&#xff0c;再次进入子页面&#xff0c;定时器此时会被刷…