Robot SLAM e navegação autônoma (4) - pacote de funções de navegação

Robot SLAM e navegação autônoma (4) - pacote de funções de navegação

1. Estrutura de navegação

A chave para a navegação é o posicionamento do robô e o planejamento do caminho.

  • move_base: realiza o planejamento de caminho ideal na navegação do robô
  • amcl: Realize o posicionamento do robô
    em mapas bidimensionais Com base nos dois pacotes funcionais acima, o ROS fornece uma série de estruturas de navegação completas:
    Insira a descrição da imagem aqui

O robô libera as informações necessárias do sensor e a posição alvo para navegação, e o ROS pode completar a função de navegação. Nesta estrutura, o pacote de funções move_base fornece a principal interface operacional e interativa para navegação. O pacote de funções amcl garante a precisão do caminho e localiza com precisão onde você está.
1) Primeiro, o pacote de funções de navegação coleta as informações do sensor do robô para obter o efeito de evitar obstáculos em tempo real. O robô publica sensor_msgs / LaserScan ou informações de nuvem de pontos 3D por meio do ROS.
2) Em segundo lugar, o pacote de funções de navegação publica as informações do odômetro no formato nav_msgs / Odometria e, ao mesmo tempo, publica a transformação TF correspondente.
3) Finalmente, a saída do pacote de funções de navegação são os comandos de controle de formato geometry_msgs / Twist, e o robô conclui as tarefas por meio desses comandos.
Existem muitos pacotes funcionais incluídos na estrutura de navegação, que podem ser instalados diretamente usando o seguinte comando:

sudo apt-get install ros-kinetic-navigation

Dois, pacote de funções move_base

O planejamento do caminho consiste principalmente nos dois planejadores a seguir:

  • Planejamento de caminho global (global_planner): De acordo com a localização de destino fornecida e mapa global para o planejamento de caminho geral. Na navegação, use o algoritmo Ditesco ou A * para planejar o caminho global e calcular o melhor caminho.
  • Planejamento de implementação local (local_planner): Em situações reais, devido a possíveis obstáculos, é impossível acompanhar perfeitamente o planejamento do caminho global. O planejamento de implementação local é implementado pelo módulo local_planner, usando o algoritmo Dynamic Window Approaches para pesquisar caminhos múltiplos para evitar obstáculos, critérios de avaliação abrangentes (se atingir o obstáculo, o tempo necessário), selecionar o caminho ideal e calcular a velocidade linear no ciclo de condução e velocidade angular para evitar colisões com obstáculos dinâmicos.

1. Tópicos e serviços

Insira a descrição da imagem aqui

2. Configuração de parâmetros

Insira a descrição da imagem aqui

Três, pacote de funções amcl

Posicionamento autônomo: o robô pode calcular sua posição no mapa em qualquer estado.
O ROS fornece um método de localização Monte Carlo adaptativo (ou amostragem kld) (amcl), que é um método probabilístico e estatístico que usa um filtro de partículas para rastrear a postura de um robô em relação a um mapa existente.

1. Tópicos e serviços

Insira a descrição da imagem aqui

2. Configuração de parâmetros

Parâmetros gerais do filtro
Insira a descrição da imagem aqui
Modelo de parâmetro do laser Parâmetros do modelo do
Insira a descrição da imagem aqui
odômetro
Insira a descrição da imagem aqui

3. Transformação de coordenadas

O odômetro pode ajudar no posicionamento do robô, e amcl também pode realizar o posicionamento do robô, mas existem diferenças entre os dois:
Insira a descrição da imagem aqui

  • Posicionamento do odômetro: use apenas os dados do odômetro para processar a conversão TF entre / base e / odom
  • posicionamento amcl: pode estimar as informações de posicionamento do robô no sistema de coordenadas do mapa / mapa e fornecer conversão TF entre / base, / odom e / map

Quarto, a configuração do mapa de custos

O mapa de navegação usa dois mapas de custos para armazenar informações de obstáculos no ambiente circundante:

  • Mapa de planejamento de caminho global-custo (global_costmap)
  • Planejamento de caminho local e prevenção de obstáculos em tempo real (local_costmap)
    dois mapas de custo precisam usar alguns arquivos de configuração comuns ou independentes: arquivos de configuração geral, arquivos de configuração de planejamento global e arquivos de configuração de planejamento local.

1. Arquivo de configuração geral

O mapa de custos é usado para armazenar as informações de obstáculo do ambiente circundante, que precisa declarar a mensagem do sensor do robô à qual o mapa presta atenção para atualizar as informações do mapa. Para a seleção de configuração comum dos dois mapas de custos, crie um arquivo de configuração denominado costmap_common_params.yaml, que é analisado da seguinte maneira:

