ROS小车研究笔记3/4/2023:自动导航launch文件解析

news2024/11/18 6:38:48

对于ROS小车导航算法基本原理和使用方法,可以看笔记http://t.csdn.cn/NUWHt

1 启动小车导航节点:turn_on_wheeltec_robot navigation.launch


<launch>
 <!-- 开启机器人底层相关节点 同时开启导航功能-->
 <include file="$(find turn_on_wheeltec_robot)/launch/turn_on_wheeltec_robot.launch">
    <arg name="navigation"  default="true"/>
 </include>
 <!-- turn on lidar开启雷达  -->
 <include file="$(find turn_on_wheeltec_robot)/launch/wheeltec_lidar.launch" />

 <!-- 设置需要用于导航的地图  -->
 <arg name="map_file" default="$(find turn_on_wheeltec_robot)/map/WHEELTEC.yaml"/>
 <node name="map_server_for_test" pkg="map_server" type="map_server" args="$(arg map_file)">
 </node>

 <!-- 开启用于导航的自适应蒙特卡洛定位amcl-->
 <include file="$(find turn_on_wheeltec_robot)/launch/include/amcl.launch" />

 <!-- MarkerArray功能节点> -->
 <node name='send_mark' pkg="turn_on_wheeltec_robot" type="send_mark.py">
 </node>

</launch>

在launch文件中打开了以下launch文件:
1 turn_on_wheeltec_robot.launch

该文件启动了小车下位机电机控制节点,小车urdf文件及TF坐标,扩张卡尔曼滤波算法(robot_pose_ekf.launch 用于处理里程计信号),和建图导航算法

2 wheeltec_lidar.launch

该文件启动激光雷达相关功能

3 /map/WHEELTEC.yaml

该文件为地图的yaml文件,在小车建图中创建,这里我们默认打开文件名WHEELTEC,如果要切换导航地图可以在这里修改文件名

4 amcl.launch

该文件启动amcl定位算法,在launch/include 文件夹里的amcl.launch文件:

<launch>

    <!-- <arg name="set_initpose" default="true"> -->
    <!-- 使用map的topic而不是map文件-->
    <arg name="use_map_topic" default="false"/>
    <!-- 不可以使用PointCloud,只能使用LaserScan -->
    <arg name="scan_topic" default="scan"/>
    <arg name="map_topic"  default="/map"/>

    <node pkg="amcl" type="amcl" name="amcl" clear_params="true">

      <!-- <rosparam command="load" file="$(find turn_on_wheeltec_robot)/map/WHEELTEC_end.yaml" />-->

      <param name="use_map_topic" value="$(arg use_map_topic)"/>
      <!-- 使用rtabmap分布的Map,连接TF树 -->
      <remap from="/map" to="/$(arg map_topic)"/>
      <!-- Publish scans from best pose at a max of 10 Hz -->
      <param name="odom_model_type" value="omni-corrected"/>
      <!-- <param name="odom_model_type" value="omnid"/> -->
      <!-- <param name="odom_model_type" value="diff"/> -->
      <!-- <param name="odom_model_type" value="diff-corrected"/> -->
      <param name="odom_alpha5" value="0.1"/>
      <param name="gui_publish_rate" value="10.0"/>
      <param name="laser_max_beams" value="60"/>
      <param name="laser_max_range" value="12.0"/>
      <param name="min_particles" value="500"/>
      <param name="max_particles" value="2000"/>
      <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.2"/>
      <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_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.25"/>
      <param name="update_min_a" value="0.2"/>
      <param name="odom_frame_id" value="odom_combined"/>
      <param name="resample_interval" value="1"/>
      <!-- Increase tolerance because the computer can get quite busy -->
      <param name="transform_tolerance" value="1.0"/>
      <param name="recovery_alpha_slow" value="0.0"/>
      <param name="recovery_alpha_fast" value="0.0"/>
      <remap from="scan" to="$(arg scan_topic)"/>
    </node>
</launch>

可以看到这里有大量和算法相关的参数可以进行修改,之后了解算法原理后可以根据实际情况对参数进行调整

代价地图配置文件
代价地图有三个配置文件costmap_common_params.yaml,global_costmap_params.yaml,和local_costmap_params.yaml。其中costmap_common_params.yaml配置的是代价地图总体参数。后两个分别为全局和局域的代价地图参数。

