move_base参数配置

2023-05-16

现在我们已经可以构建当前环境地图,可以实现机器人在当前地图中的定位。那接下来就可以在地图上给定目标点,开始规划路径控制机器人移动过去,这样就可以完成在已知地图中进行自动导航的任务了。在已知地图中进行路径规划可以举一个很形象的例子,大家在公园里游玩时,经常需要找特定的游玩地点。例如想要寻找熊猫馆,那么就需要在公园提供的游览地图中首先找自己的定位在公园地图的哪一点上,然后开始寻找熊猫馆,这样我们就可以在当前地点和目标地点之间自己找到一条全局路径了,一般我们寻找的路径都是找最近的路径。这就好比是利用了dijkstra算法。有了全局路径还不行,因为我们在行动过程中,还会有各种障碍物出现在我们规划的路径上,那么我们就需要再规划自己的局部路径来暂时性的避开障碍物,规划的局部路径要尽可能的服从于全局路径。这样我们的全局路径就好比长远目标,局部路径好比短期目标。把一个个短期目标都实现了,那么实现全局目标就是必然的事了。

32.png


0x01 配置move_base参数

前面介绍配置代价地图相关的参数时就应注意到,我们若配置路径规划参数那么首先就需要先配置一下move_base相关的参数,因为在move_base中有多种路径规划器算法可选,我们需要告诉move_base路径规划器使用哪种算法。一般来说,全局路径的规划插件包括:

  • navfn:ROS中比较旧的代码实现了dijkstra和A*全局规划算法。

  • global_planner:重新实现了Dijkstra和A*全局规划算法,可以看作navfn的改进版。

  • parrot_planner:一种简单的算法实现全局路径规划算法。

局部路径的规划插件包括:

  • base_local_planner:实现了Trajectory Rollout和DWA两种局部规划算法。

  • dwa_local_planner:实现了DWA局部规划算法,可以看作是base_local_planner的改进版本。

当前上面这些插件只是官方实现的,我们也可以来实现自己的规划算法,以插件的形式包含进move_base,这样就可以来改进这些路径规划算法了。我们可以根据move_base的launch文件来看看也就明白配置哪个文件了:

Screenshot from 2018-07-30 15:15:03.png

我们在stdr_move_base下的config目录中创建move_base_params.yaml,配置文件内容如下:

#FileName: move_base_params.yaml

#Copyright: 2016-2018 ROS小课堂www.corvin.cn

#Author: corvin

#Description:

# move_base软件包的通用配置参数,现在依次解释每个参数意义:

#   shutdown_costmaps:当move_base在不活动状态时,是否关掉costmap.

#   controller_frequency:向底盘控制移动话题cmd_vel发送命令的频率.

#   controller_patience:在空间清理操作执行前,控制器花多长时间等有效控制下发.

#   planner_frequency:全局规划操作的执行频率.如果设置为0.0,则全局规划器仅

#       在接收到新的目标点或者局部规划器报告路径堵塞时才会重新执行规划操作.

#   planner_patience:在空间清理操作执行前,留给规划器多长时间来找出一条有效规划.

#   oscillation_timeout:执行修复机制前,允许振荡的时长.

#   oscillation_distance:来回运动在多大距离以上不会被认为是振荡.

#   base_local_planner:指定用于move_base的局部规划器插件名称.

#   base_global_planner:指定用于move_base的全局规划器插件名称.

#History:

# 20180726: initial this comment.

#

shutdown_costmaps: false

 

controller_frequency: 5.0

controller_patience: 3.0

 

planner_frequency: 1.0

planner_patience: 5.0

 

oscillation_timeout: 8.0

oscillation_distance: 0.3

 

base_local_planner: "dwa_local_planner/DWAPlannerROS"

base_global_planner: "global_planner/GlobalPlanner"

