您好,
会员登录 快速注册
退出 ( 条未读消息)
关于本站 意见反馈 首页

公告:小宅博客网可以开发票了,需要发票的,去群里找群主哈!!
全部文章分类
  • 人工智能 >

  • 编程语言 >

  • WPF系列 >

  • ASP.NET系列 >

  • Linux >

  • 数据库 >

  • 嵌入式 >

  • WEB技术 >

  • PLC系列 >

  • 微服务与框架 >

  • 小宅DIY >

  • 学习资料 >

OpenCv基础 ANN车牌识别 yolov5车牌识别 指针式仪表识别 ROS系列 YOLO Halcon Detectron2 昇腾AI ChatGPT在线体验 英伟达JETSON ChatGLM ChatTTS FunASR 地平线 ByteTrack 魔搭社区 LangChain
C C# C++ Python Java Go
WPF
ASP.NET小功能 GPS定位系统-MVC GPS定位系统-VUE ASP.NET WebRTC
Linux Linux内核 Shell MakeFile
MySql SqlServer Oracle
STM8 STM32 51单片机
VUE入门 HTML JavaScript CSS layui镜像网站 ElementUi中文官网 element-plus 图标
三菱 欧姆龙 西门子 施耐德 松下 台达
IOTSharp IOTGateway ABP FRAMEWORK Docker
亚克力音响 编程仙途:智驭万法
面试题与技巧 Python入门技能树 微软C#教程
首页 编程之美 工具下载 全国就业 流量地图 文心一言
ROS系列
ROS - 介绍 ROS1-常规安装方法 ROS1-Linux下的ROS环境搭建 ROS1-ROS话题:发布者 ROS1-发布者与订阅者通讯 ROS1-服务器与客户端节点通讯 ROS1-动作服务器与客户端通讯 ROS1-发布imu和gps消息 ROS2-新建Ubuntu环境 ROS2-创建一个简单节点 ROS2-Python之消息的发布与订阅 ROS2-C++之消息的发布与订阅 ROS2-调用USB免驱摄像头 ROS2-地瓜机器人笔记 ROS2 控制小车进行矩形运动 ROS2 设置节点开机自启 ROS2 添加自定义msg ROS2 URDF建模 ROS2 Gazebo 仿真环境搭建 ROS2 XACRO建模 ROS2 在Gazebo加载机器人模型 ROS2 Carttographer安装 ROS2 配置cartographer进行建图 ROS2 Nav2导航仿真-新建工程 ROS2 Nav2导航仿真 ROS2 Nav2 API导航
ROS2 配置cartographer进行建图
ROS2 Nav2导航仿真
激萌の小宅 小宅博客 ROS系列

文章作者:激萌の小宅

促销:¥0

价格:¥0

配送方式: 购买后立即生效(如购买异常,请联系站长)
付款之后一定要等待自动跳转结束,否则购买可能会失败
  • 0 天

    有效期

  • 0

    总销量

  • 0

    累计评价

ROS2 Nav2导航仿真-新建工程

注意:github上面的工程和文章内容相差有点大:fishbot_navigation2


博主这边因为使用的是apt在线安装,可能是因为版本比较新,和参考文章中的内容有一些差异


参考文章:创建fishbot_navigation2


安装nav2

sudo apt install ros-humble-nav2-*


测试是否安装成功

ros2 pkg list | grep navigation2


能看到下面的结果即可

navigation2


源码功能包拆解

包含代码的功能包及其功能见下面列表

#==============控制器及其实现相关功能包======================#

nav2_controller | 控制器

nav2_dwb_controller | DWB控制器,Nav2控制器的一个实现

nav2_regulated_pure_pursuit_controller | 纯追踪控制器,Nav2控制器的一个实现

nav2_constrained_smoother


#==============规划器及其实现相关功能包======================#

nav2_planner | Nav2规划器

nav2_navfn_planner | navfn规划器,Nav2规划器的一个实现

nav2_smac_planner | smac规划器,Nav2规划器的一个实现


#=====================恢复器==============================#

nav2_recoveries | Nav2恢复器


#=====================行为树节点及其定义====================#

nav2_bt_navigator | 导航行为树

