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

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/OccupancyGridmap_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/OccupancyGridmap_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 官方介绍&#xff1a;http://wiki.ros.org/move_base 如果在仿真环境下&#xff0c; sensor source、odometry source 和 sensor transforms 都已提供好&#xff0c;我们只需要完成以下部分&#xff1a; 一、编写导航程序 ①创建 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&#xff0c;按从小到大的顺序输出所有形如abcde/fghij n的表达式&#xff0c;其中a&#xff5e;j恰好为数字0&#xff5e;9的一个排列&#xff08;可以有前导0&#xff09;&#xff0c;2≤n≤79。枚举fghij&#xff0c;验证a…...

基于SpringBoot的社区讯息服务小程序【附源码】

基于SpringBoot的社区讯息服务小程序 效果如下&#xff1a; 系统登陆页面 管理员主页面 用户管理页面 社区活动管理页面 设施报修管理页面 缴费信息管理页面 用户主页面 用户登录页面 社区活动页面 研究背景 随着移动互联网技术的飞速发展&#xff0c;社区生活日益依赖于数字…...

springboot图书管理系统(一个简单的单体架构项目,适合小白)

期末作业 为了水一水期末作业&#xff0c;打算写一个简易的单体架构图书管理系统。以下为后端主要技术栈(后期可能更新&#xff0c;打算一个星期左右写完吧)。 springbootredismysqlspringcachespringsecurity … 数据库设计 第一次从0开始搭建后续可能还会多更新一些表。 -- 角…...

《CLR via C#》读书笔记--CLR的执行模型

将源代码编译成托管模块将托管模块合并成程序集加载公共语言运行时执行程序集的代码本机代码生成器&#xff1a;NGen.exeFramework 类库入门通用类型系统公共语言规范&#xff08;CLS&#xff09;与非托管代码的互操作性 将源代码编译程托管模块 公共语言运行时&#xff08;Co…...

Javascript常见数据结构及其应用场景

Basic 以下是对JavaScript中常见数据结构及其应用场景的详细扩展&#xff1a; 数组&#xff08;Array&#xff09; 定义与特性&#xff1a;数组是由一组按顺序排列的值组成&#xff0c;每个值都有一个对应的索引&#xff08;下标&#xff09;&#xff0c;可以通过索引访问和修…...

简单的签到程序 python笔记

简单的人脸识别签到程序 在看完以下代码后&#xff0c;略微修改一番&#xff0c;你就能够组装出自己的“简单的人脸识别签到程序”了。 请注意库的安装&#xff0c;否则会不可用。 你可以通过在cmd中使用&#xff1a;pip install来安装。 以下代码运行python 3.8 UI界面 使…...

30天如何成功转行成为AI产品经理?如果你也想转行到AI,赶紧进来抄作业!!!

前言 随着AI技术的快速发展&#xff0c;AI产品经理成为了备受瞩目的职业。如果您也想抓住这个机遇&#xff0c;不妨跟随这份30天快速入门指南&#xff0c;开始您的AI产品经理转型之旅。 一、学习路线 第一阶段&#xff08;5天&#xff09;&#xff1a;初阶应用 该阶段让大家…...

基于Python+Vue开发的蛋糕商城管理系统

项目简介 该项目是基于PythonVue开发的蛋糕商城管理系统&#xff08;前后端分离&#xff09;&#xff0c;这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能&#xff0c;同时锻炼他们的项目设计与开发能力。通过学习基于Python的蛋糕商…...

WSL开发--利用Git连接远程仓库(详细步骤)

这篇文章主要介绍了如何将本地项目推送到 GitLab 上&#xff0c;并且避免每次提交都需要输入用户名和密码。文中分步讲解了配置 GitLab SSH 密钥以及配置 Git 远程仓库地址的方法。以下是文章的优化和简洁版&#xff1a; 将本地项目推送到 GitLab 并配置 SSH 免密登录 为了方便…...

VLAN高级+以太网安全

VLAN聚合 MUX VLAN QinQ 以下是这三种VLAN技术的作用及其在项目中的应用实例&#xff1a; VLAN聚合 (VLAN Aggregation) VLAN聚合通常用于将多个VLAN数据聚合到一个物理链路上&#xff0c;以减少链路数量、提高链路利用率。这样可以在一个物理链路上同时传输不同VLAN的数据包&…...

R7:糖尿病预测模型优化探索

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、实验目的&#xff1a; 探索本案例是否还有进一步优化的空间 二、实验环境&#xff1a; 语言环境&#xff1a;python 3.8编译器&#xff1a;Jupyter notebo…...

Spring核心:探索IoC容器与依赖注入的奥秘

目录 一、什么是Spring&#xff1f; 二、什么是 Ioc &#xff1f; 2.1 控制反转的实现方式 2.1.1 依赖注入 2.1.2 依赖查找 2.1.3 优点分析 2.2 理解 Ioc 一、什么是Spring&#xff1f; 我们通常所说的 Spring 指的是 Spring Framework&#xff08;Spring 框架&#xff…...

15分钟学 Go 实践项目二:打造博客系统

打造博客系统 项目概述 在本项目中&#xff0c;我们将创建一个简单的博客系统&#xff0c;重点实现CRUD&#xff08;创建、读取、更新、删除&#xff09;操作和用户管理。这个博客系统将使用户能够发布文章&#xff0c;评论&#xff0c;并管理其个人账户信息。 目标 实现用…...

Follow软件的使用入门教程

