ROS2+nav2实现导航(上)

目录

​编辑

一.Nav2导航框架介绍与安装

1.1安装二进制nav2

1.2源码安装,在fishibot_ws/src目录下进行安装

1.3安装依赖

1.4编译

1.5测试是否安装成功

二.配置nav2

2.1我们需要创建一个文件夹放置配置文件、launch文件、rviz配置和地图等。进入到src目录下,使用下面指令创建功能包:

2.2添加maps等文件夹

2.3创建参数文件

三.注释:

1.source工作空间方法

2.创建工作区间


(附:工作空间的创建和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
└── rviz

5 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

  • 21
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值