在启动导航时一般先加载costmap_common_params文件,后加载local_costmap_params和global_costmap_params。对于相同的参数后加载的文件会覆盖先加载的文件。

costmap_common_params.yaml

#代价地图官方介绍:http://wiki.ros.org/costmap_2d
#静态层官方介绍:http://wiki.ros.org/costmap_2d/hydro/staticmap
#障碍层官方介绍:http://wiki.ros.org/costmap_2d/hydro/obstacles

#设置静态层参数
static_layer:
  #是否开启静态层
  enabled: true
  #静态层的订阅的地图话题
  map_topic: map
  #地图话题中数据值为多少,会转换为静态层代价地图中的未知区域
  unknown_cost_value: -1
  #地图话题中数据值为多少,会转换为静态层代价地图中的完全占用区域
  lethal_cost_threshold: 100
  #是否仅把第一次订阅到的地图数据转换为静态层代价地图,无视后续订阅到的地图数据
  first_map_only: false
  #是否订阅话题 “map_topic”+“_updates”
  subscribe_to_updates: false
  #如果设置为false,地图话题中的未知区域在代价地图中会转换为自由区域
  track_unknown_space: true
  #如果设置为true,静态层代价地图只有未知、自由和完全占用三种情况
  #如果设置为false,静态层代价地图可以有不同的占用程度
  trinary_costmap: true


#设置障碍层参数
obstacle_layer:
  #是否开启障碍层
  enabled: true
  #设置障碍层的观测源名称,可以一次设置多个观测源observation_sources: scan, scan2, camera
  observation_sources: scan
  #设置对应观测源参数
  scan:
    #观测源数据话题名称
    topic: scan
    #观测源的TF坐标名称,如果设置为空,会自动从话题数据寻找TF坐标名称
    #以下三种数据格式支持自动寻找TF坐标名称
    #sensor_msgs/LaserScan, sensor_msgs/PointCloud, and sensor_msgs/PointCloud2
    sensor_frame: laser
    #观测源话题的数据格式,可以为LaserScan、PointCloud、PointCloud2
    data_type: LaserScan
    #保留多久时间内的全部话题数据作为障碍层输入,设置为0代表只保留最近的一帧数据,单位:s
    observation_persistence: 0.0
    #读取观测源话题的频率,如果进行设置,频率应该设置的比传感器频率低一些。默认0,代表允许观测源一直不发布话题。单位:Hz
    expected_update_rate: 0.0
    #是否使用该观测源清除自由空间
    clearing: true
    #是否使用该观测源添加障碍物
    marking: true
    #高于多少的障碍物不加入观测范围,单位:m
    max_obstacle_height: 2.0
    #低于多少的障碍物不加入观测范围,单位:m
    min_obstacle_height: 0.0
    #多少范围内障碍物会被加入代价地图,单位:m
    obstacle_range: 2.5
    #多少范围内障碍物会被追踪,单位:m
    raytrace_range: 3.0

  #在观测源基础上再次进行设置的参数
  #高于多少的障碍物不加入观测范围,单位:m
  max_obstacle_height:  2.0
  #多少范围内障碍物会被加入代价地图,单位:m
  obstacle_range: 2.5
  #多少范围内障碍物会被追踪,单位:m
  raytrace_range: 3.0

  #如果设置为true,障碍层代价地图会有未知、自由和完全占用三种情况
  #如果设置为false,障碍层代价地图只有自由和完全占用两种情况
  track_unknown_space: true
  #障碍层如何与其它地图层处理的方法。
  #0:障碍层覆盖其它地图层; 1:障碍物最大化方法,即各层的占用方格会覆盖其它层的自由方格,这是最常用的方法
  #99:不改变其它地图层,应该是使障碍层层无效的方法
  combination_method: 1

  #如果障碍层类型是"costmap_2d::VoxelLayer",可以对以下参数进行设置
  #代价地图的高度
  #origin_z: 0.0
  #障碍层的Z轴方格的高度
  #z_resolution: 0.2
  #障碍层Z轴上有几个方格
  #z_voxels: 10
  #被认为是“已知”的列中允许的未知单元格数
  #unknown_threshold: 15
  #被认为是“自由”的列中允许的标记单元格数
  #mark_threshold: 0
  #是否发布障碍层的投影地图层话题
  #publish_voxel_map: false
  #如果设置为true,机器人将把它所经过的空间标记为自由区域
  #footprint_clearing_enabled: true

