Nav2笔记

1、源码安装

git clone https://github.com/ros-planning/navigation2.git -b humble

1.1 一键安装依赖

wget http://fishros.com/install -O fishros && . fishros
rosdepc install -r --from-paths src --ignore-src --rosdistro $ROS_DISTRO -y

1.2 编译

colcon build --packages-up-to navigation2

 测试,安装是否成功

ros2 pkg list | grep navigation2

 成功显示

navigation2

------------------------------------------------------------------------------------------------------------------------------

1.3 二进制安装 

 sudo apt install ros-humble-nav2-* -y

2、源码目录功能

#==============控制器及其实现相关功能包======================#
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 | 系统测试

3、参数配置

复制下面的路径:

navigation2/nav2_bringup/bringup/params/nav2_params.yaml

每组参数解析:

编号配置项用途对应模块与参数详解
1amcl机器人定位nav2_amcl
2bt_navigator导航行为树(用于加载行为树节点并根据xml配置进行调度)nav2_bt_navigator,nav2_behavior_tree
3controller_server控制器服务器nav2_controller,nav2_dwb_controller,nav2_regulated_pure_pursuit_controller
4planner_server规划服务器nav2_planner,nav2_navfn_planner,smac_planner
5recoveries_server恢复服务器nav2_recoveries
6local_costmap局部代价地图nav2_costmap_2d,static_layer,inflation_layer
7global_costmap全局代价地图nav2_costmap_2d,nav2_map_server

根据自己机器人情况配置:

旋转半径(robot_radius)
local_costmap:local_costmap:ros__parameters:robot_radius: 0.12global_costmap:global_costmap:ros__parameters:robot_radius: 0.12
碰撞半径(inflation_radius) 
global_costmap:global_costmap:ros__parameters:plugins: ["static_layer", "obstacle_layer", "inflation_layer"]inflation_layer:plugin: "nav2_costmap_2d::InflationLayer"cost_scaling_factor: 3.0inflation_radius: 0.35
 frame_id配置:
  • 默认全局的坐标系:map
  • 默认里程计坐标系:odom
  • 默认雷达话题:scan
  • 默认机器人基坐标系:base_link
  • 默认地图话题:map

4、编写launch文件

在一个launch文件中包裹另一个功能包中的luanch文件采用的是IncludeLaunchDescriptionPythonLaunchDescriptionSource

'''
作者: 小鱼
公众号: 鱼香ROS
QQ交流群: 2642868461
描述: Nav2 launch启动文件
'''
import os
from ament_index_python.packages import get_package_share_directory
from launch import LaunchDescription
from launch.actions import IncludeLaunchDescription
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch.substitutions import LaunchConfiguration
from launch_ros.actions import Nodedef generate_launch_description():#=============================1.定位到包的地址=============================================================fishbot_navigation2_dir = get_package_share_directory('fishbot_navigation2')nav2_bringup_dir = get_package_share_directory('nav2_bringup')#=============================2.声明参数,获取配置文件路径===================================================# use_sim_time 这里要设置成true,因为gazebo是仿真环境,其时间是通过/clock话题获取,而不是系统时间use_sim_time = LaunchConfiguration('use_sim_time', default='true') map_yaml_path = LaunchConfiguration('map',default=os.path.join(fishbot_navigation2_dir,'maps','fishbot_map.yaml'))nav2_param_path = LaunchConfiguration('params_file',default=os.path.join(fishbot_navigation2_dir,'param','fishbot_nav2.yaml'))rviz_config_dir = os.path.join(nav2_bringup_dir,'rviz','nav2_default_view.rviz')#=============================3.声明启动launch文件,传入:地图路径、是否使用仿真时间以及nav2参数文件==============nav2_bringup_launch = IncludeLaunchDescription(PythonLaunchDescriptionSource([nav2_bringup_dir,'/launch','/bringup_launch.py']),launch_arguments={'map': map_yaml_path,'use_sim_time': use_sim_time,'params_file': nav2_param_path}.items(),)rviz_node =  Node(package='rviz2',executable='rviz2',name='rviz2',arguments=['-d', rviz_config_dir],parameters=[{'use_sim_time': use_sim_time}],output='screen')return LaunchDescription([nav2_bringup_launch,rviz_node])

5、修改CmakeList.txt,添加路径:

install(DIRECTORY launch param mapsDESTINATION share/${PROJECT_NAME}
)

7、构建

colcon build --packages-up-to  fishbot_navigation2

8、输出机器人在地图中的位置

ros2 run tf2_ros  tf2_echo map base_link

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

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

相关文章

动态规划学习——背包问题

问题: 有一个背包,有最大的可以承受的重量Weight 有一些物品,每个物品都有相应的重量和价值 给两个数组w[]和v[],其中w[i]表示第i个物品的重量,v[i]表示第i个物品的价值 求如何拿才能在不超过背包承重的情况下拿到的最…

Hive之set参数大全-16

配置 HiveServer2 中 Tez Workload Manager (WM) Application Master (AM) 注册的超时时间 在 Hive 中,hive.server2.tez.wm.am.registry.timeout 是一个参数,用于配置 HiveServer2 中 Tez Workload Manager (WM) Application Master (AM) 注册的超时时…

高斯分布的应用,正态分布的实践应用,什么是极大似然估计法

目录 高斯分布的应用 正态分布的实践应用 什么是极大似然估计法 高斯分布的应用

【leetcode刷刷】235. 二叉搜索树的最近公共祖先 、701.二叉搜索树中的插入操作 、450.删除二叉搜索树中的节点

235. 二叉搜索树的最近公共祖先 class Solution:def lowestCommonAncestor(self, root: TreeNode, p: TreeNode, q: TreeNode) -> TreeNode:# 递归if not root: return if root.val p.val: return pif root.val q.val: return qleft Noneright Noneif root.val > p.…