下面来依次解释下各参数的意义:

  • shutdown_costmaps:当move_base在不活动状态时,是否关掉costmap.

  • controller_frequency:向底盘控制移动话题cmd_vel发送命令的频率.

  • controller_patience:在空间清理操作执行前,控制器花多长时间等有效控制下发.

  • planner_frequency:全局规划操作的执行频率.如果设置为0.0,则全局规划器仅在接收到新的目标点或者局部规划器报告路径堵塞时才会重新执行规划操作.

  • planner_patience:在空间清理操作执行前,留给规划器多长时间来找出一条有效规划.

  • oscillation_timeout:执行修复机制前,允许振荡的时长.

  • oscillation_distance:来回运动在多大距离以上不会被认为是振荡.

  • base_local_planner:指定用于move_base的局部规划器名称.

  • base_global_planner:指定用于move_base的全局规划器插件名称.


0x02 配置全局路径参数

我们在进行全局路径规划时,需要由外部来告知目标点。同时还需要知道全局代价地图,因为在路径规划时需要避开代价高的危险区域,不然规划的路径就撞到墙上了。

我们这里仍然只需要配置好global_planner规划器的参数即可。我们在stdr_move_base的config目录中创建global_planner_params.yaml文件,文件内容如下:

GlobalPlanner:

  allow_unknown: false

  default_tolerance: 0.2

  visualize_potential: false

  use_dijkstra: true

  use_quadratic: true

  use_grid_path: false

  old_navfn_behavior: false

 

  lethal_cost: 253

  neutral_cost: 50

  cost_factor: 3.0

  publish_potential: true

  orientation_mode: 0

  orientation_window_size: 1

下面来依次解释下各参数意义:

  • allow_unknown:是否允许规划器规划穿过未知区域的路径,只设计该参数为true还不行,还要在costmap_commons_params.yaml中设置track_unknown_space参数也为true才行。

  • default_tolerance:当设置的目的地被障碍物占据时,需要以该参数为半径寻找到最近的点作为新目的地点.

  • visualize_potential:是否显示从PointCloud2计算得到的势区域.

  • use_dijkstra:设置为true,将使用dijkstra算法,否则使用A*算法.

  • use_quadratic:设置为true,将使用二次函数近似函数,否则使用更加简单的计算方式,这样节省硬件计算资源.

  • use_grid_path:如果设置为true,则会规划一条沿着网格边界的路径,偏向于直线穿越网格,否则将使用梯度下降算法,路径更为光滑点.

  • old_navfn_behavior:若在某些情况下,想让global_planner完全复制navfn的功能,那就设置为true,但是需要注意navfn是非常旧的ROS系统中使用的,现在已经都用global_planner代替navfn了,所以不建议设置为true.

  • lethal_cost:致命代价值,默认是设置为253,可以动态来配置该参数.

  • neutral_cost:中等代价值,默认设置是50,可以动态配置该参数.

  • cost_factor:代价地图与每个代价值相乘的因子.

  • publish_potential:是否发布costmap的势函数.

  • orientation_mode:如何设置每个点的方向(None = 0,Forward = 1,Interpolate = 2,ForwardThenInterpolate = 3,Backward = 4,Leftward = 5,Rightward = 6)(可动态重新配置)

  • orientation_window_size:根据orientation_mode指定的位置积分来得到使用窗口的方向.默认值1,可以动态重新配置.


0x03 配置局部路径规划参数

局部路径规划参数相当重要,因为它是直接控制机器人的移动底盘运动的插件,它负责来向移动底盘的/cmd_vel话题中发布控制命令。机器人移动的效果好不好,这个局部路径规划可是影响最大的。