在这里有三个图层可以配置:静态层(static_layer),障碍层(obstacle_layer),和膨胀层(inflation_layer 这里没有配置)。这三个图层类似于PS里面的图层,会一起被用于导航

静态层:预先导入的SLAM地图
膨胀层:障碍物周围的膨胀区域
障碍层:实时检测到的障碍物

global_costmap_params.yaml

#代价地图官方介绍:http://wiki.ros.org/costmap_2d

#全局代价地图参数命名空间
global_costmap:
  #代价地图的TF参考坐标系
  global_frame: map 
  #机器人的TF坐标名称
  robot_base_frame: base_footprint
  #global_frame和robot_base_frame间的TF坐标停止发布多久后,控制机器人停止,单位:s
  transform_tolerance: 1
  #代价地图刷新频率,单位:Hz
  update_frequency: 1.5
  #代价地图的可视化话题发布频率,单位:Hz
  publish_frequency: 1.0

  #是否直接使用静态地图生成代价地图
  #static_map: true #使用plugins手动配置代价地图时,该参数无效
  #代价地图是否跟随机器人移动,static_map为true时该参数必须为false
  rolling_window: false
  #代价地图宽度,这里会被静态层扩宽,单位:m
  width: 10.0 
  #代价地图高度,这里会被静态层扩宽,单位:m
  height: 10.0 
  #代价地图分辨率(米/单元格)
  resolution: 0.05
  
  #为代价地图设置地图层,这里设置了三层,分别作为静态层、障碍层和膨胀层
  plugins:
    #定义地图层的名称,设置地图层的类型
    - {name: static_layer,      type: "costmap_2d::StaticLayer"}
    #定义地图层的名称,设置地图层的类型。
    #障碍层可以使用VoxelLayer代替ObstacleLayer
    - {name: obstacle_layer,    type: "costmap_2d::VoxelLayer"}
    #定义地图层的名称,设置地图层的类型
    - {name: inflation_layer,   type: "costmap_2d::InflationLayer"}
  #各地图层的参数,会以地图层名称作为命名空间
  #各地图层的参数,会在【costmap_common_params.yaml】内进行设置

这里配置了全局代价地图的参数,包括了代价地图刷新率(update_frequency),地图话题发布频率(publish_frequency),以及该地图中包含哪几个图层,如这里全局代价地图包括了static_layer,obstracle_layer,inflation_layer这三个层。

局部代价地图配置文件和全局代价地图基本一样,这里不再赘述

路径规划器teb_local_planner.launch。teb路径规划器在turn_on_wheeltec_robot.launch文件中被启动

<launch>

  <!-- Arguments参数 -->
  <arg name="car_mode"  default="" />

  <!-- 导航路径规划公共参数 -->
  <rosparam file="$(find turn_on_wheeltec_robot)/params_nav_common/move_base_params.yaml"          command="load" ns="move_base"/>
  <rosparam file="$(find turn_on_wheeltec_robot)/params_nav_common/base_global_planner_param.yaml" command="load" ns="move_base"/>

  <!-- 导航TEB局部路径规划器参数 -->
  <param name="move_base/base_local_planner"    type="string" value="teb_local_planner/TebLocalPlannerROS"/>
  <rosparam file="$(find turn_on_wheeltec_robot)/params_nav_common/teb_local_planner_params.yaml"  command="load" ns="move_base"/>

  <!-- 导航代价地图公共参数 -->
  <rosparam file="$(find turn_on_wheeltec_robot)/params_costmap_common/costmap_common_params.yaml"     command="load" ns="move_base/global_costmap"/>
  <rosparam file="$(find turn_on_wheeltec_robot)/params_costmap_common/costmap_common_params.yaml"     command="load" ns="move_base/local_costmap"/>
  <rosparam file="$(find turn_on_wheeltec_robot)/params_costmap_common/local_costmap_params.yaml"      command="load" ns="move_base"/>
  <rosparam file="$(find turn_on_wheeltec_robot)/params_costmap_common/global_costmap_params.yaml"     command="load" ns="move_base"/>

  <!-- 启动导航节点 -->
  <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
    <!-- 导航代价地图与路径规划器对应车型参数 -->
    <rosparam file="$(find turn_on_wheeltec_robot)/params_costmap_car/param_$(arg car_mode)/teb_local_planner_params.yaml"  command="load"/>
    <rosparam file="$(find turn_on_wheeltec_robot)/params_costmap_car/param_$(arg car_mode)/costmap_car_params.yaml" command="load" ns="global_costmap" />
    <rosparam file="$(find turn_on_wheeltec_robot)/params_costmap_car/param_$(arg car_mode)/costmap_car_params.yaml" command="load" ns="local_costmap" />
  </node>