#这两个参数用来设置代价地图中障碍物的相关阀值
obstacle_range: 2.5#用来设置障碍物的最大范围,若设置为2.5,则表在2.5m范围内检测到的障碍信息才会在地图中更新
raytrace_range: 3.0#用来设置检测自由空间的最大范围,设置为3,.0,表示在3m的范围内机器人将根据传感器的信息清楚范围内的自由空间
 
 
#footprint: [[0.175, 0.175], [0.175, -0.175], [-0.175, -0.175], [-0.175, 0.175]]
#footprint_inflation: 0.01
robot_radius: 0.175
inflation_radius: 0.1#这个是机器人和障碍物保持的最小安全距离为0.1m以上
#这个footprint参数设置机器人在二维地图上的占用的面积,参数以机器人的中心作为坐标原点
#要是机器人外形是圆形,则需要设置机器人的外形半径robot_radius
 
 
max_obstacle_height: 0.6
min_obstacle_height: 0.0
#这两个参数描述障碍物的最大高度和最小高度
 
observation_sources: scan#这里以激光雷达为例
scan: {
    
    data_type: LaserScan, topic: /scan, marking: true, clearing: true, expected_update_rate: 0}
#observation_sources参数列出了代价地图需要关注的所有的传感器信息,每个传感器信息都会在后面列出来
#data_type表示激光数据或者是点云数据使用的消息
#topic:表示传感器发布的话题的名称
#marking和clearing:表示是否需要使用传感器的实时信息来添加或清除代价地图中的障碍物信息

2. Arquivo de configuração de planejamento global

O arquivo de configuração de planejamento global é usado para armazenar os parâmetros de configuração do mapa de custo global, denominado global_costmap_params.yaml, o código é explicado em detalhes:

global_costmap:
   global_frame: map 
#用来表示全局代价地图需要在哪个参考系下运行,这里选择了map参考系
 
   robot_base_frame: base_footprint 
#参数用来表示代价地图可以参考的机器人本体的坐标系
 
   update_frequency: 1.0
#参数用来决定全局地图信息更新的频率,单位是Hz
 
   publish_frequency: 1.0
 
   static_map: true
#参数用来决定代价地图是否需要根据map_server提供的地图信息进行初始化,如果不需要使用已有的地图这最好设置为false
 
   rolling_window: false
   resolution: 0.01#分辨率
   transform_tolerance: 1.0#转换容忍
   map_type: costmap#地图类型

3. Arquivo de configuração de planejamento local

O arquivo de configuração de planejamento local é usado para armazenar os parâmetros de configuração do mapa de custo, denominado local_costmap_params.yaml, o código é explicado em detalhes como segue:

local_costmap:
    #下面的这几个参数和全局规划配置文件中的参数相同
   global_frame: map
   robot_base_frame: base_footprint
   update_frequency: 3.0
   publish_frequency: 1.0#参数用于设置代价地图发布可视化信息的频率,单位是Hz
   static_map: true
 
   rolling_window: false
#参数是用来设置在机器人移动过程中是否可以需要滚动窗口以保持机器人在中心位置
 
   width: 6.0
   height: 6.0
   resolution: 0.01
#这三个参数分别设置代价地图的长(米)高(米)和分辨率(米/格)虽然分辨率设置和静态地图的不同,但是一般条件下是相同的
 
   transform_tolerance: 1.0

Cinco, configuração do planejador local

A principal função do planejador local base_local_planner é calcular as instruções de controle de velocidade emitidas para o robô de acordo com o caminho global planejado.
O plano configura os parâmetros relevantes de acordo com as especificações do robô e cria um arquivo de configuração denominado base_local_planner_params.yaml, o código é o seguinte:

controller_frequency: 3.0#控制频率
recovery_behavior_enabled: false
clearing_rotation_allowed: false
 
TrajectoryPlannerROS:#声明机器人本地规划采用Trajectory Rollout算法
#下面是设置算法需要用到的机器人的速度、加速度阀值等参数
   max_vel_x: 0.5
   min_vel_x: 0.1
   max_vel_y: 0.0  # zero for a differential drive robot(0是为差动机器人设置的)
   min_vel_y: 0.0
   max_vel_theta: 1.0
   min_vel_theta: -1.0
   min_in_place_vel_theta: 0.4
   escape_vel: -0.1
   acc_lim_x: 1.5
   acc_lim_y: 0.0  # zero for a differential drive robot(0是为差动机器人设置的)
   acc_lim_theta: 1.2
 
   holonomic_robot: false
   yaw_goal_tolerance: 0.1 # about 6 degrees(偏航的角度容忍度大约是6°)
   xy_goal_tolerance: 0.05  # 5 cm
   latch_xy_goal_tolerance: false
   pdist_scale: 0.4
   gdist_scale: 0.8
   meter_scoring: true
 
   heading_lookahead: 0.325
   heading_scoring: false
   heading_scoring_timestep: 0.8
   occdist_scale: 0.05
   oscillation_reset_dist: 0.05
   publish_cost_grid_pc: false
   prune_plan: true
 
   sim_time: 1.0
   sim_granularity: 0.05
   angular_sim_granularity: 0.1
   vx_samples: 8
   vy_samples: 0  # zero for a differential drive robot
   vtheta_samples: 20
   dwa: true
   simple_attractor: false

Acho que você gosta

Origin blog.csdn.net/weixin_45661757/article/details/114044963
Recomendado
Clasificación