在这里我们使用dwa_local_planner,它是一个能够驱动底盘移动的控制器,该控制器连接了路径规划器和机器人.使用地图,规划器产生从起点到目标点的运动轨迹,在移动时,规划器在机器人周围产生一个函数,用网格地图表示。控制器的工作就是利用这个函数来确定发送给机器人的速度dx, dy, dtheta

  • DWA算法的基本思想

  1.在机器人控制空间离散采样(dx, dy, dtheta)

  2.对每一个采样的速度进行前向模拟,看看在当前状态下,使用该采样速度移动一小段时间后会发生什么.

  3.评价前向模拟得到的每个轨迹,是否接近障碍物,是否接近目标,是否接近全局路径以及速度等等.舍弃非法路径

  4.选择得分最高的路径,发送对应的速度给底座

  DWA与Trajectory Rollout的区别主要是在机器人的控制空间采样差异.Trajectory Rollout采样点来源于整个前向模拟阶段所有可用速度集合,而DWA采样点仅仅来源于一个模拟步骤中的可用速度集合.这意味着相比之下DWA是一种更加有效算法,因为其使用了更小采样空间;然而对于低加速度的机器人来说可能Trajectory Rollout更好, 因为DWA不能对常加速度做前向模拟。

我们需要在stdr_move_base下的config目录中创建dwa_local_planner_params.yaml文件,该配置文件的内容如下:

DWAPlannerROS:

# Robot Configuration Parameters - stdr robot

  acc_lim_x: 0.3  # maximum is theoretically 2.0

  acc_lim_y: 0.0  # diff drive robot

  acc_lim_th: 0.3

 

  max_trans_vel: 0.3 #choose slightly less than the base's capability

  min_trans_vel: 0.1 #this is the min trans velocity when there is negligible rotational velocity

 

  max_vel_x: 0.3

  min_vel_x: -0.1

  max_vel_y: 0.0  #diff drive robot,don't need set vel_y

  min_vel_y: 0.0

 

  max_rot_vel: 0.5  #choose slightly less than the base's capability

  min_rot_vel: 0.1  #this is the min angular velocity when there is negligible translational velocity

 

# Goal Tolerance Parameters

  yaw_goal_tolerance: 0.1  # 0.1 rad = 5.7 degree

  xy_goal_tolerance: 0.12

  latch_xy_goal_tolerance: false

 

# Forward Simulation Parameters

  sim_time: 2.0    # 1.7

  sim_granularity: 0.025

  vx_samples: 6    # default 3

  vy_samples: 1    # diff drive robot, there is only one sample

  vth_samples: 20  # 20

  controller_frequency: 5.0

 

# Trajectory Scoring Parameters

  path_distance_bias: 90.0      # 32.0

  goal_distance_bias: 24.0      # 24.0

  occdist_scale: 0.3            # 0.01

  forward_point_distance: 0.325 # 0.325

  stop_time_buffer: 0.2         # 0.2

  scaling_speed: 0.20           # 0.25

  max_scaling_factor: 0.2       # 0.2

  publish_cost_grid: false

 

# Oscillation Prevention Parameters

  oscillation_reset_dist: 0.05  # default 0.05

 

# Global Plan Parameters

  prune_plan: false

下面来依次解释下各参数的意义:

  • acc_lim_x:x方向的加速度绝对值

  • acc_lim_y:y方向的加速度绝对值,该值只有全向移动的机器人才需配置.

  • acc_lim_th:旋转加速度的绝对值.

  • max_trans_vel:平移速度最大值绝对值

  • min_trans_vel:平移速度最小值的绝对值

  • max_vel_x:x方向最大速度的绝对值

  • min_vel_x:x方向最小值绝对值,如果为负值表示可以后退.

  • max_vel_y:y方向最大速度的绝对值.

  • min_vel_y:y方向最小速度的绝对值.

  • max_rot_vel:最大旋转速度的绝对值.

  • min_rot_vel:最小旋转速度的绝对值.

  • yaw_goal_tolerance:到达目标点时偏行角允许的误差,单位弧度.

  • xy_goal_tolerance:到达目标点时,在xy平面内与目标点的距离误差.

  • latch_xy_goal_tolerance:设置为true,如果到达容错距离内,机器人就会原地旋转,即使转动是会跑出容错距离外.

  • sim_time:向前仿真轨迹的时间.

  • sim_granularity:步长,轨迹上采样点之间的距离,轨迹上点的密集程度.

  • vx_samples:x方向速度空间的采样点数.

  • vy_samples:y方向速度空间采样点数.

  • vth_samples:旋转方向的速度空间采样点数.

  • controller_frequency:发送给底盘控制移动指令的频率.

  • path_distance_bias:定义控制器与给定路径接近程度的权重.

  • goal_distance_bias:定义控制器与局部目标点的接近程度的权重.

  • occdist_scale:定义控制器躲避障碍物的程度.

  • stop_time_buffer:为防止碰撞,机器人必须提前停止的时间长度.

  • scaling_speed:启动机器人底盘的速度.

  • max_scaling_factor:最大缩放参数.

  • publish_cost_grid:是否发布规划器在规划路径时的代价网格.如果设置为true,那么就会在~/cost_cloud话题上发布sensor_msgs/PointCloud2类型消息.

  • oscillation_reset_dist:机器人运动多远距离才会重置振荡标记.

  • prune_plan:机器人前进是是否清除身后1m外的轨迹.


