ROS导航

news2024/10/3 10:43:07

参考文章:

(31条消息) ROS导航小车1 teb_local_planner参数(仅作记录/收集)_teb local planner参数_Crush Mome的博客-CSDN博客

运行导航:

1. 启动底盘控制包 :

base_conctronl

2.启动键盘控制节点:

rosrun teleop_twist_keyboard teleop_twist_keyboard.py

3.机器人端启动雷达扫描建图:

roslaunch robot_navigation robot_slam_laser.launch

4.PC端启动Rviz视图

roslaunch robot_navigation slam_rviz.launch

5. 进入地图包内保存包

roscd robot_navigation/maps #进包
rosrun map_server map_saver -f map #保存地图,命名为map

6. 启动雷达导航:

roslaunch robot_navigation robot_navigation.launch

7. Rviz导航视图:

roslaunch robot_navigation navigation_rviz.launch

一、move_base.launch

<launch>
  <!-- Arguments -->
  <arg name="cmd_vel_topic" default="cmd_vel" />  # 话题控制
  <arg name="odom_topic" default="odom" /> # 里程计
  <arg name="planner"  default="dwa" doc="opt: dwa, teb"/> # 导航
  <arg name="simulation" default= "false"/>  # 仿真 
  <arg name="use_dijkstra" default= "true"/>  
  

  <arg name="base_type" default= "$(env BASE_TYPE)"/> 
  <arg name="move_forward_only" default="false"/>

  <!-- move_base use DWA planner-->
  <group if="$(eval planner == 'dwa')">
    <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
      <!-- use global_planner replace default navfn as global planner ,global_planner support A* and dijkstra algorithm-->
      <param name="base_global_planner" value="global_planner/GlobalPlanner"/>
      <param name="base_local_planner" value="dwa_local_planner/DWAPlannerROS" />
      <!-- <rosparam file="$(find robot_navigation)/param/$(env BASE_TYPE)/global_planner_params.yaml" command="load" />       -->
      <rosparam file="$(find robot_navigation)/param/$(env BASE_TYPE)/costmap_common_params.yaml" command="load" ns="global_costmap" />
      <rosparam file="$(find robot_navigation)/param/$(env BASE_TYPE)/costmap_common_params.yaml" command="load" ns="local_costmap" />
      <rosparam file="$(find robot_navigation)/param/$(env BASE_TYPE)/local_costmap_params.yaml" command="load" />
      <rosparam file="$(find robot_navigation)/param/$(env BASE_TYPE)/global_costmap_params.yaml" command="load" />
      <rosparam file="$(find robot_navigation)/param/$(env BASE_TYPE)/move_base_params.yaml" command="load" />
      <rosparam file="$(find robot_navigation)/param/$(env BASE_TYPE)/dwa_local_planner_params.yaml" command="load" />
      <remap from="cmd_vel" to="$(arg cmd_vel_topic)"/>
      <remap from="odom" to="$(arg odom_topic)"/>
      <param name="DWAPlannerROS/min_vel_x" value="0.0" if="$(arg move_forward_only)" />
      <!--default is True,use dijkstra algorithm;set to False,usd A* algorithm-->
      <param name="GlobalPlanner/use_dijkstra " value="$(arg use_dijkstra)" />    
    </node>
  </group>
  <!-- move_base use TEB planner-->
  <group if="$(eval planner == 'teb')">
    <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
      <!-- use global_planner replace default navfn as global planner ,global_planner support A* and dijkstra algorithm-->
      <param name="base_global_planner" value="global_planner/GlobalPlanner"/>
      <param name="base_local_planner" value="teb_local_planner/TebLocalPlannerROS" />
      <!-- <rosparam file="$(find robot_navigation)/param/$(env BASE_TYPE)/global_planner_params.yaml" command="load" /> -->
      <rosparam file="$(find robot_navigation)/param/$(env BASE_TYPE)/costmap_common_params.yaml" command="load" ns="global_costmap" />
      <rosparam file="$(find robot_navigation)/param/$(env BASE_TYPE)/costmap_common_params.yaml" command="load" ns="local_costmap" />
      <rosparam file="$(find robot_navigation)/param/$(env BASE_TYPE)/local_costmap_params.yaml" command="load" />
      <rosparam file="$(find robot_navigation)/param/$(env BASE_TYPE)/global_costmap_params.yaml" command="load" />
      <rosparam file="$(find robot_navigation)/param/$(env BASE_TYPE)/move_base_params.yaml" command="load" />
      <rosparam file="$(find robot_navigation)/param/$(env BASE_TYPE)/teb_local_planner_params.yaml" command="load" />
      <remap from="cmd_vel" to="$(arg cmd_vel_topic)"/>
      <remap from="odom" to="$(arg odom_topic)"/>
      <param name="TebLocalPlannerROS/max_vel_x_backwards" value="0.0" if="$(arg move_forward_only)" />
      <!--default is True,use dijkstra algorithm;set to False,usd A* algorithm-->
      <param name="GlobalPlanner/use_dijkstra " value="$(arg use_dijkstra)" />
      <!--stage simulator takes the angle instead of the rotvel as input (twist message)-->

      
    </node>
  </group>


    <!-- move_base -->