</launch>

在该launch文件中调用了全局与具有代价地图,并且引入了参数文件teb_local_planner_params.yaml。该文件配置了teb路径规划器的各类相关参数。

teb_local_planner_params.yaml (位置:turn_on_wheeltec_robot/params_nav_common/teb_local_planner_params.yaml)

#TebLocalPlanner官方介绍:http://wiki.ros.org/teb_local_planner

#局部路径规划器DWAPlannerROS命名空间
TebLocalPlannerROS:
  odom_topic: odom #订阅的里程计话题
  map_frame: map #代价地图的TF参考坐标系

  #障碍物参数
  min_obstacle_dist: 0.1 #和障碍物最小距离,直接影响机器人避障效果
  include_costmap_obstacles: True #是否将动态障碍物预测为速度模型,
  costmap_obstacles_behind_robot_dist: 1.5 #限制机器人后方规划时考虑的局部成本地图障碍物
  obstacle_poses_affected: 15  #障碍物姿态受影响0~30
  costmap_converter_plugin: ""
  costmap_converter_spin_thread: True
  costmap_converter_rate: 5
  include_dynamic_obstacles: True 
  dynamic_obstacle_inflation_dist: 0.6

  #目标点误差允许值
  xy_goal_tolerance: 0.2  #机器人到达目标点时附近时的弧度偏差允许量,在该偏差内认为已经到达目标点,单位为:m
  yaw_goal_tolerance: 0.1 #机器人到达目标点时附近时的弧度偏差允许量,在该偏差内认为已经到达目标点单位为:rad
  free_goal_vel: False    #允许机器人以最大速度驶向目的地

  #轨道配置参数
  teb_autosize: True #优化期间允许改变轨迹的时域长度
  dt_ref: 0.45 #局部路径规划的解析度# minimum 0.01
  dt_hysteresis: 0.1 #允许改变的时域解析度的浮动范围, 一般为 dt_ref 的 10% 左右 minimum0.002
  global_plan_overwrite_orientation: False #覆盖全局路径中局部路径点的朝向
  max_global_plan_lookahead_dist: 3.0 #考虑优化的全局计划子集的最大长度
  feasibility_check_no_poses: 5 #检测位姿可到达的时间间隔 minimum 0

  #轨迹优化参数
  no_inner_iterations: 5
  no_outer_iterations: 4
  optimization_activate: True
  optimization_verbose: False
  penalty_epsilon: 0.1
  obstacle_cost_exponent: 4
  weight_max_vel_x: 2
  weight_max_vel_theta: 1
  weight_acc_lim_x: 1
  weight_acc_lim_theta: 1
  weight_kinematics_nh: 1000
  weight_kinematics_forward_drive: 1
  weight_kinematics_turning_radius: 1
  weight_optimaltime: 1 #必须大于0
  weight_shortest_path: 0
  weight_obstacle: 100
  weight_inflation: 0.2
  weight_dynamic_obstacle: 10 
  weight_dynamic_obstacle_inflation: 0.2
  weight_viapoint: 1
  weight_adapt_factor: 2

  #不同拓扑中的并行规划
  enable_homotopy_class_planning: False
  enable_multithreading: True
  max_number_classes: 4
  selection_cost_hysteresis: 1.0
  selection_prefer_initial_plan: 0.95
  selection_obst_cost_scale: 1.0
  selection_alternative_time_cost: False
  roadmap_graph_no_samples: 15
  roadmap_graph_area_width: 5
  roadmap_graph_area_length_scale: 1.0
  h_signature_prescaler: 0.5
  h_signature_threshold: 0.1
  obstacle_heading_threshold: 0.45
  switching_blocking_period: 0.0
  viapoints_all_candidates: True
  delete_detours_backwards: True
  max_ratio_detours_duration_best_duration: 3.0
  visualize_hc_graph: False
  visualize_with_time_as_z_axis_scale: False

  #恢复行为
  shrink_horizon_backup: True
  shrink_horizon_min_duration: 10
  oscillation_recovery: False
  oscillation_v_eps: 0.1
  oscillation_omega_eps: 0.1
  oscillation_recovery_min_duration: 10
  oscillation_filter_duration: 10