0x04 查看路径规划效果

Screenshot from 2018-07-30 18:22:53.png

在上图中蓝色的路径是全局路径规划器使用dijkstra算法来计算得到的路径。在机器人前面有一小段红色的路径就是局部路径规划器使用dwa计算得到的局部路径,而在局部代价地图中有一段黄色的路径。它与全局的蓝色路径重叠在一起,这个就是局部路径规划器发布出来的跟踪的全局路径,因为在规划局部路径时的就是需要参考全局路径的,规划到达目的地路径的大方向不能错了,不能自己规划一个局部路径却偏离了目标点。

下面来查看下全局路径规划器的话题列表:

Screenshot from 2018-07-31 11:57:24.png

下面查看局部路径规划器发布的话题列表:

Screenshot from 2018-07-31 11:58:41.png


0x05 自动导航效果演示

现在我们基本上已经把自动导航相关的参数都配置好了,现在就可以来看看导航效果了,如下图所示:

1532940925573191.gif

通过上面动图可以得知,我们是在Rviz中的2D Nav Goal来选择导航目标点的:

1.png

其实在该按钮的背后是向/move_base_simple/goal话题中发布了一条目标点命令而已,如下图所示:

Screenshot from 2018-07-30 17:20:23.png

如果我们不想使用Rviz中的2D Nav Goal按钮来设置目标点,我们也可以直接通过往/move_base_simple/goal话题中发布目标点坐标命令:

rostopic pub /move_base_simple/goal geometry_msgs/PoseStamped '{ header: { frame_id: "map" },pose: { position: {x: 9.59, y: 1.36, z: 0.0}, orientation: {x: 0, y: 0, z: 0.68, w: 0.73}}}'

通过上述命令,我们就可以发现效果跟我们通过点击2D Nav Goal按钮选择目标点是一样的。其实,这样就是为我们自动化测试自动导航提供了条件,后面我们可以写一个程序来不断的往/move_base_simple/goal话题中发布目标点,然后等待导航结果。

同样也还可以实现定点巡航的需求,我们可以通过2D Nav Goal按钮来选择地图上自己想要定点巡航的点,然后通过echo出来/move_base_simple/goal相应点的坐标,记录下这些坐标点后,我们就可以在循环中不断的发布这些目标点,这样就可以实现机器人在这几个坐标点上来回不断的移动了。


0x06 Bibliography & Reference

[1]. 白巧克力亦唯心. global_planner整体分析. https://blog.csdn.net/heyijia0327/article/details/45030929

[2]. ROS Wiki上global_planner主页. http://wiki.ros.org/global_planner

[3]. 中国大学MOOC. 机器人操作系统入门讲义. https://sychaichangkun.gitbooks.io/ros-tutorial-icourse163/content/

[4]. ROS Wiki上navfn主页. http://wiki.ros.org/navfn?distro=melodic

[5]. PIBOT导航机器人. ROS机器人底盘(16)-move_base(4)-planner. https://www.jianshu.com/p/6d15ab640f34