</launch>

1. teb_local_planner_params.yaml 

此文件为TEB(NanoCar默认使用的路径规划算法)参数,参数详细如下:

TebLocalPlannerROS: # TEB局部路径规划

 odom_topic: odom #使用里程计坐标
    
 # Trajectory
  
 teb_autosize: True #优化期间允许改变轨迹时域长度
 dt_ref: 0.3 #局部路径规划解析度(0.01~1.0) 默认为0.3
 dt_hysteresis: 0.1 #允许浮动范围
 max_samples: 500
 global_plan_overwrite_orientation: True #覆盖全局路径中局部路点朝向
 allow_init_with_backwards_motion: True #允许开始后退回原来的执行的轨迹
 max_global_plan_lookahead_dist: 3.0 #全局优化子集最大长度
 global_plan_viapoint_sep: -1 #从全局计划中提取的每两个连续通过的点的最小间隔
 global_plan_prune_distance: 1
 exact_arc_length: False # ture则使用精确弧长
 feasibility_check_no_poses: 2 # 检测位姿可达到的时间间隔
 publish_feedback: False # 发布包含完整轨迹和障碍物
    
 # Robotvb  
         
 max_vel_x: 0.8 # 最大前进速度 x
 max_vel_x_backwards: 0.2 #最大后退速度 x
 max_vel_y: 0.0 # y方向最大速度 阿克曼形是没有的
 max_vel_theta: 0.53 # the angular velocity is also bounded by min_turning_radius in case of a carlike robot (r = v / omega) 最大转向角速度
 acc_lim_x: 0.5 # 最大加速度
 acc_lim_theta: 0.5 #最大角加速度

 # ********************** Carlike robot parameters ********************
 min_turning_radius: 0.375        # Min turning radius of the carlike robot (compute value using a model or adjust with rqt_reconfigure manually)——最小转弯半径
 wheelbase: 0.145                 # Wheelbase of our robot——驱动轴与转向轴之间的距离
 cmd_angle_instead_rotvel: False  # stage simulator takes the angle instead of the rotvel as input (twist message) —— 将收到的消息转化为操作
 # ********************************************************************

 footprint_model: # types: "point", "circular", "two_circles", "line", "polygon"
   type: "line" # 设置机器人模型——可以为上面几种
   line_start: [0.05, 0.0] # for type "line" #线的起点
   line_end: [0.10, 0.0] # for type "line" #线的终点


 # GoalTolerance
    
 xy_goal_tolerance: 0.1 #xy目标偏移度
 yaw_goal_tolerance: 0.2 #目标角度偏移容忍度
 free_goal_vel: False #允许机器人以最大速度前往目的地,我们可以直接打开,然后设置一下我们上面的速度
 complete_global_plan: True #完成目标点
    
 # Obstacles
    
 min_obstacle_dist: 0.12 # 与障碍物最小距离——与线
 inflation_dist: 0.6 # 障碍物膨胀距离
 include_costmap_obstacles: True # 局部地图中的障碍物是否考虑
 costmap_obstacles_behind_robot_dist: 1.5 
 obstacle_poses_affected: 15

 dynamic_obstacle_inflation_dist: 0.6 #动态障碍物膨胀范围
 include_dynamic_obstacles: True #是否将为速度模型

 costmap_converter_plugin: ""
 costmap_converter_spin_thread: True
 costmap_converter_rate: 5

 # Optimization
    
 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 # must be > 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 

 # Homotopy Class Planner

 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