导航系统完整架构:
在这里插入图片描述

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

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

相关文章

P6专题:如何通过P6 Professional创建及管理 EPS

目录 引言 创建EPS 引言 牢记P6数据结构&#xff0c;这是P6编制计划的层次&#xff1a;EPS-项目-WBS-作业。 EPS&#xff08;Enterprise Breakdown Structure&#xff09;&#xff1a;企业项目结构&#xff0c;用于组织项目&#xff0c;并进行数据汇总。EPS 代表 Primavera…

XFI和SFI的差异

目录 相同/相似点 应用参考模型 Trace Length 不同点 眼图模板 B点处的眼图模板对比 C点处的眼图模板对比 通道损耗 CDR支持 预加重和均衡 DC特性 RETIMER的用法 通过研究INF-8077i 10 Gigabit Small Form Factor Pluggable Module规范和SFF-8431 Specifications for …

【STM32】入门(十四):FreeRTOS-任务

1、简述 FreeRTOS应用程序由一组独立的任务构成。 在任何时间点&#xff0c;应用程序中只能执行一个任务&#xff0c;FreeRTOS调度器负责决定所要执行的任务。 每个任务在自己的上下文中执行&#xff0c;不依赖于系统内的其他任务或 FreeRTOS的调度器本身。 FreeRTOS调度器负责…

51单片机IIC时序详细分析并驱动EEPROM存储方案应用------day9

51单片机IIC驱动EEPROM存储方案应用------day9 1.常见存储器件&#xff1a; 铁电&#xff0c; E2PROM&#xff0c; FLASH。 共同特点&#xff1a; 掉电后数据不丢失 各自特点&#xff1a; 铁电&#xff1a; 理论上可以无限次擦写&#xff0c; 操作简单&#xff0c; 但是容量小。…

进销存管理系统

技术&#xff1a;Java等摘要&#xff1a;进销存管理系统是为了实现企业仓库商品管理的系统化、规范化和自动化&#xff0c;从而提高企业管理效率而设计开发的管理信息系统。它完全取代了过去一直用人工管理的工作方式&#xff0c;避免了由于管理人员手工操作上的疏忽以及管理质…

【Linux】基本系统维护命令

&#x1f60a;&#x1f60a;作者简介&#x1f60a;&#x1f60a; &#xff1a; 大家好&#xff0c;我是南瓜籽&#xff0c;一个在校大二学生&#xff0c;我将会持续分享C/C相关知识。 &#x1f389;&#x1f389;个人主页&#x1f389;&#x1f389; &#xff1a; 南瓜籽的主页…

P6专题:P6模块/组件简要介绍(P6,Professional,API,TeamMember,WebService)

目录 一 引言 二 P6组件 P6 P6 Professional Team Member PC Team Member App Integration API WebService 一 引言 Oracle Primavera P6 EPPM 是基于“角色”设计的企业级项目管理专业软件&#xff0c;包含了如下几个组件/模块&#xff0c;解决不同维度的问题&#x…

linux入门---shell感性认识

命令行解释器 我们目前学了很多的指令&#xff0c;并且这些指令在磁盘上都是以文件的形式存在的&#xff1a; 通过file可以查看这些文件的信息&#xff0c;我们发现这些文件都含有executable这个单词&#xff0c;那么executable的意思就是这个文件在x86-64平台下是可以执行的…

【巨人的肩膀】JAVA面试总结(五)

1、&#x1f4aa; 目录1、&#x1f4aa;1.1、什么是Spring框架1.2、Spring、SpringMVC、SpringBoot三者关系1.3、谈谈对于Spring IoC 和 DI 的理解1.4、什么是依赖注入&#xff1f;可以通过多少种方式完成依赖注入1.5、什么是Spring Bean1.6、将一个类声明为Bean的注解有哪些1.…

PMP是什么意思?适合哪些人学呢?

