ros2笔记-7.3机器人导航框架navigation2
机器人导航框架Nav2是一个开源框架,以安全的方式让移动机器人从A点移动到B点,需要完成动态路径规划、避免障碍、恢复行为等基本能力。
7.3.1 nav2介绍与安装
英语文档:
Nav2 — Nav2 1.0.0 documentation
小鱼老师翻译的中文文档:
涉及很多概念,比如行为树(behavior tree),下图是nav2 框架图
从输入输出来看:系统看做黑盒,输入是TF变化、map数据、传感器数据、行为树配置和目标位置、输出:cmd_vel 控制话题。跟之前键盘控制类似。
nav2 :内部构成:BT Navigator Server 导航行为树服务,通过这个大的服务来进行下面三个服务器组织和调用,完成对机器人的行为控制。
Planner Server,规划服务器,其任务是计算完成一些目标函数的路径。根据所选的命名法和算法,该路径也可以称为路线,就是找路的。
Controller Server,控制服务器,书上图7-8也被称为局部规划器,是我们跟随全局计算路径或完成局部任务的方法。就是控制机器人沿着规划路线前进。
Recovery Server,恢复服务器,恢复器是容错系统的支柱。恢复器的目标是处理系统的未知状况或故障状况并自主处理这些状况。
整个逻辑就是BT服务器收到目标点后,PS规划器计算出到目标点的路径(CP),控制器进行路径跟随(fp),遇到卡主情况,调用恢复服务器脱困。其他辅助服务器小鱼老师没有展开介绍。
安装:
sudo apt install ros-$ROS_DISTRO-navigation2
sudo apt install ros-$ROS_DISTRO-nav2-bringup
7.3.2 配置nav2 参数
复制配置文件,在src/fishbot_navigation2/config下执行
cp /opt/ros/humble/share/nav2_bringup/params/nav2_params.yaml .
修改参数:
robot_radis: 0.12
7.3.3 编写launch并启动导航
在目录src/fishbot_navigation2/launch/新建文件navigation2.launch.py
代码如下:
import os
import launch
import launch_ros
from ament_index_python.packages import get_package_share_directory
from launch.launch_description_sources import PythonLaunchDescriptionSource
def generate_launch_description():
# 获取与拼接默认路径
fishbot_navigation2_dir = get_package_share_directory(
'fishbot_navigation2')
nav2_bringup_dir = get_package_share_directory('nav2_bringup')
rviz_config_dir = os.path.join(
nav2_bringup_dir, 'rviz', 'nav2_default_view.rviz')
# 创建 Launch 配置
use_sim_time = launch.substitutions.LaunchConfiguration(
'use_sim_time', default='true')
map_yaml_path = launch.substitutions.LaunchConfiguration(
'map', default=os.path.join(fishbot_navigation2_dir, 'maps', 'room.yaml'))
nav2_param_path = launch.substitutions.LaunchConfiguration(
'params_file', default=os.path.join(fishbot_navigation2_dir, 'config', 'nav2_params.yaml'))
return launch.LaunchDescription([
# 声明新的 Launch 参数
launch.actions.DeclareLaunchArgument('use_sim_time', default_value=use_sim_time,
description='Use simulation (Gazebo) clock if true'),
launch.actions.DeclareLaunchArgument('map', default_value=map_yaml_path,
description='Full path to map file to load'),
launch.actions.DeclareLaunchArgument('params_file', default_value=nav2_param_path,
description='Full path to param file to load'),
launch.actions.IncludeLaunchDescription(
PythonLaunchDescriptionSource(
[nav2_bringup_dir, '/launch', '/bringup_launch.py']),
# 使用 Launch 参数替换原有参数
launch_arguments={
'map': map_yaml_path,
'use_sim_time': use_sim_time,
'params_file': nav2_param_path}.items(),
),
launch_ros.actions.Node(
package='rviz2',
executable='rviz2',
name='rviz2',
arguments=['-d', rviz_config_dir],
parameters=[{'use_sim_time': use_sim_time}],
output='screen'),
])
修改CMakelists.txt 增加复制launch、config、maps
install(DIRECTORY launch config maps
DESTINATION share/${PROJECT_NAME}
)
构建并运行,启动仿真
ros2 launch fishbot_description gazebo_sim.launch.py
启动导航
ros2 launch fishbot_navigation2 navigation2.launch.py
在rviz中先设置机器人大概位置;
设置完成后就好初始化完成地图。
原有地图障碍物会进行膨胀,深色是局部代价地图。
7.3.4 进行单点与路点导航
单点导航
路点导航
7.3.5动态避障
7.3.6 优化角速度、膨胀半径
最大旋转角速度
max_vel_theta: 0.8
角加速度:
acc_lim_theta: 2.0
膨胀半径:
inflation_radius: 0.3
原文地址:https://blog.csdn.net/bohu83/article/details/145152894
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!