# Recovery
 
 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

2. move_base_params.yaml

此为 move_base 节点自身参数,也是控制其他参数的基本

controller_frequency: 2.0 # 底盘发送数据
controller_patience: 15.0 # 控制器有效控制下发时间

planner_frequency: 0.2 # 全局规划执行频率
planner_patience: 5.0 # 留给规划期寻找路径的时间

conservative_reset_dist: 3.0 # 

oscillation_timeout: 10.0 # 允许震荡时间
oscillation_distance: 0.2 # 移动多远才能发送不摆动

clearing_rotation_allowed: false # 是否使用恢复模块

3. local_costmap_params.yaml

local_costmap: #局部代价地图
  global_frame: map # 代价图的世界坐标系
  robot_base_frame: base_footprint # 机器人局部坐标
  update_frequency: 5.0 # 代价地图更新频率
  publish_frequency: 5.0 # 代价地图发布频率
  rolling_window: true # 是否使用动态窗口
  width: 3 # 代价地图宽度
  height: 3 # 代价地图宽度
  resolution: 0.05 #精度
  transform_tolerance: 0.5 #等待超时时间
  plugins: # 固定使用,地图序列
   - {name: static_layer,        type: "costmap_2d::StaticLayer"}
   - {name: obstacle_layer,      type: "costmap_2d::ObstacleLayer"}

4. global_costmap_params.yaml

global_costmap: # 全局代价地图
  global_frame: map # 地图名
  robot_base_frame: base_footprint #机器人底部坐标系
  update_frequency: 1.0 # 代价地图更新频率
  publish_frequency: 0.5 # 发布频率
  # static_map: true  #设置为静态地图
  transform_tolerance: 0.5 #等待超时时间
  plugins:
    - {name: static_layer,            type: "costmap_2d::StaticLayer"}
    - {name: obstacle_layer,          type: "costmap_2d::VoxelLayer"}
    - {name: inflation_layer,         type: "costmap_2d::InflationLayer"}

5. costmap_common_params.yaml

footprint: [ [-0.035,-0.1], [0.18,-0.1], [0.18,0.1], [-0.035,0.1] ] #机器人占有面积

transform_tolerance: 0.2 # 等待坐标发布超时时间

obstacle_layer: # 障碍层
 enabled: true
 obstacle_range: 2.5 #放入代价地图的距离
 raytrace_range: 3.0 #清除代价地图的距离
 inflation_radius: 0.05 #膨胀半径
 track_unknown_space: false 
 combination_method: 1
 
 observation_sources: laser_scan_sensor #传感器参数源:雷达
 laser_scan_sensor: {data_type: LaserScan, topic: scan, marking: true, clearing: true}
#设置源消息 消息类型 发布话题 障碍物消息 是否清除障碍物消息

inflation_layer: #膨胀层
  enabled:              true #使能
  cost_scaling_factor:  10.0  # 代价比例 越大价值越小(default: 10)
  inflation_radius:     0.1  # 膨胀半径

static_layer: #静态层
  enabled:              true
  map_topic:            "/map" #话题名

关于参数的修改意见:

目前版本,我们使用的是Jetson nano阿克曼系列,我们使用的是基础版,所以我们测速时最大速度应该为1.5m,我们设置为0.8m进行测试。

TEB规划器的性能问题的总结参考

· 关闭多路径并行规划(效果非常显著)
· 使用Costmap Converter (非常显著)
· 降低迭代次数(no_inner/outer_iterations) (显著)
· 降低 max_lookahead_distance (一般)
· 减小局部耗费地图的大小 (显著)
· 增大规划周期和控制周期 (影响效果)

