move_base
move_base 官方介绍:http://wiki.ros.org/move_base

如果在仿真环境下, sensor source、odometry source 和 sensor transforms 都已提供好,我们只需要完成以下部分:
一、编写导航程序

①创建 ROS 工作空间 和 pkg 包
mkdir -p catkin_ws/src
cd catkin_ws/src
catkin_create_pkg nav_pkg roscpp rospy move_base_msgs actionlib
②在 pkg 中创建 nav.launch 文件,其中包含了上面介绍的3个节点。
<launch><!--- Run move_base --><node pkg="move_base" type="move_base" name="move_base"><rosparam file="$(find wpb_home_tutorials)/nav_lidar/costmap_common_params.yaml" command="load" ns="global_costmap" /><rosparam file="$(find wpb_home_tutorials)/nav_lidar/costmap_common_params.yaml" command="load" ns="local_costmap" /><rosparam file="$(find wpb_home_tutorials)/nav_lidar/global_costmap_params.yaml" command="load" /><rosparam file="$(find wpb_home_tutorials)/nav_lidar/local_costmap_params.yaml" command="load" /><param name="base_global_planner" value="global_planner/GlobalPlanner" /> <param name="base_local_planner" value="wpbh_local_planner/WpbhLocalPlanner" /></node><!-- Run map server --><node pkg="map_server" type="map_server" name="map_server" args="$(find wpr_simulation)/maps/map.yaml"/><!--- Run AMCL --><node pkg="amcl" type="amcl" name="amcl"/><!--- Run rviz --><node name="rviz" pkg="rviz" type="rviz" args="-d $(find wpr_simulation)/rviz/nav.rviz"/>
</launch>
③编译工作空间
二、 运行导航程序
①运行仿真环境
roslaunch wpr_simulation wpb_stage_robocup.launch
②运行 nav.launch 文件
roslaunch nav_pkg nav.launch
③打开 rviz
④添加 Map(话题: /map);Path(话题:/move_base/GlobalPlanner/plan)
其中运行 nav.launch 文件产生的话题如下:
1、map_server 产生的话题
/map
- 说明:发布静态地图数据,通常为
nav_msgs/OccupancyGrid类型。 - 来源:由
map_server节点生成,用于全局路径规划。
/map_metadata
- 说明:发布地图的元数据信息,如地图的分辨率、宽度、高度和原点位置。通常为 nav_msgs/MapMetaData 类型
- 来源:由
map_server节点生成,辅助其他节点理解地图的结构和坐标系

2、amcl 产生的话题
/amcl_pose
- 说明:发布
amcl计算出的机器人在地图中的位姿,通常为geometry_msgs/PoseWithCovarianceStamped类型。 - 来源:由
amcl节点生成,用于定位和导航。

/initialpose
- 说明:用于设置机器人的初始位姿,通常通过
rviz手动发布该话题。通常为 geometry_msgs/PoseWithCovarianceStamped 类型 - 来源:由用户或
rviz发布,用于amcl节点初始化机器人位置。
/diagnostics
- 说明:发布系统诊断信息,包括节点状态、传感器健康状况等,通常为
diagnostic_msgs/DiagnosticArray类型。 - 来源:由
amcl节点生成,用于监控和调试系统状态

/particlecloud
- 说明:发布粒子滤波器的粒子分布,可以在 rviz 中可视化。通常为
geometry_msgs/PoseArray类型。 - 来源:由
amcl节点生成,用于可视化粒子滤波器的状态。

