
ROS2+nav2实现导航(上)
目录编辑一.Nav2导航框架介绍与安装1.1安装二进制nav21.2源码安装,在fishibot_ws/src目录下进行安装1.3安装依赖1.4编译1.5测试是否安装成功二.配置nav22.1我们需要创建一个文件夹放置配置文件、launch文件、rviz配置和地图等。进入到src目录下,使用下面指令创建功能包:2.2添加maps等文件夹2.3创建参数文件三.注释:1.source工作空间方法2.
目录
1.2源码安装,在fishibot_ws/src目录下进行安装
2.1我们需要创建一个文件夹放置配置文件、launch文件、rviz配置和地图等。进入到src目录下,使用下面指令创建功能包:
(附:工作空间的创建和source)
Nav2是什么
Nav2项目继承并发扬ROS导航栈的精神。该项目力求以安全的方式让移动机器人从A点移动到B点。Nav2也可以应用于其他应用,包括机器人导航,如下动态点跟踪,在这个过程中需要完成动态路径规划、计算电机的速度、避免障碍、恢复行为。
Nav2如何做到的
Nav2使用行为树调用模块化服务器来完成一个动作。动作可以是计算路径、控制力、恢复或任何其他与导航相关的操作。这些都是通过ROS Action服务器与行为树 (BT) 通信的独立节点。下图可以让你对Nav2的架构有一个很好的初步了解。
更多的有关nav2的具体介绍请看《动手学ROS2》10.7 Nav2导航框架介绍与安装-CSDN博客
一.Nav2导航框架介绍与安装
1.1安装二进制nav2
sudo apt install ros-foxy-nav2-*
1.2源码安装,在fishibot_ws/src目录下进行安装
git clone https://github.com/ros-planning/navigation2.git
1.3安装依赖
若没有安装rosdepc可以先运行下面的一键安装命令,选择一键配置rosdep即可。
wget http://fishros.com/install -O fishros && . fishros
在fishibot_ws目录下安装依赖
rosdepc install -r --from-paths src --ignore-src --rosdistro $ROS_DISTRO -y
1.4编译
colcon build --packages-up-to navigation2
–packages-up-to,意思是其所有依赖后再编译该包
1.5测试是否安装成功
ros2 pkg list | grep navigation2
若出现,则成功
navigation2
二.配置nav2
2.1我们需要创建一个文件夹放置配置文件、launch文件、rviz配置和地图等。进入到src目录下,使用下面指令创建功能包:
ros2 pkg create fishbot_navigation2 --dependencies nav2_bringup
这里我们添加了一个依赖
nav2_bringup
,后面写launch文件要用到,这里提前添加一下依赖
2.2添加maps等文件夹
cd src/fishbot_navigation2
mkdir launch config maps param rviz
.fishibot_navigation2的文件结构:
├── CMakeLists.txt
├── config
├── launch
├── maps
│ ├── fishbot_map.png
│ ├── fishbot_map.pgm
│ ├── fishbot_map.yaml
├── package.xml
├── param
└── rviz5 directories, 5 files
2.3创建参数文件
参数模版:
src/navigation2/nav2_bringup/bringup/params/nav2_params.yaml
在src/fishbot_navigation2/param/
目录下创建fishbot_nav2.yaml:
cd src/fishbot_navigation2/param/
touch fishbot_nav2.yaml
然后将src/navigation2/nav2_bringup/bringup/params/nav2_params.yaml
的内容复制粘贴到fishbot_nav2.yaml
文件中。
三.编写launch文件以及cmakelist,xml
3.1编写launch
'''
作者: 小鱼
公众号: 鱼香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 Node
def 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])
3.2编写cmakelist
添加install指令
cmake_minimum_required(VERSION 3.5)
project(fishbot_navigation2)
# find dependencies
find_package(ament_cmake REQUIRED)
install(
DIRECTORY launch param maps
DESTINATION share/${PROJECT_NAME}
)
ament_package()
3.3添加xml
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>fishbot_navigation2</name>
<version>0.0.0</version>
<description>TODO: Package description</description>
<maintainer email="sangxin2014@sina.com">root</maintainer>
<license>TODO: License declaration</license>
<buildtool_depend>ament_cmake</buildtool_depend>
<test_depend>ament_lint_auto</test_depend>
<test_depend>ament_lint_common</test_depend>
<exec_depend>nav2_bringup</exec_depend>
<export>
<build_type>ament_cmake</build_type>
</export>
</package>
四.编译运行
4.1构建
colcon build --packages-up-to fishbot_navigation2
4.2运行仿真
source install/setup.bash
ros2 launch fishbot_description gazebo.launch.py
4.3运行nav2
source install/setup.bash
ros2 launch fishbot_navigation2 navigation2.launch.py
五.注释:
1.source工作空间方法
先打开主目录的隐藏目录.bashrc,在最后加上
source ~/fishbot_ws/install/setup.bash
fishbot_ws为工作空间名
2.创建工作区间
2.1创建文件夹
mkdir -p ~/catkin_ws/src
2.2进入src
cd ~/catkin_ws/src
2.3转为ros工作空间
catkin_init_workspace
2.4回到根目录
cd ..
2.5对工作空间进行编译
catkin_make
更多推荐
所有评论(0)