开篇 看到很多兄弟还不知道怎么用这个当下爆火的浏览器&#xff01;在这里简单给需要入门的小伙伴一些建议&#xff1a; 介绍 简单解释一下&#xff0c;RSS 意思是简易信息聚合&#xff0c;用户可以通过 RSS 阅读器或聚合工具自主订阅并浏览各个平台的内容源&#xff0c;不用…...

【IC验证】systemverilog的设计特性

systemverilog的设计特性 一.概述二.面向硬件的过程语句块1.说明2.always_comb2.always_latch3.always_ff 三.关系运算符1.说明2.例子 四.inside判定符1.说明2.例子 五.条件分支语句&#xff08;1&#xff09;说明&#xff08;2&#xff09;例子&#xff08;case和unique case的…...

【点击劫持漏洞(附测试代码)】

漏洞描述 点击劫持&#xff08;Clickjacking&#xff09;是一种网络攻击技术&#xff0c;攻击者通过将一个恶意的页面或按钮隐藏在合法网站的页面下&#xff0c;诱使用户在不知情的情况下点击隐藏的内容&#xff0c;从而触发攻击者设计的操作。这种攻击通常会导致用户无意中执…...

【AD】3-4 在原理图中放置元件

1.打开原理图库&#xff0c;选中元件点击放置 2.点击工程右键&#xff0c;选择&#xff0c;&#xff0c;进行编译&#xff0c;点击Components&#xff0c;选中鼠标点击拖动即可...

协程2 --- 相关概念

文章目录 协程切换方案协程库的完善程度协程栈方案协程调度实现有栈协程与无栈协程对称协程与非对称协程 协程切换方案 具体使用和解析看栈切换那个博客 使用setjump、longjump c语言提供的方案 可参考&#xff1a;libmill 使用操作系统提供的api&#xff1a;ucontext、fiber …...

Hadoop-005-HDFS分布式文件存储原理

一、HDFS数据如何存储 分布式存储&#xff1a;每个服务器&#xff08;节点&#xff09;存储文件的一部分, 本文提到的part只是为方便理解, 指的文件部分数据, 并不是真实存在的概念 #mermaid-svg-qjJMG6r2bzRNcWkF {font-family:"trebuchet ms",verdana,arial,sans-s…...

【多线程入门篇】 创建线程以及线程的属性

大家好呀 我是浪前 今天给大家讲解的是创建线程以及线程的属性 祝愿所有点赞关注的人&#xff0c;身体健康&#xff0c;一夜暴富&#xff0c;升职加薪迎娶白富美!!! 点我领取迎娶白富美大礼包 &#x1f353;多线程编程: 前言&#xff1a; 我们为什么不用多进程&#xff1f;…...

三十四、Python基础语法(文件操作-上)

一、介绍 文件&#xff1a;可以储存在长期储存设备上的一段数据&#xff0c;在计算机储存的数据都是二进制的形式储存的&#xff0c;我们用软件打开文件不是看见0和1是因为软件会自动将二进制数据进行转换。 二、文件操作 1.打开文件 打开文件&#xff1a;文件是在硬盘中储…...

【大咖云集,院士出席 | ACM独立出版】第四届大数据、人工智能与风险管理国际学术会议 (ICBAR 2024,11月15-17日)--冬季主会场

第四届大数据、人工智能与风险管理国际学术会议 (ICBAR 2024)--冬季主会场 2024 4th International Conference on Big Data, Artificial Intelligence and Risk Management 官方信息 会议官网&#xff1a;www.icbar.net 2024 4th International Conference on Big Data, Art…...

03 Oracle进程秘籍:深度解析Oracle后台进程体系

文章目录 Oracle进程秘籍&#xff1a;深度解析Oracle后台进程体系一、Oracle后台进程概览1.1 DBWn&#xff08;Database Writer Process&#xff09;1.2 LGWR&#xff08;Log Writer Process&#xff09;1.3 SMON&#xff08;System Monitor Process&#xff09;1.4 PMON&#…...

AndroidStudio通过Bundle进行数据传递

作者&#xff1a;CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 使用环境&#xff1a;AndroidStudio 目录 1.新建活动 2.修改页面布局 代码&#xff1a; 效果&#xff1a; 3.新建类ResultActivity并继承AppCompatActivity 4.新建布局文件activity_result.xml 代…...

Linux篇(文件管理命令)

目录 一、Linux下文件命名规则 1. 可以使用哪些字符 2. 文件名的长度 3. 文件名的大小写 4. Linux文件扩展名 二、目录创建与删除 1. 目录创建 1.1. mkdir创建目录 1.2. mkdir -p 递归创建目录 1.3. 使用mkdir同时创建多个目录 2. 目录删除&#xff08;必须是空目录&…...

大数据新视界 -- 大数据大厂之 Impala 性能优化:数据存储分区的艺术与实践(下)(2/30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

【数据结构】B树

B树&#xff08;B-Tree&#xff09;是一种自平衡的多叉搜索树&#xff0c;广泛应用于数据库系统和文件系统中&#xff0c;以便高效地进行数据存储和检索。它的设计目标是减少磁盘I/O操作&#xff0c;使得在大量数据的情况下依然能够进行快速的查找、插入和删除操作。 B树的特点…...

Docker 容器网络模式详解

Docker 容器网络模式详解 1.1 引言 1.1.1 Docker 网络简介 Docker 是一个开源的应用容器引擎&#xff0c;它允许开发者将应用和依赖打包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。容器采用沙箱机制&#xff0c;彼此…...