/amcl/parameter_descriptions 和 /amcl/parameter_updates
- 说明:用于动态参数调整(dynamic reconfigure),允许在运行时修改
amcl的参数。前者通常为 dynamic_reconfigure/ConfigDescription 类型;后者为 dynamic_reconfigure/Config 类型。 - 来源:由
amcl节点生成,支持参数的动态管理。
3、move_base 产生的话题
3.1 move_base 的总体控制和状态
/move_base/current_goal
- 说明:发布当前的导航目标,通常为
geometry_msgs/PoseStamped类型。 - 来源:由
move_base节点生成,表示当前正在执行的目标。
/move_base/goal 和 /move_base_simple/goal
- 说明:
/move_base/goal:用于接收复杂的导航目标,通常为move_base_msgs/MoveBaseActionGoal类型。/move_base_simple/goal:用于接收简化的导航目标,通常通过rviz发布,类型为geometry_msgs/PoseStamped。
- 来源:由用户通过
rviz或其他工具发布,用于设置导航目标。
/move_base/recovery_status
- 说明:发布导航恢复行为的状态信息,如避障操作的执行情况。通常为 move_base_msgs/RecoveryStatus 类型。
- 来源:由
move_base节点生成,用于监控恢复行为。
/move_base/cancel
- 说明:用于取消当前的导航目标,通常为
actionlib_msgs/GoalID类型。 - 来源:由用户或其他节点发布,用于终止当前导航任务。
/move_base/feedback
- 说明:发布导航过程中的实时反馈信息,通常为
move_base_msgs/MoveBaseActionFeedback类型。 - 来源:由
move_base节点生成,用于监控导航进展。
/move_base/result 和 /move_base/status
- 说明:
/move_base/result:发布导航结果,通常为move_base_msgs/MoveBaseActionResult类型。/move_base/status:发布当前导航的状态,通常为actionlib_msgs/GoalStatusArray类型。
- 来源:由
move_base节点生成,用于反馈导航任务的完成情况和状态。
/move_base/parameter_descriptions 和 /move_base/parameter_updates
- 说明:用于动态调整
move_base节点的整体参数。 - 来源:由
move_base节点生成,支持参数的动态管理。
3.2全局规划器(Global Planner)
/move_base/GlobalPlanner/parameter_descriptions 和 /move_base/GlobalPlanner/parameter_updates
- 说明:用于动态调整全局规划器的参数。
- 来源:由
move_base的全局规划器(如GlobalPlanner)生成,支持参数的动态管理。前者通常为 dynamic_reconfigure/ConfigDescription 类型;后者为 dynamic_reconfigure/Config 类型。
/move_base/GlobalPlanner/plan
- 说明:发布全局规划路径的坐标点,通常为
nav_msgs/Path类型。 - 来源:由
GlobalPlanner生成,用于展示全局路径。
/move_base/GlobalPlanner/potential
- 说明:发布潜在场(potential field)地图,用于全局路径规划的成本计算。通常为 nav_msgs/OccupancyGrid 类型。
- 来源:由
GlobalPlanner生成,辅助路径规划。
3.3局部规划器(Local Planner)
/move_base/WpbhLocalPlanner/local_planner_target
- 说明:发布局部规划的目标点,通常为
geometry_msgs/PoseStamped类型。 - 来源:由
WpbhLocalPlanner生成,用于局部路径调整。
3.4全局代价地图(Global Costmap)
/move_base/global_costmap/costmap 和 /move_base/global_costmap/costmap_updates
- 说明:发布全局代价地图及其更新数据,通常为
nav_msgs/OccupancyGrid和map_msgs/OccupancyGridUpdate类型。 - 来源:由
move_base的全局代价地图生成,辅助全局路径规划。
/move_base/global_costmap/footprint
- 说明:发布机器人轮廓信息,通常为
geometry_msgs/PolygonStamped类型。 - 来源:由
move_base全局代价地图生成,用于计算安全代价区域。
/move_base/global_costmap/inflation_layer/parameter_descriptions 和 /move_base/global_costmap/inflation_layer/parameter_updates
- 说明:用于膨胀层的动态调参,用于障碍物周围的安全缓冲区设置。
- 来源:由
move_base的膨胀层生成,增加障碍物周围的安全缓冲区。
/move_base/global_costmap/obstacle_layer/parameter_descriptions 和 /move_base/global_costmap/obstacle_layer/parameter_updates
- 说明:用于动态障碍物图层的动态调参。
- 来源:由
move_base的障碍物层生成,处理动态障碍物信息。
/move_base/global_costmap/static_layer/parameter_descriptions 和 /move_base/global_costmap/static_layer/parameter_updates
- 说明:用于静态图层的动态调参。
- 来源:由
move_base的静态层生成,处理静态障碍物和背景地图。
/move_base/global_costmap/parameter_descriptions 和 /move_base/global_costmap/parameter_updates
- 说明:用于调整全局代价地图的整体参数。
- 来源:由
move_base全局代价地图生成,支持参数的动态管理。
3.5局部代价地图(Local Costmap)
/move_base/local_costmap/costmap 和 /move_base/local_costmap/costmap_updates
- 说明:发布局部代价地图及其更新数据,通常为
nav_msgs/OccupancyGrid和map_msgs/OccupancyGridUpdate类型。 - 来源:由
move_base的局部代价地图生成,辅助局部路径规划。
/move_base/local_costmap/footprint
- 说明:发布机器人轮廓信息,通常为
geometry_msgs/PolygonStamped类型。 - 来源:由
move_base局部代价地图生成,用于计算安全代价区域。
/move_base/local_costmap/inflation_layer/parameter_descriptions 和 /move_base/local_costmap/inflation_layer/parameter_updates
- 说明:用于膨胀层的动态调参,用于障碍物周围的安全缓冲区设置。
- 来源:由
move_base的膨胀层生成,增加障碍物周围的安全缓冲区。
/move_base/local_costmap/obstacle_layer/parameter_descriptions 和 /move_base/local_costmap/obstacle_layer/parameter_updates
- 说明:用于动态障碍物图层的动态调参。
- 来源:由
move_base的障碍物层生成,处理动态障碍物信息。
/move_base/local_costmap/parameter_descriptions 和 /move_base/local_costmap/parameter_updates
- 说明:用于调整局部代价地图的整体参数。
- 来源:由
move_base局部代价地图生成,支持参数的动态管理。
三、move_bose 节点参数解析
<!--- Run move_base --><node pkg="move_base" type="move_base" name="move_base"><rosparam file="$(find wpb_home_tutorials)/nav_lidar/costmap_common_params.yaml" command="load" ns="global_costmap" /><rosparam file="$(find wpb_home_tutorials)/nav_lidar/costmap_common_params.yaml" command="load" ns="local_costmap" /><rosparam file="$(find wpb_home_tutorials)/nav_lidar/global_costmap_params.yaml" command="load" /><rosparam file="$(find wpb_home_tutorials)/nav_lidar/local_costmap_params.yaml" command="load" /><param name="base_global_planner" value="global_planner/GlobalPlanner" /> <param name="base_local_planner" value="wpbh_local_planner/WpbhLocalPlanner" /></node>
1、全局规划器
官方介绍:global_planner - ROS Wiki
1.1 广度优先算法 BFS(Dijkstra算法)
1.2 深度优先算法 DFS(A*)