· 使用单点footprint,配合最小障碍物距离约束 (不太显著且影响效果)

我们主要参照的时teb.yaml这个参数表,可以直接影响我们的速度。


dt_ref 局部路径规划的解析度(默认0.3)
dt_hysteresis 允许改变的时域解析度的浮动范围, 一般为 dt_ref 的 10% 左右(默认0.1)

dt_ref和dt_hysteresis 最优路径上的两个相邻姿态(即位置、速度、航向信息,可通过TEB可视化在rivz中看到)的默认距离。
此距离不固定,规划器自动根据速度大小调整这一距离,速度越大,相邻距离自然越大。


global_plan_overwrite_orientation 覆盖全局路径中局部路径点的朝向,有些全局规划者在开始和全局目标之间没有考虑局部子目标的方向,因此自动确定

在我们的示例中,我们是开启的,为了寻找多条到达目的的路线,虽然这样可以减小我们的碰撞,但是会减小我们的速度,对于车辆的2D规划,可以设置为False,可实现对全局路径的更好跟踪。


max_global_plan_lookahead_dist
考虑优化的全局计划子集的最大长度(累积欧几里得距离)(如果为0或负数:禁用;长度也受本地Costmap大小的限制),默认3.0

该参数决定局部规划初始轨迹的最大长度,实际调试发现此参数无需过大,因为局部轨迹在每个控制周期都被更新,实际执行的指令仅是轨迹上第一个点的速度值,这里设置为1.5(默认3.0)即可,过长也可能导致优化结果无法有效收敛。 我们在示例中将他改小。

要求:1.应随车辆最大速度的增大而增大 2.不应超过激光雷达等传感器的可靠测量范围 3. 不应超过局部耗费地图的大小,即不能要求TEB对局部耗费地图以外的部分进行规划。


feasibility_check_no_poses 检测位姿可到达的时间间隔

在判断生成的轨迹是否冲突时使用,此时设置为3,即从轨迹起点开始逐个检查轨迹上的3个点,若3个点均不发生碰撞,则认为本次轨迹有效,由于teb优化并非硬约束,这里相当于是轨迹生成之后的一层保障,这个参数因根据机器人的速度和环境复杂程度调整,否则极有可能出现在狭窄环境中走走停停的情况。


max_vel_x  acc_lim_x   x轴方向速度与加速度约束
max_vel_y acc_lim_y    y轴方向速度与加速度约束
max_vel_x_backwards 最大倒车速度

阿克曼的y是为0的,x的最大速度我们上面说过,设置为1,加速度我们可以设置为0.3.

注意加速度同样约束减速过程。若电机性能良好且速度不快可以立即刹车,可直接将acc_lim_x设置为0,表示没有约束。若电机不能承受阶跃输入或者响应时间很长,则应当设置加速度限制.

禁止倒车应在penalty部分将前向行驶的权重设置得极高,但是我们是不需要禁止的。


GoalTolerance 参数设置机器人停止运行的容差

xy_goal_tolerance和yaw_goal_tolerance 目标跟踪误差

根据车辆运行精度设置。例如,笔者使用一台攀爬RC车构建导航系统,这种车辆转向间隙特性很大,则不应设置严格的航向限制

free_goal_vel 自由目标速度

在竞速的部分,我们可以在参数里直接置为True,让小车全速前进


Obstacles 参数用于对环境中障碍物的处理方式,体现在轨迹优化阶段

costmap_converter_plugin  是否使用costmap_converter插件  若设置为空字符,则视为禁用转换

costmap_converter插件的作用是将障碍物预先表示成线段或多边形的形式,可以在一定程度上减轻后续计算距离的压力,具体见costmap_converter - ROS Wiki


include_costmap_obstacles 必须设置为True后才能规避实时探测到的、建图时不存在的障碍物。

这个是我们必须要打开的