nav2_behavior_tree | 行为树节点插件定义


#=====================地图和定位===========================#

nav2_map_server | 地图服务器

nav2_costmap_2d | 2D代价地图

nav2_voxel_grid | 体素栅格

nav2_amcl | 自适应蒙特卡洛定位。  状态估计,输入地图、激光、里程计数据,输出机器人map和odom之间的位资关系。


#=====================通用插件系统管理等====================#

nav2_bringup | 启动入口

nav2_common | 公共功能包

nav2_msgs | 通信相关消息定义

nav2_util | 常用工具

nav2_lifecycle_manager |节点生命周期管理器 

nav2_rviz_plugins | RVIZ插件


#=====================核心定义============================#

nav2_core | Nav2核心包

navigation2 | nav2导航汇总配置


#=====================应用================================#

nav2_waypoint_follower | 路点跟踪


#=====================测试=================================#

nav2_system_tests | 系统测试


创建fishbot_navigation2

创建功能包

和前面在Cartographer中一样,我们需要创建一个文件夹放置配置文件、launch文件、rviz配置和地图等。

进入到src目录下,使用下面指令创建功能包:

ros2 pkg create fishbot_navigation2 --dependencies nav2_bringup



这里我们添加了一个依赖nav2_bringup,后面写launch文件要用到,这里提前添加一下依赖。

创建完成后的目录结构:

微信截图_20250530140914.jpg

添加maps文件夹

cd src/fishbot_navigation2
mkdir launch config map param rviz

复制地图文件

将上一节的地图文件复制到map文件夹下。

复制完成后fishbot_navigation2的文件结构如下

微信截图_20250530140826.jpg


添加Nav2配置文件

创建参数文件

我们需要配置的文件是Nav2的参数文件,同样的,贴心的Nav2已经为我们准备好了参数模板

/opt/ros/humble/share/nav2_bringup/params/nav2_params.yaml


在src/fishbot_navigation2/param/目录下创建fishbot_nav2.yaml

cd src/fishbot_navigation2/param/
touch fishbot_nav2.yaml

复制参数

然后将/opt/ros/humble/share/nav2_bringup/params/nav2_params.yaml的内容复制粘贴到fishbot_nav2.yaml文件中。


配置参数

其实参数不配置也是可以将Nav2跑起来的,但是后期想要更改运行的效果就需要对参数进行修改,所以有必要大概了解下参数的配置项和含义查询方法和修改方法。

参数列表

配置项

用途

对应模块和参数详解

amcl

机器人定位

nav2_amcl

bt_navigator

导航行为树
(用于加载行为树节点并根据xml配置进行调度)

nav2_bt_navigator

nav2_behavior_tree

controller_server

控制器服务器

nav2_controller
nav2_dwb_controller
nav2_regulated_pure_pursuit_controller

planner_server

规划服务器

nav2_planner
nav2_navfn_planner

smac_planner

recoveries_server

恢复服务器

nav2_recoveries

local_costmap

局部代价地图

nav2_costmap_2d

static_layer

inflation_layer

global_costmap

全局代价地图

nav2_costmap_2d

nav2_map_server


有关更多的Nav2所有参数的详细介绍,可以访问Nav2中文网中的配置指南章节,非常的详细,无比的具体。


配置机器人半径和碰撞半径

在全局代价地图和局部代价地图配置用,默认的机器人半径是0.22,而我们fishbot的半径是0.12,所以需要修改机器人的半径为0.12。

local_costmap:
  local_costmap:
    ros__parameters:
      robot_radius: 0.12
      
global_costmap:
  global_costmap:
    ros__parameters:
      robot_radius: 0.12


为了防止机器人发生碰撞,一般我们会给代价地图添加一个碰撞层(inflation_layer),在local_costmap和global_costmap配置中,你可以看到下面关于代价地图相关的配置:

global_costmap:
  global_costmap:
    ros__parameters:
      plugins: ["static_layer", "obstacle_layer", "inflation_layer"]
      inflation_layer:
        plugin: "nav2_costmap_2d::InflationLayer"
        cost_scaling_factor: 3.0
        inflation_radius: 0.55


打开参数配置中的inflation_layer,我们来看看其配置项和含义。