1.3 move_base 中的全局规划器

move_base 共有 3 个全局规划器,默认使用 Navfn规划器。其中前两个规划器中均包含 Dijkstra算法 和 A*算法,都默认使用 Dijkstra算法,但 Navfn规划器中的 A*算法存在 Bug。

若想使用 Global_planner规划器 中的 A*算法,需要加上如下代码:
<!-- 使用 GlobalPlanner规划器 中的 A*算法 -->
<param name="GlobalPlanner/use_dijkstra" value="false" />
<param name="GlobalPlanner/use_grid_path" value="true" />
Carrot_planner规划器:从起始点到目标点延伸一条路径,遇到障碍物就停止。代码简单,经常被用来作为自定义规划器的模版进行修改。

1.4 自定义规划器
move_base 支持自己编写自定义全局规划器,提供了一种 Plugin 插件接口,只要按照特定的格式,就能把自己的路径规划算法编写成新的规划器,加载到 move_base 节点中使用。


2、AMCL (Adaptive Mentcarto Localization)自适应蒙特卡罗定位算法
官方介绍:amcl - ROS Wiki
AMCL:使用粒子滤波在已知地图中进行定位的算法。同时使用了 里程计 和 激光雷达数据,具有较强的自我纠错功能。rviz 中添加 PoseArray 订阅话题 /particlecloud 可查看 AMCL 产生的粒子。