min_obstacle_dist 最小障碍物距离

 增大min_obstacle_dist可以防止机器人离墙太近,但是对于狭窄通道的情况,反而应该设置的很小。这三个参数的设置非常重要,需要根据机器人的外形尺寸小心调整,否则极易出现狭窄空间机器人无法通过或优化不收敛的情况。


inflation_dist 障碍物膨胀距离

默认0.0 障碍物膨胀距离。这个值必须大于min_obstacle_dist才有效。源码在AddEdgesObstacles. 此膨胀只是降低通过这些区域的优先级,不应当用此距离迫使车辆远离障碍物。障碍物周边的缓冲区,零惩罚代价,缓冲区会导致规划器减速,我们设置为0.6


costmap_obstacles_behind_robot_dist	double	限制在机器人后面规划时考虑到的占用的本地成本图障碍(指定距离,单位为米)

obstacle_poses_affected	int	障碍物位置与轨迹上最接近的姿态相连,以减少计算量,但同时也考虑了许多相邻的障碍物

 


https://www.jianshu.com/p/a0f1d93f5179

Optimization 参数主要是设置优化框架中各部分的权重大小

我们在这给出参考链接

no_inner_iterations	int	被外循环调用后内循环执行优化次数	1	5	100
no_outer_iterations	int	执行的外循环的优化次数	1	4	100
optimization_activate	bool	激活优化	False	True	True
optimization_verbose	bool	打印优化过程详情	False	False	True
penalty_epsilon	double	对于硬约束近似,在惩罚函数中添加安全范围	0.0	0.1	1.0
weight_max_vel_x	double	最大x速度权重	0.0	2.0	1000.0
weight_max_vel_y	double	最大y速度权重	0.0	2.0	1000.0
weight_max_vel_theta	double	最大加速度权重	0.0	1.0	1000.0
weight_acc_lim_x	double	最大x 加速度权重	0.0	1.0	1000.0
weight_acc_lim_y	double	最大y 加速度权重	0.0	1.0	1000.0
weight_acc_lim_theta	double	最大角速度权重	0.0	1.0	1000.0
weight_kinematics_nh	double	满足非完整运动学的优化权值	0.0	1000.0	10000.0
weight_kinematics_forward_drive	double	优化过程中,迫使机器人只选择前进方向,差速轮适用	0.0	1.0	1000.0
weight_kinematics_turning_radius	double	优化过程中,车型机器人的最小转弯半径的权重	0.0	1.0	1000.0
weight_optimaltime	double	优化过程中,基于轨迹的时间上的权重	0.0	1.0	1000.0
weight_obstacle	double	优化过程中,和障碍物最小距离的权重	0.0	50.0	1000.0

no_inner_iterations: 5 图优化optimizer的迭代次数
no_outer_iterations: 4 每次外部循环迭代都会根据所需的时间分辨率dt_ref自动调整轨迹的大小,并调用内部优化器
penalty_epsilon 0.1 一次性改变所有的惩罚项,为惩罚函数增加一个小的安全余量,以实现硬约束近似. 例如为速度的约束提供一个缓冲的效果,在到达速度限制前会产生一定的惩罚,让其提前减速达到缓冲的效果
weight_obstacle 默认值:50.0. 优化权重以保持与障碍物的最小距离。可以增大至几百,让机器人提前转向,避免卡死
obstacle_cost_exponent 无默认值,目前设置为0.65. 源码在EdgeObstacle::computeError和EdgeInflatedObstacle::computeError,判断是否为1,同时min_obstacle_dist > 0才有效。用于更新g2o的误差函数
weight_kinematics_nh 默认值:1000. 用于满足非完整运动学的优化权重. 该参数必须很高,因为运动学方程构成了一个等式约束,即使值1000也不意味着由于与其他成本相比较小的“原始”成本值而导致的矩阵条件不佳

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

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

相关文章

ROG魔霸7Plus电脑一直蓝屏错误怎么重装系统?

ROG魔霸7Plus电脑一直蓝屏错误怎么重装系统&#xff1f;有用户在使用ROG魔霸7Plus电脑的时候&#xff0c;频繁的遇到了系统蓝屏的情况。因为这样影响了自己的正常使用&#xff0c;所以想要进行系统的重新安装。那么如何进行系统重装操作呢&#xff1f;来看看以下的操作方法教学…