可以看到inflation_radius默认0.55对fishbot来说可能有些大了,我们改小些。

global_costmap:
  global_costmap:
    ros__parameters:
      plugins: ["static_layer", "obstacle_layer", "inflation_layer"]
      inflation_layer:
        plugin: "nav2_costmap_2d::InflationLayer"
        cost_scaling_factor: 3.0
        inflation_radius: 0.35


以上就是以代价地图碰撞半径为例的配置方法,nav2可以配置的参数非常多,假如你在导航过程中遇到问题,根据问题的表现推断下是哪个模块中造成的,接着修改其对应参数,大概率就可以解决问题,解决不了的可以看源码详细分析。

配置frame_id和话题

这里也不用配置,因为我们的fishbot话题名称和tf名称都是遵循着默认的话题的。

如果你的机器人不是,或者你改变了话题,这里就需要重新配置。

1、默认全局的坐标系:map

2、默认里程计坐标系:odom

3、默认雷达话题:scan

4、默认机器人基坐标系:base_link

5、默认地图话题:map


ROS2 配置cartographer进行建图
ROS2 Nav2导航仿真

友情链接: CSDN激萌の小宅 95知识库 自考题库 罗分明个人网络博客 精益编程leanboot

小宅博客  www.bilibili996.com All Rights Reserved. 备案号: 闽ICP备2024034575号

网站经营许可证  福建省福州市 Copyright©2021-2025 版权所有

小宅博客
首页 智能家居 地图定位
公告:小宅博客网可以开发票了,需要发票的,去群里找群主哈!!

文章作者:激萌の小宅

促销:¥0

价格:¥0

配送方式: 购买后立即生效(如购买异常,请联系站长)
付款之后一定要等待自动跳转结束,否则购买可能会失败
  • 0 天

    有效期

  • 0

    总销量

  • 0

    累计评价

ROS2 Nav2导航仿真-新建工程

注意:github上面的工程和文章内容相差有点大:fishbot_navigation2


博主这边因为使用的是apt在线安装,可能是因为版本比较新,和参考文章中的内容有一些差异


参考文章:创建fishbot_navigation2


安装nav2

sudo apt install ros-humble-nav2-*


测试是否安装成功

ros2 pkg list | grep navigation2


能看到下面的结果即可

navigation2


源码功能包拆解

包含代码的功能包及其功能见下面列表

#==============控制器及其实现相关功能包======================#

nav2_controller | 控制器

nav2_dwb_controller | DWB控制器,Nav2控制器的一个实现

nav2_regulated_pure_pursuit_controller | 纯追踪控制器,Nav2控制器的一个实现

nav2_constrained_smoother


#==============规划器及其实现相关功能包======================#

nav2_planner | Nav2规划器

nav2_navfn_planner | navfn规划器,Nav2规划器的一个实现

nav2_smac_planner | smac规划器,Nav2规划器的一个实现


#=====================恢复器==============================#

nav2_recoveries | Nav2恢复器


#=====================行为树节点及其定义====================#

nav2_bt_navigator | 导航行为树

nav2_behavior_tree | 行为树节点插件定义


#=====================地图和定位===========================#

nav2_map_server | 地图服务器

nav2_costmap_2d | 2D代价地图

nav2_voxel_grid | 体素栅格

nav2_amcl | 自适应蒙特卡洛定位。  状态估计,输入地图、激光、里程计数据,输出机器人map和odom之间的位资关系。


#=====================通用插件系统管理等====================#

nav2_bringup | 启动入口

nav2_common | 公共功能包

nav2_msgs | 通信相关消息定义

nav2_util | 常用工具

nav2_lifecycle_manager |节点生命周期管理器 

nav2_rviz_plugins | RVIZ插件


#=====================核心定义============================#

nav2_core | Nav2核心包

navigation2 | nav2导航汇总配置


#=====================应用================================#

nav2_waypoint_follower | 路点跟踪


#=====================测试=================================#

nav2_system_tests | 系统测试


创建fishbot_navigation2

创建功能包

和前面在Cartographer中一样,我们需要创建一个文件夹放置配置文件、launch文件、rviz配置和地图等。