AMCL参数:
<launch>
<node pkg="amcl" type="amcl" name="amcl" output="screen"><!-- Publish scans from best pose at a max of 10 Hz --><!-- 机器人的运动模型为差动驱动模型,即机器人只能前后运动和原地旋转,无法侧向移动。 --><param name="odom_model_type" value="diff"/><!-- 机器人的运动模型为全向运动模型,允许机器人在平面上向任何方向移动。 --><param name="odom_model_type" value="omni"/><param name="odom_alpha5" value="0.1"/><param name="transform_tolerance" value="0.2" /><param name="gui_publish_rate" value="10.0"/><param name="laser_max_beams" value="30"/><!-- 粒子滤波的粒子数 --><param name="min_particles" value="50"/><param name="max_particles" value="500"/><param name="kld_err" value="0.05"/><param name="kld_z" value="0.99"/><param name="odom_alpha1" value="0.2"/><param name="odom_alpha2" value="0.2"/><!-- translation std dev, m --><param name="odom_alpha3" value="0.8"/><param name="odom_alpha4" value="0.2"/><param name="laser_z_hit" value="0.5"/><param name="laser_z_short" value="0.05"/><param name="laser_z_max" value="0.05"/><param name="laser_z_rand" value="0.5"/><param name="laser_sigma_hit" value="0.2"/><param name="laser_lambda_short" value="0.1"/><param name="laser_lambda_short" value="0.1"/><param name="laser_model_type" value="likelihood_field"/><!-- <param name="laser_model_type" value="beam"/> --><param name="laser_likelihood_max_dist" value="2.0"/><param name="update_min_d" value="0.2"/><param name="update_min_a" value="0.5"/><param name="odom_frame_id" value="odom"/><param name="resample_interval" value="1"/><param name="transform_tolerance" value="0.1"/><param name="recovery_alpha_slow" value="0.0"/><param name="recovery_alpha_fast" value="0.0"/>
</node>
</launch>
其中 AMCL 负责输出 map 到 odom 的 tf ;里程计负责输出 odom 到 base_frame 的 tf 。从而形成完整的 map 到 base_frame 的 tf。

注意:AMCL 切换本体和分身是在 map 到 odom 这段的 tf 上产生跳跃突变来实现的,所以在导航过程中会看到机器人位置跳变,这就是 AMCL 输出的这段 tf 突变产生的结果;而里程计输出的 odom 到 base_frame 这段 tf 通常是保持连续变化的,不会突然跳变(这个特征在生成代价地图时会用到)。
3、代价地图
官方介绍:costmap_2d - ROS Wiki
<!-- 代价地图参数 -->
<!-- 通过 命名空间 ns 实现了用一个文件给全局和局部两个代价地图设置一样的参数,参数是关于代价地图的形状的 -->
<rosparam file="$(find wpb_home_tutorials)/nav_lidar/costmap_common_params.yaml" command="load" ns="global_costmap" />
<rosparam file="$(find wpb_home_tutorials)/nav_lidar/costmap_common_params.yaml" command="load" ns="local_costmap" />
<!-- 代价地图的计算范围和频率 -->
<rosparam file="$(find wpb_home_tutorials)/nav_lidar/global_costmap_params.yaml" command="load" />
<rosparam file="$(find wpb_home_tutorials)/nav_lidar/local_costmap_params.yaml" command="load" />