0x07 Feedback

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

move_base参数配置 的相关文章

  • 如何在 MySQL 中创建超级用户

    如何在 MySQL 中创建超级用户 xff1f 本指南将引导您完成在 MySQL 中创建新用户并使其成为具有类似于 root 的数据库访问权限的超级用户的步骤 1 首先 xff0c 你必须使用具有CREATE USER权限的root用户登录
  • 统计员工年度,月度的加班和调休统计

    根据需求 xff0c 写了一个统计部门员工年度的加班与调休统计报表 实现结果如下 xff1a 页面代码如下所示 xff1a 64 model IEnumerable lt lvElecCenter Areas HR Models Leave
  • 我的2014-前进在梦想的道路上

    离2014的结束还有2天 xff0c 一年终去 xff0c 感触颇多 xff1a 或是振奋 xff0c 或是感动 xff0c 或是美好 停下手头繁忙的工作 xff0c 静下心来 xff0c 我们一起 来 盘点这一年的工作和生活 这一年你是否
  • 云计算知识3:弹性计算云EC2的基本架构

    弹性计算云EC2主要特性 灵活性 xff1a EC2允许用户对运行实例类型 数量自行配置 xff0c 还可以选择实例运行的地理位置 xff0c 根据用户的需求随时改变实例的使用数量 低成本 xff1a EC2使得企业不必为暂时的业务增长而购
  • 如何将一个网络分为两个子网、如何通过已知IP和子网掩码计算其同一网段的主机IP

    IPV4的IP地址格式通常表示为xxx xxx xxx xxx xff0c 其中xxx为十进制数 xff0c 取值范围是 0 xff0c 255 xff0c 若用16进制表示则为xx xx xx xx xff0c 其中xx的取值范围是 0
  • Unity3D 人称设置(第一人称视角、第三人称视角)

    设置第一人称视角 1 把物体的坐标和摄像机的坐标设置成一样的 xff0c 这样摄像机就在物体内部 xff0c 就是第一人称的视角 2 把摄像机拖拽进物体对象内 xff0c 摄像机变成物体的子对象 xff0c 这样摄像机就能跟着物体一起移动
  • Unity3D 射击游戏练习实例

    知识点 xff1a 刚体组件 xff08 rigidbody xff09 xff0c 受力和碰撞的组件触发器 xff08 Trigger xff09 xff0c 开启后物体碰撞效果取消 xff0c 但仍会返回碰撞消息复制物体对象 xff1a
  • Cocos2dx 环境搭建

    Cocos2dx 环境搭建 准备软件和工具包 xff0c 参考 xff1a Cocos2dx 入门学习准备安装visual studio 安装Python2 7 xff08 直接默认下一步就可以 xff0c 要注意Python安装的路径 x
  • 缺失MSVCR相关文件怎么办

    根据系统的提示 xff0c 看缺失的是哪个文件 xff0c 正常是msvcr100 120 dll在百度上搜索对应文件下载把下载好的msvcr文件 xff0c 放到 C Windows SysWOW64 目录下正常msvcr文件会缺失好几个
  • Cocos2dx 源码解释

    程序入口 AppDelegate AppDelegate在AppDelegate h中定义的 AppDelegate h中的AppDelegate类 xff1a AppDelegate类下的applicationDidFinishLaunc
  • Visual Studio 2019(VS2019) 基本操作

    卸载 加载项目 1 卸载项目 xff1a 不删除项目代码 xff0c 但是停止对该项目的一切使用和调用 xff08 好处是保留代码 xff09 2 加载项目 xff1a 重新加载已停用的项目 xff0c 可以继续使用和调用 修改VS主题风格
  • Elasticsearch 中文分词&多词搜索&权重

    目录 中文分词器 一 安装中文分词器ik 二 使用中文分词器 多词搜索 权重 中文分词器 一 安装中文分词器ik 源码地址 xff1a https github com medcl elasticsearch analysis ik 根据提
  • C# do while循环结构

    注意 循环结构一共有三种 xff1a while循环 https blog csdn net shenqiankk article details 96299600do while循环for循环 https blog csdn net sh
  • C# for循环结构

    注意 循环结构一共有三种 xff1a while循环 https blog csdn net shenqiankk article details 96299600do while循环 https blog csdn net shenqia
  • C# 构造方法(函数)

    构造方法的作用 构造方法用来创建对象 xff0c 并且在构造方法中对对象进行初始化 构造方法的特殊性 没有返回值 xff0c 不需要写类型 xff0c 连void都不要写 构造方法的方法名 xff0c 与类名要相同 构造方法结构 publi
  • GDI+ 绘图方法

    GDI绘直线步骤 创建GDI对象 xff1a Graphics g 61 this CreateGraphics 创建画笔对象 xff1a Pen pen 61 new Pen Brushes Red 创建两个点 xff1a Point p
  • C# 连接MySQL数据库

    C 引用MySQL步骤 xff1a 下载mysql data dll xff1a http soft onlinedown net soft 618668 htm将文件放在项目目录下在VS2019项目内 xff0c 引用mysql data
  • Navicat of MySQL连接和使用

    请先安装MySQL服务 MySQL数据库安装 xff1a https blog csdn net shenqiankk article details 99756531 新建连接 如果出现Can t connect to MySQL ser
  • Mysql创建数据库字符集的选择

    转载 xff1a https blog csdn net JingChC article details 82908686 字符集选择 xff1a 在国内正常都是用 UTF 8 排序选择 xff1a 排序一般分为两种 xff1a utf b
  • Linux进程状态解析 之 R、S、D、T、Z、X (主要有三个状态)

    linux是一个多用户 xff0c 多任务的系统 xff0c 可以同时运行多个用户的多个程序 xff0c 就必然会产生很多的进程 xff0c 而每个进程会有不同的状态 Linux进程状态 xff1a R TASK RUNNING xff0c