PMP简而言之&#xff0c;就是提高项目管理理论基础和实践能力的考试。 官方一点的说明呢&#xff0c;就是&#xff1a;PMP证书全称为Project Management Professional&#xff0c;也叫项目管理专业人士资格认证。 PMP证书由美国项目管理协会(PMI)发起&#xff0c;是严格评估项…

Docker镜像的内部机制

Docker镜像的内部机制 镜像就是一个打包文件&#xff0c;里面包含了应用程序还有它运行所依赖的环境&#xff0c;例如文件系统、环境变量、配置参数等等。 环境变量、配置参数这些东西还是比较简单的&#xff0c;随便用一个 manifest 清单就可以管理&#xff0c;真正麻烦的是文…

【VC 7/8】vCenter Server 基于文件的备份和还原Ⅱ——使用 FTP 协议备份 VC(VAMI 英文)

目录2. 备份 vCenter Server2.1 使用 FTP 协议备份 VC&#xff08;1&#xff09;登录 vCenter Server 管理界面&#xff08;2&#xff09;进入Backup页面&#xff08;3&#xff09;配置 Backup Schedule&#xff08;4&#xff09;开始备份&#xff08;5&#xff09;备份成功&am…

信息安全与数学基础-笔记-④二次同余方程

知识目录二次同余方程的解欧拉判别式Legendre (勒让德符号)二次同余方程的解 什么是二次同余方程的解 注意这里二次同余方程和一次同余方程是不一样的 在x2x^2x2 三 a (mod m) 方程中举例 ↓ 解即剩余类&#xff0c;因为是模m&#xff0c;所以我们在 [ 0, m-1 ]中逐个代入看是…

HTML DOM

通过 HTML DOM&#xff0c;可访问 JavaScript HTML 文档的所有元素。HTML DOM (文档对象模型)当网页被加载时&#xff0c;浏览器会创建页面的文档对象模型&#xff08;Document Object Model&#xff09;。HTML DOM 定义了用于 HTML 的一系列标准的对象&#xff0c;以及访问和处…

Compaction的原理与Hbase Compaction实现

HBase中的用户数据在LSM树体系架构中最终会形成一个一个小的HFile文件。我们知道&#xff0c;HFile小文件如果数量太多会导致读取低效。为了提高读取效率&#xff0c;LSM树体系架构设计了一个非常重要的模块——Compaction。Compaction核心功能是将小文件合并成大文件&#xff…

现代C++教程 笔记

写在前面 记录一下《现代C教程》中的要点。 现代C是指C11之后的语法特性&#xff0c;如无特别说明&#xff0c;下面的语法特性均是C11后才可使用。 一、语言可用性的强化 1. 常量 1.1 nullptr 作用&#xff1a; 代替NULL赋空指针&#xff1b; 使用&#xff1a; char *a …

进制的转换:

任意进制转换成十进制&#xff1a;十进制数位置上数*当前进制的位权二进制与八进制、十六进制之间的转换&#xff1a;3个二进制一个8进制4个二进制一个16进制各种进制的书写方式:十进制转换任意进制,分为整数部分和小数部分&#xff1a;整数部分&#xff08;除基取余法&#xf…

SpringCloud的五大组件功能

SpringCloud的五大组件 EurekaRibbonHystrixZuulConfig 一、Eureka 作用是实现服务治理&#xff0c;即服务注册与发现。 Eureka服务器相当于一个中介&#xff0c;负责管理、记录服务提供者的信息。服务调用者不需要自己寻找服务 &#xff0c;而是把需求告诉Eureka &#x…

IronWebScraper 2023.2.2 Crack

关于 .NET 的 IronWebScraper 用于从 HTML Web 应用程序中提取干净的结构化数据的 C# 框架。 IronWebScraper for .NET 是一个 C# 网络抓取库&#xff0c;它允许开发人员模拟和自动化人类浏览行为&#xff0c;以从 Web 应用程序中提取内容、文件和图像作为本机 .NET 对象。Iron…

基于Flink SQL CDC Mysql to Mysql数据同步

基于Flink SQL CDC Mysql to Mysql数据同步 Flink CDC有两种方式同步数据库&#xff1a; 一种是通过FlinkSQL直接输入两表数据库映射进行数据同步&#xff0c;缺点是只能单表进行同步&#xff1b;一种是通过DataStream开发一个maven项目&#xff0c;打成jar包上传到服务器运行…