3.1 代价地图的形状参数
robot_radius: 0.25 # 机器人底盘半径
inflation_radius: 0.5 # 膨胀区域的半径
obstacle_range: 6.0 # 激光雷达障碍物检测距离,单位 m
raytrace_range: 6.0 # 清除动态障碍物的残留影子
observation_sources: base_lidar # 障碍物的观测来源,与下文保持一致# 观测来源的数据参数
base_lidar: {data_type: LaserScan, # 消息的类型topic: /scan, # 话题名称marking: true, # 是否将扫描到的障碍物添加到代价地图clearing: true # 是否清除扫描范围内的障碍物残影}


3.2 全局代价地图的计算范围和频率参数
global_costmap:global_frame: map # 地图坐标系名称robot_base_frame: base_footprint # 底盘坐标系名称static_map: true # 是否将 map_server 发来的地图数据作为初始代价地图update_frequency: 1.0 # 地图更新频率,单位 hzpublish_frequency: 1.0 # 地图发布频率,单位 hztransform_tolerance: 1.0 # transform 延迟容忍值,单位 s。如出现 tf 的 timeout 错误,调大该值。
其中 transform 指的是 传感器 到 map 的 tf ,包含 3 段
3.3局部代价地图的计算范围和频率参数
local_costmap:global_frame: odom # 地图坐标系名称robot_base_frame: base_footprint # 底盘坐标系名称static_map: false # 是否将 map_server 发来的地图数据作为初始代价地图rolling_window: true # 局部代价地图是否和底盘一起移动width: 3.0 # 代价地图的宽度,单位 mheight: 3.0update_frequency: 10.0 # 局部代价地图的更新频率,一般和激光雷达的扫描频率保持一致publish_frequency: 10.0 # 局部代价地图的发布频率transform_tolerance: 1.0
这里的 global_frame 设置为 odom 而不是 map,原因是 AMCL 是通过 map 到 odom 这段的 tf 的跳变来切换机器人和分身的位置的,如果以 map 为基准坐标系,当机器人的位置跳变时,传感器检测到的障碍物位置也会跳变,这对于全局路径规划来说问题不大,但对于局部路径规划来说,会使机器人运动变得不平稳。所以局部代价地图的 global_frame 通常会设置为 odom。

相关文章:
move_base
move_base 官方介绍:http://wiki.ros.org/move_base 如果在仿真环境下, sensor source、odometry source 和 sensor transforms 都已提供好,我们只需要完成以下部分: 一、编写导航程序 ①创建 ROS 工作空间 和 pkg 包 mkdir -p …...
Android Intent 跳转常见系统设置
常量值描述android.settings.DATA_ROAMING_SETTINGS显示 2G/3G 选择的设置android.settings.SETTINGS显示系统设置android.settings.WIFI_SETTINGS显示设置以允许配置 Wi-Fiandroid.intent.action.POWER_USAGE_SUMMARY显示电池 … 更多GO 官网...
[复健计划][紫书]Chapter 7 暴力求解法
7.1 简单枚举 例7-1 Division uva725 输入正整数n,按从小到大的顺序输出所有形如abcde/fghij n的表达式,其中a~j恰好为数字0~9的一个排列(可以有前导0),2≤n≤79。枚举fghij,验证a…...
基于SpringBoot的社区讯息服务小程序【附源码】
基于SpringBoot的社区讯息服务小程序 效果如下: 系统登陆页面 管理员主页面 用户管理页面 社区活动管理页面 设施报修管理页面 缴费信息管理页面 用户主页面 用户登录页面 社区活动页面 研究背景 随着移动互联网技术的飞速发展,社区生活日益依赖于数字…...
springboot图书管理系统(一个简单的单体架构项目,适合小白)
期末作业 为了水一水期末作业,打算写一个简易的单体架构图书管理系统。以下为后端主要技术栈(后期可能更新,打算一个星期左右写完吧)。 springbootredismysqlspringcachespringsecurity … 数据库设计 第一次从0开始搭建后续可能还会多更新一些表。 -- 角…...
《CLR via C#》读书笔记--CLR的执行模型
将源代码编译成托管模块将托管模块合并成程序集加载公共语言运行时执行程序集的代码本机代码生成器:NGen.exeFramework 类库入门通用类型系统公共语言规范(CLS)与非托管代码的互操作性 将源代码编译程托管模块 公共语言运行时(Co…...
Javascript常见数据结构及其应用场景
Basic 以下是对JavaScript中常见数据结构及其应用场景的详细扩展: 数组(Array) 定义与特性:数组是由一组按顺序排列的值组成,每个值都有一个对应的索引(下标),可以通过索引访问和修…...
简单的签到程序 python笔记
简单的人脸识别签到程序 在看完以下代码后,略微修改一番,你就能够组装出自己的“简单的人脸识别签到程序”了。 请注意库的安装,否则会不可用。 你可以通过在cmd中使用:pip install来安装。 以下代码运行python 3.8 UI界面 使…...
30天如何成功转行成为AI产品经理?如果你也想转行到AI,赶紧进来抄作业!!!
前言 随着AI技术的快速发展,AI产品经理成为了备受瞩目的职业。如果您也想抓住这个机遇,不妨跟随这份30天快速入门指南,开始您的AI产品经理转型之旅。 一、学习路线 第一阶段(5天):初阶应用 该阶段让大家…...
基于Python+Vue开发的蛋糕商城管理系统
项目简介 该项目是基于PythonVue开发的蛋糕商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的蛋糕商…...
WSL开发--利用Git连接远程仓库(详细步骤)
这篇文章主要介绍了如何将本地项目推送到 GitLab 上,并且避免每次提交都需要输入用户名和密码。文中分步讲解了配置 GitLab SSH 密钥以及配置 Git 远程仓库地址的方法。以下是文章的优化和简洁版: 将本地项目推送到 GitLab 并配置 SSH 免密登录 为了方便…...
VLAN高级+以太网安全
VLAN聚合 MUX VLAN QinQ 以下是这三种VLAN技术的作用及其在项目中的应用实例: VLAN聚合 (VLAN Aggregation) VLAN聚合通常用于将多个VLAN数据聚合到一个物理链路上,以减少链路数量、提高链路利用率。这样可以在一个物理链路上同时传输不同VLAN的数据包&…...
R7:糖尿病预测模型优化探索
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 一、实验目的: 探索本案例是否还有进一步优化的空间 二、实验环境: 语言环境:python 3.8编译器:Jupyter notebo…...
Spring核心:探索IoC容器与依赖注入的奥秘
目录 一、什么是Spring? 二、什么是 Ioc ? 2.1 控制反转的实现方式 2.1.1 依赖注入 2.1.2 依赖查找 2.1.3 优点分析 2.2 理解 Ioc 一、什么是Spring? 我们通常所说的 Spring 指的是 Spring Framework(Spring 框架ÿ…...
15分钟学 Go 实践项目二:打造博客系统
打造博客系统 项目概述 在本项目中,我们将创建一个简单的博客系统,重点实现CRUD(创建、读取、更新、删除)操作和用户管理。这个博客系统将使用户能够发布文章,评论,并管理其个人账户信息。 目标 实现用…...
Follow软件的使用入门教程
开篇 看到很多兄弟还不知道怎么用这个当下爆火的浏览器!在这里简单给需要入门的小伙伴一些建议: 介绍 简单解释一下,RSS 意思是简易信息聚合,用户可以通过 RSS 阅读器或聚合工具自主订阅并浏览各个平台的内容源,不用…...
【IC验证】systemverilog的设计特性
systemverilog的设计特性 一.概述二.面向硬件的过程语句块1.说明2.always_comb2.always_latch3.always_ff 三.关系运算符1.说明2.例子 四.inside判定符1.说明2.例子 五.条件分支语句(1)说明(2)例子(case和unique case的…...
【点击劫持漏洞(附测试代码)】
漏洞描述 点击劫持(Clickjacking)是一种网络攻击技术,攻击者通过将一个恶意的页面或按钮隐藏在合法网站的页面下,诱使用户在不知情的情况下点击隐藏的内容,从而触发攻击者设计的操作。这种攻击通常会导致用户无意中执…...
【AD】3-4 在原理图中放置元件
1.打开原理图库,选中元件点击放置 2.点击工程右键,选择,,进行编译,点击Components,选中鼠标点击拖动即可...
协程2 --- 相关概念
文章目录 协程切换方案协程库的完善程度协程栈方案协程调度实现有栈协程与无栈协程对称协程与非对称协程 协程切换方案 具体使用和解析看栈切换那个博客 使用setjump、longjump c语言提供的方案 可参考:libmill 使用操作系统提供的api:ucontext、fiber …...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
沙箱虚拟化技术虚拟机容器之间的关系详解
问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...