进入到src目录下,使用下面指令创建功能包:

ros2 pkg create fishbot_navigation2 --dependencies nav2_bringup



这里我们添加了一个依赖nav2_bringup,后面写launch文件要用到,这里提前添加一下依赖。

创建完成后的目录结构:

微信截图_20250530140914.jpg

添加maps文件夹

cd src/fishbot_navigation2
mkdir launch config map param rviz

复制地图文件

将上一节的地图文件复制到map文件夹下。

复制完成后fishbot_navigation2的文件结构如下

微信截图_20250530140826.jpg


添加Nav2配置文件

创建参数文件

我们需要配置的文件是Nav2的参数文件,同样的,贴心的Nav2已经为我们准备好了参数模板

/opt/ros/humble/share/nav2_bringup/params/nav2_params.yaml


在src/fishbot_navigation2/param/目录下创建fishbot_nav2.yaml

cd src/fishbot_navigation2/param/
touch fishbot_nav2.yaml

复制参数

然后将/opt/ros/humble/share/nav2_bringup/params/nav2_params.yaml的内容复制粘贴到fishbot_nav2.yaml文件中。


配置参数

其实参数不配置也是可以将Nav2跑起来的,但是后期想要更改运行的效果就需要对参数进行修改,所以有必要大概了解下参数的配置项和含义查询方法和修改方法。

参数列表

配置项

用途

对应模块和参数详解

amcl

机器人定位

nav2_amcl

bt_navigator

导航行为树
(用于加载行为树节点并根据xml配置进行调度)

nav2_bt_navigator

nav2_behavior_tree

controller_server

控制器服务器

nav2_controller
nav2_dwb_controller
nav2_regulated_pure_pursuit_controller

planner_server

规划服务器

nav2_planner
nav2_navfn_planner

smac_planner

recoveries_server

恢复服务器

nav2_recoveries

local_costmap

局部代价地图

nav2_costmap_2d

static_layer

inflation_layer

global_costmap

全局代价地图

nav2_costmap_2d

nav2_map_server


有关更多的Nav2所有参数的详细介绍,可以访问Nav2中文网中的配置指南章节,非常的详细,无比的具体。


配置机器人半径和碰撞半径

在全局代价地图和局部代价地图配置用,默认的机器人半径是0.22,而我们fishbot的半径是0.12,所以需要修改机器人的半径为0.12。

local_costmap:
  local_costmap:
    ros__parameters:
      robot_radius: 0.12
      
global_costmap:
  global_costmap:
    ros__parameters:
      robot_radius: 0.12


为了防止机器人发生碰撞,一般我们会给代价地图添加一个碰撞层(inflation_layer),在local_costmap和global_costmap配置中,你可以看到下面关于代价地图相关的配置:

global_costmap:
  global_costmap:
    ros__parameters:
      plugins: ["static_layer", "obstacle_layer", "inflation_layer"]
      inflation_layer:
        plugin: "nav2_costmap_2d::InflationLayer"
        cost_scaling_factor: 3.0
        inflation_radius: 0.55


打开参数配置中的inflation_layer,我们来看看其配置项和含义。

可以看到inflation_radius默认0.55对fishbot来说可能有些大了,我们改小些。

global_costmap:
  global_costmap:
    ros__parameters:
      plugins: ["static_layer", "obstacle_layer", "inflation_layer"]
      inflation_layer:
        plugin: "nav2_costmap_2d::InflationLayer"
        cost_scaling_factor: 3.0
        inflation_radius: 0.35


以上就是以代价地图碰撞半径为例的配置方法,nav2可以配置的参数非常多,假如你在导航过程中遇到问题,根据问题的表现推断下是哪个模块中造成的,接着修改其对应参数,大概率就可以解决问题,解决不了的可以看源码详细分析。

配置frame_id和话题

这里也不用配置,因为我们的fishbot话题名称和tf名称都是遵循着默认的话题的。

如果你的机器人不是,或者你改变了话题,这里就需要重新配置。

1、默认全局的坐标系:map

2、默认里程计坐标系:odom

3、默认雷达话题:scan

4、默认机器人基坐标系:base_link

5、默认地图话题:map