ROS2与Navigation2入门教程:构建与安装Nav2

Navigation2(Nav2)是ROS2中用于机器人导航的核心框架,支持路径规划、避障、SLAM等功能。本教程将详细介绍Nav2的安装与构建方法,涵盖二进制安装、源码编译及Docker部署等多种方式,适用于不同开发需求。

一、通过APT安装Nav2(推荐新手)

适用于直接使用官方预编译的二进制包,快速部署Nav2环境。 

步骤1:安装Nav2及相关依赖 

根据ROS2发行版(如Foxy、Humble)替换命令中的<distro>

sudo apt install ros-<distro>-navigation2 ros-<distro>-nav2-bringup ros-<distro>-turtlebot3*

步骤2:验证安装

安装完成后,运行TurtleBot3仿真示例:

ros2 launch nav2_bringup tb3_simulation_launch.py

二、从源码构建Nav2(开发者适用)

适用于需自定义功能或使用最新主分支代码的场景。 

方式1:为特定ROS2发行版构建

以ROS2 humble为例: 

创建工作空间并克隆代码

mkdir -p ~/nav2_ws/src
cd ~/nav2_ws/src
git clone https://github.com/ros-planning/navigation2.git --branch humble

 安装依赖并编译

cd ~/nav2_ws
rosdep install -y -r -q --from-paths src --ignore-src --rosdistro humble
colcon build --symlink-install

激活环境

source install/setup.bash

方式2:主分支快速构建(使用脚本)

获取最新未发布代码: 

下载初始化脚本

mkdir nav2_workspaces && cd nav2_workspaces
wget https://raw.githubusercontent.com/ros-planning/navigation2/main/tools/initial_ros_setup.sh
chmod +x initial_ros_setup.sh
./initial_ros_setup.sh

脚本自动完成以下操作: 

下载ROS2主分支、依赖包及Nav2源码。

执行build_all.sh自动编译所有组件。

小结:

  • 脚本initial_ros_setup.sh会下载三个ROS 工作空间,然后按照正确的顺序构建它们。

  • 这三个工作空间分别是:

    • ROS 2发行版:为最新的ROS 2发行版,由此处的存储库文件定义;
    • ROS 2依赖包:为一组未包含在ROS 2发行版中的ROS 2软件包。但是需要这些软件包才能构建Nav2。还包括组成ROS 2发行版的一些软件包,因为Nav2要使用这些软件包的不同版本;
    • Nav2:即本存储库。
  • 下载所有工作空间后,运行navigation2/tools/build_all.sh脚本。

  • 脚本build_all.sh使用colcon build --symlink-install命令按照上面列出的顺序构建每个存储库。

  • 脚本initial_ros_setup.sh可以接受以下选项:

    • --no-ros2:这会跳过下载和构建ROS 2发行版。相反,它会使用安装在/opt/ros/<ros2-distro>目录中的二进制软件包和setup.sh脚本;

    • --download-only:这会跳过构建步骤。

 

三、使用Docker部署Nav2

适用于隔离环境开发或CI/CD流程。

3.1 构建自定义Docker镜像

克隆仓库并构建镜像

git clone https://github.com/ros-planning/navigation2.git
cd navigation2
sudo docker build -t nav2/latest .

 使用代理(如需)

sudo docker build -t nav2/latest --build-arg http_proxy=http://proxy.my.com:8080 --build-arg https_proxy=http://proxy.my.com:8080 .

加速构建(利用DockerHub缓存) 

sudo docker pull rosplanning/navigation2:main  # 拉取官方缓存
sudo docker build -t nav2/latest --cache-from rosplanning/navigation2:main .

3.2 拉取官方镜像

sudo docker pull rosplanning/navigation2:main

注意:镜像不包含预构建的覆盖层,需在容器内手动构建Nav2工作空间。

3.3 运行Nav2容器 

基本启动

sudo docker pull rosplanning/navigation2:main

 启用图形界面(如Rviz):Linux系统需允许容器访问X11服务:

xhost +local:root  # 临时开放X11权限
sudo docker run -it --rm \
  --env="DISPLAY" \
  --env="QT_X11_NO_MITSHM=1" \
  --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
  --name nav2_container \
  rosplanning/navigation2:main

挂载宿主机目录(共享数据):将本地ROS工作空间挂载到容器中:

sudo docker run -it --rm \
  --volume="/path/on/host:/path/in/container" \
  rosplanning/navigation2:main

使用主机网络模式(简化通信)

sudo docker run -it --rm \
  --net=host \  # 直接使用主机网络
  rosplanning/navigation2:main

3.4 在容器内使用Nav2

启动Gazebo仿真

# 进入容器后执行
ros2 launch nav2_bringup tb3_simulation_launch.py

 运行SLAM节点

ros2 launch nav2_bringup slam_launch.py

调用导航服务

ros2 action send_goal /navigate_to_pose nav2_msgs/action/NavigateToPose "{pose: {header: {frame_id: 'map'}, pose: {position: {x: 1.0, y: 0.5}, orientation: {z: 0.707, w: 0.707}}}}"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gui林

你的热爱是我更新的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值