ONES × 中国信通院《中国企业软件研发管理白皮书》即将发布 | 预约直播

由 ONES 与中国信息通信研究院联合发起的《中国企业软件研发管理白皮书》&#xff08;下称「白皮书」&#xff09;将于 4 月 20 日 正式发布。白皮书由 ONES、中国信息通信研究院云计算与大数据研究所、招商基金管理有限公司、紫金财产保险股份有限公司、深圳市鸿合创新信息技术…

AI大模型内卷加剧,商汤凭什么卷进来

2023年&#xff0c;国内大模型何其多。 目前&#xff0c;已宣布推出或即将推出大模型的国内企业多达20余家&#xff0c;基本上能想到的相关企业都已入局。其中&#xff0c;既有资金雄厚的BAT、华为、字节等大厂&#xff0c;也有王慧文、王小川、周伯文等互联网大佬领衔的初创企…

外卖小程序01

目录 nginx反向代理和负载均衡反向代理好处nginx反向代理的配置方式 负载均衡**nginx 负载均衡的配置方式&#xff1a;****nginx 负载均衡策略&#xff1a;** 动静分离 用户密码加密需求代码实现 Swagger框架介绍使用步骤常用注解使用案例:员工登录EmployeeController实体类Emp…

科研成果 | 不同调制方式的开源数据集及其数据扩增方式

文章目录 1. 数据源2. 数据扩增2.1 基于opencv的一些基础变换2.2 基于GAN网络的方法2.2.1 SinGAN2.2.2 基于多图的GAN方法1. 数据源 网址: https://www.sigidwiki.com/wiki/VHF 每种数据基本只有一条,所以要用的话只能进行数据扩征 2. 数据扩增 两种方法: 基于opencv的一…

浏览器输入 http 自动转 https 问题解决方法

目录 表象 原因 解决方案 解决方案一 解决方案二 表象 今天在开发的过程中遇到一个问题&#xff0c;我们项目的地址是 “http://xxx.xxx.com/website/” &#xff0c;结果粘贴到浏览器里自动跳转成了 “https://xxx.xxx.com/website/”。百思不解啊&#xff0c;为啥呢。 …

git上如何通过本地仓库推送自己的代码到远程仓储

从gitHub或者gitee上拉取代码后&#xff0c;我老是想着把别人的代码保存到自己的仓库上&#xff0c;这里教你一招。 gitee的&#xff1a; 首先我们在gitee或者github上创建一个自己的仓库&#xff0c;github的我就不在展示了&#xff0c;基本上和gitee操作一样 输入相关信息…

【redis】bitmap、hyperloglog、GEO案例

【redis】bitmap、hyperloglog、GEO案例 文章目录 【redis】bitmap、hyperloglog、GEO案例前言一、面试题二、统计的类型聚合统计排序统计问题&#xff1a;思路 二值统计 0和1基数统计 三、hyperloglog1、名词理解UV 独立访客PV 页面浏览量DAU 日活跃用户MAU 月活跃度 2、看需求…

愚蠢的往事-网络安全专题之数字证书

血泪教训史&#xff0c;我被骗去办理了数字证书。 文章目录 加密算法摘要算法数字签名数字证书血泪开篇数字证书 加密算法 相关知识点&#xff1a;对称加密算法、非对称加密算法、信息完整性验证算法。 对称加密算法&#xff1a;1.加密密钥和解密密钥相同的算法&#xff0c;…

小行助学答题系统编程等级考试scratch三级真题2023年3月(含题库答题软件账号)

青少年编程等级考试scratch真题答题考试系统请点击 电子学会-全国青少年编程等级考试真题Scratch一级&#xff08;2019年3月&#xff09;在线答题_程序猿下山的博客-CSDN博客_小航答题助手 1.计算“248……128”&#xff0c;用变量n表示每项&#xff0c;根据变化规律&#xf…

SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈

http客户端Feign &#xff08;一&#xff09;基于Feign远程调用 1、RestTemplate方式调用存在的问题 2、Feign的介绍 3、定义和使用Feign客户端 这个接口里面将来的封装的就是所有对userservice发起的远程调用 1、orderserivce的pom <!--feign客户端依赖--> <depe…

Dsq: 用于针对JSON、CSV、Excel、Parquet等运行SQL查询的命令行工具

目录 About Install macOS Homebrew macOS、Linux和WSL上的二进制文件 Windows上的二进制文件&#xff08;非WSL&#xff09; 从源代码生成和安装 Usage Pretty print dsq的管道数据 多个文件和连接 无需查询即可将数据转换为JSON 嵌套在对象中的对象数组 嵌套对象…

ASRock Z690 Extreme WiFi 6E i7 13700KF电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。&#xff08;下载请直接百度黑果魏叔&#xff09; 硬件型号驱动情况 主板ASRock Z690 Extreme WiFi 6E 处理器Intel Core i7 13700KF已驱动 内存KINGBANK 2x32GB DDR4-3600CL18已驱动 硬盘Predator SSD GM7000 1TB已驱动…

qt5.15.2配置android

qt安装安卓编译器就直接跳过&#xff0c;我们开始将如何进行配置。 如果专门开发的app&#xff0c;则应该使用android进行开发&#xff0c;qt是熟悉qt语言&#xff0c;或者app需要进行跨平台的话则使用qt for android比较好。 下载 首先安装jdk&#xff0c;最好安装 jdk11&am…

[Java] Socket (UDP , TCP)

目录 什么是Socket ? TCP api 与 UDP api 的特点 : UDP api 使用UDP Socket 实现一个单词翻译 : TCP api 使用TCP协议来实现一个回显服务 什么是Socket ? 应用层和传输层之间的桥梁 . 程序猿写网络代码 (应用层) , 要想发送这个数据 , 就需要去调用下层协议 , 应用层…

uniapp图片转base64及JS各文件类型相互转换

uniapp图片转base64及JS各文件类型相互转换 1、chooseImage request arrayBufferToBase642、chooseImage getFileSystemManager3、chooseImage FileReader4、扩展-JS各文件类型相互转换4.1 File 转成 ArrayBuffer4.2 File 转成 blob4.3 File 转成 base644.4 ArrayBuffer 转…

【数据结构】前序遍历,中序遍历,后序遍历(二叉树)

一&#xff1a;给图求前序&#xff0c;中序&#xff0c;后序 前序遍历&#xff08;先序遍历&#xff09; 核心思想&#xff1a;根左右 前序序列&#xff1a;ABDEFCGH 先访问根结点A&#xff0c;打印A&#xff0c;然后访问左子树&#xff0c;此时左子树B又作为根节点&#xf…

JAVAWeb05-xml、DOM4J

1. xml概述 1.1 官方文档 地址: https://www.w3school.com.cn/xml/index.asp 1.2 为什么需要 XML 需求 1 : 两个程序间进行数据通信&#xff1f;需求 2 : 给一台服务器&#xff0c;做一个配置文件&#xff0c;当服务器程序启动时&#xff0c;去读取它应当监听的端口号、还有…

【数字人】使用Metahuman创建数字人模型(上)

这两年数字人类的概念可谓是风头正盛&#xff0c;市面上也流行起各式各样的数字人技术&#xff0c;效果能力及实现成本各不相同。本系列介绍基于Unreal Engine的Metahuman工具低成本构建一个拥有完整的控制权、免费、可商用、高仿真的数字人。本篇为构建基础人物模型 MetaHuma…

PHP快速入门14-Composer包管理安装与使用,附常见的20个使用例子

文章目录 前言一、关于Composer二、如何安装Composer2.1 Windows安装Composer2.2 Linux安装Composer 三、Composer常见的20个使用例子3.1 查找并安装依赖包3.2 更新依赖包3.3 安装指定版本的依赖包3.4 卸载依赖包3.5 查看当前项目依赖包列表3.6 初始化composer.json文件3.7 安装…