LeetCode2859. Sum of Values at Indices With K Set Bits

文章目录 一、题目二、题解 一、题目 You are given a 0-indexed integer array nums and an integer k. Return an integer that denotes the sum of elements in nums whose corresponding indices have exactly k set bits in their binary representation. The set bits…

前后端交互—使用自己的服务器开发项目

代码下载 完善服务器 对于上一篇博客开发的服务端项目,还需要增加文章列表查询,文章删除,文章更新三个接口。 文章列表查询接口 验证表单数据 在路径 schema/user.js 中增加 articles 验证表单数据,其中使用的 .allow() 表示…

【misc | CTF】攻防世界 适合作为桌面

天命:这题还挺繁琐的,知识点还不少 目录 步骤1:图片隐写 步骤2:Winhex查看ascii码 步骤1:图片隐写 拿到这张图片,不可能扔进ps会有多图层,普通图片也就一个图层而已 但居然可以有隐写图片这…

【C语言】深入理解指针(3)数组名与函数传参

正文开始——数组与指针是紧密联系的 (一)数组名的理解 (1)数组名是数组首元素的地址 int arr[10] {1,2,3,4,5,6,7,8,9,10}; int *parr &arr[0]; 上述代码通过&arr[0] 的方式得到了数组第一个元素的地址,…

绿色制造的行业标杆OEKO-TEX STeP认证

STeP是“OEKO-TEX国际环保纺织协会”推出的一个独立的第三方认证体系。STeP全称Sustainable Textile & Leather Production(可持续纺织和皮革生产),是面向纺织和皮革供应链中环保且负有社会责任的生产工厂推出的透明认证体系。 STeP认证的…

【Mybatis plus】使用分页查询,报错 Parameter ‘xxx‘ not found. Available parameters are xxx

文章目录 0 先给出错误场景java entity 实体类java mapper 接口方法Java mapper 所对应的 mapper.xml 信息异常信息 1 解决办法step1: 给 mapper 接口方法加上具名参数指定,如下:step2: 修改 mapper.xml 的查询信息,都加上 具名 限定 2 异常原…

快快销ShopMatrix 分销商城多端uniapp可编译5端-代理商收益管理:差价奖励和销售额统计

代理商收益管理是一种针对代理商的利润分配模式,主要通过差价奖励和销售额统计来实现。这种模式的核心思想是通过激励代理商的销售行为,提高代理商的积极性和销售效率,从而实现整个销售网络的增长。 差价奖励是代理商收益管理中的一种常见方…

电商系统设计到开发03 引入Kafka异步削峰

一、前言 系统设计:电商系统设计到开发01 第一版设计到编码-CSDN博客 接着上篇文章:电商系统设计到开发02 单机性能压测-CSDN博客 本篇为大制作,内容有点多,也比较干货,希望可以耐心看看 已经开发的代码&#xff0…

配置ARP安全综合功能示例

组网图形 ARP安全简介 ARP(Address Resolution Protocol)安全是针对ARP攻击的一种安全特性,它通过一系列对ARP表项学习和ARP报文处理的限制、检查等措施来保证网络设备的安全性。ARP安全特性不仅能够防范针对ARP协议的攻击,还可以…

uniapp点击事件报错 Cannot read property ‘stopPropagation‘ of undefined

问题产生:在列表上有个小按钮,可点击弹出选择框。 列表本身可点击进入详情页。所以想用click.stop来阻止点击小按钮时候,触发列表的点击事件。 结果:如图所示 解决方案:发现自己用的是icon,在icon上加click…

2. HarmonyOS 应用开发 DevEco Studio 准备-2

2. HarmonyOS 应用开发 DevEco Studio 准备-2 首选项设置 中文设置 主题 字体 插件安装和使用 保存时操作 编辑器 工程树管理 代码树管理 标记 字符串可视化编辑 参考文档 常用快捷键 编辑 查找或替换 编译与运行 调试 其他 预览 页面预览 自定义组件预览 预览…

[学习笔记] ONNX 基础知识

1. ONNX 简介 1.1 什么是 ONNX 开放神经网络交换 ONNX(Open Neural Network Exchange)是一套表示深度神经网络模型的开放格式,由微软和 Facebook 于 2017 推出,然后迅速得到了各大厂商和框架的支持。通过短短几年的发展&#xf…

文档 OCR 识别优化为异步思路逻辑

文档 OCR 识别优化 同步处理(原逻辑) 当前系统识别文档为同步处理,已调整过 python 服务部分参数,但 一份40M左右文档识别仍需要几十秒 文档转为图片集合for 循环中一直调用 ocr 识别 异步处理 nginx 增加 requestId header …

系统架构17 - 软件工程(5)

软件工程 系统测试测试原则测试方法静态测试动态测试黑盒测试白盒测试灰盒测试自动化测试 系统测试 软件测试是使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。 软件测试方法的分类有…

C++大学教程(第九版)7.19 将7.10节vector对象的例子转换成array对象

文章目录 题目代码运行截图 题目 (将7.10节vector 对象的例子转换成array 对象)将图7.26中 vector 对象的例子转换成使用array 对象。请消除任何 vector 对象仅有的特性。 分析: vector对象独有的特性: 1.vector对象长度可变 2.长度不同的vector对象可…

查看php-fpm占用内存情况

1、查看每个php-fpm占用的内存大小 ps -ylC php-fpm --sort:rss 2 查看单个php-fpm进程消耗内存的明细 pmap $(pgrep php-fpm) | less pmap pmap命令用于显示一个或多个进程的内存状态 pmap [ -x | -d ] [ -q ] pids 参数: -x extended Show the extended f…