随机推荐

  • python装饰器(详解)

    1 什么是装饰器 器指的是工具 xff0c 可以定义成成函数 装饰指的是为其他事物添加额外的东西点缀 合到一起的解释 xff1a 装饰器指的定义一个函数 xff0c 该函数是用来为其他函数添加额外的功能 就是拓展原来函数功能的一种函数 2
  • linux基础---常用命令学习

    1 显示日期的指令 xff1a date Linux时钟分为系统时钟 xff08 System Clock xff09 和硬件 xff08 Real Time Clock xff0c 简称RTC xff09 时钟 系统时钟是指当前Linux
  • JdbcTemplate queryForObject Incorrect result size: expected 1, actual 0

    使用Spring中的jdbcTemplate 时 xff0c 通过id查询不到结果时返回Incorrect result size expected 1 actual 0 64 Override public lt T gt T query
  • Ubuntu usb wifi驱动安装(MT7601u芯片)

    软件环境 Ubuntu 14 04 硬件环境 芯片 xff1a MT7601u 确定芯片 xff0c 在电脑插上usb wifi xff0c 在ubuntu命令行 xff0c 输入lsusb命令 xff0c 在所列的列表中有MT7601u即
  • 【目标检测】Fast RCNN算法详解

    Girshick Ross Fast r cnn Proceedings of the IEEE International Conference on Computer Vision 2015 继2014年的RCNN之后 xff0c Ro
  • 【目标检测】RCNN算法详解

    Girshick Ross et al Rich feature hierarchies for accurate object detection and semantic segmentation Proceedings of the
  • SHTC3的研发经历

    SHTC3自学笔记 一 SHTC3介绍 SHTC3是一款低功耗温湿度传感器 xff0c 温度的采集范围为 40 125 xff0c 湿度的采集范围为 0 100 通讯方式是I2C xff0c 引脚定义如图1所示 I2C的器件地址只有一个 x
  • BH1750光照传感器超详细攻略(从原理到代码讲解,看完你就懂了)

    目录 一 前言二 芯片介绍三 IIC通讯介绍IIC通讯过程简介IIC通讯实例BH1750的通讯过程 四 BH1750的命令五 BH1750编程教学六 测试七 总结 一 前言 之所以写这篇文章 xff0c 原因有两个 一是 xff1a 有个师
  • mininet+FlowVisor+OpenDayLight环境搭建及实验一

    注 xff1a 这是我在学习时整理的笔记 xff0c 包含我遇到的问题已经一些需要注意的点 转载请标明出处并附上原文连接 xff0c 谢谢 xff01 http blog csdn net sherkyoung article detail
  • Ubuntu Linux服务器安装图形化界面并用VNC Viewer连接

    文章目录 1 流程2 服务器开启VNC使用的端口3 服务器安装Ubuntu桌面与VNC Server4 客户端安装VNC Viewer xff08 略 xff09 5 连接 x1f517 1 流程 服务器开启VNC使用的端口服务器安装Ubu
  • 利用JavaScript写一个简易地学生管理系统

    不多说上代码 span class token keyword var span studentNoArr span class token operator 61 span span class token punctuation spa
  • 轻松掌握 JS 删除数组中指定的对象或者删除数组中某一项

    前言 关于 JS 删除数组中指定的对象或某一项的话题 xff0c 它是在实际开发中经常会遇到的问题 xff0c 也是需要掌握的基本技能 在这篇文章中 xff0c 我们将深入探讨如何使用 JS 来删除数组中指定的对象或者删除数组中某一项 删除
  • ubuntu能ping通却ssh不上(connect to localhost port 22: Connection refused)解决办法

    1 问题描述 xff1a ssh 192 168 144 130 ssh connect to host 192 168 144 130 port 22 Connection refused 2 原因 因为Ubuntu默认没有安装opens
  • mysql增加用户并赋予、删除、查看各种权限

    数据库系统表概述 mysql数据库下存储的都是权限表 xff0c 重要的有user表 db表 host表还有tables priv表 columns priv proc priv表 1 user表 xff1a 有用户列 权限列 安全列 资源
  • 数据库上云?这些事你不得不知

    您的业务适合哪种数据库 xff0c 真的知道吗 xff1f 互联网 43 人工智能 物联网等新兴技术的迅猛发展 xff0c 让如何处理大量 复杂 多变的数据问题再次浮出水面 xff0c 成为新时代企业用户面临的技术挑战之一 关系型数据库 x
  • 【STM32技巧】STM32 PWM互补输出设置

    本例程是使用STM32CubeMX 6 5版本生成带代码 测试单片机型号 xff1a STM32F103VET6 时钟设置72MHZ 使用定时器1的通道1 和 通道2 配置PWM互补输出 分频72分频 定时器频率为 72MHZ 72 61
  • js删除键值对的方法

    1 对于Map 增set k v 删delete k 查 get k 改set 43 get span class token keyword const span graph span class token operator 61 sp
  • java一路走来

    记得第一次学编程 xff0c 那都是高二时 xff0c 那时因为电脑很狂热 xff0c 刚好有一个哥就给我介绍了编程 xff0c 并给我演示了下vb语言 xff0c 用vb做了个计算器 xff0c 当时我惊呆了 xff0c 才知道编程有多神
  • Python基础教程之列表

    八仙过海是一个中国民间故事 xff0c 讲了汉钟离 张果老 韩湘子 铁拐李 吕洞宾 何仙姑 蓝采和和曹国舅八位神仙各显神通渡海的故事 我们都知道变量只能被赋值为一个值 xff0c 现在我们想把八位神仙的名字同时赋值 xff0c 该如何实现呢
  • move_base参数配置

    现在我们已经可以构建当前环境地图 xff0c 可以实现机器人在当前地图中的定位 那接下来就可以在地图上给定目标点 xff0c 开始规划路径控制机器人移动过去 xff0c 这样就可以完成在已知地图中进行自动导航的任务了 在已知地图中进行路径规