当前位置: 首页 > news >正文

树莓派5-ubuntu 24.04 ros-jazzy-desktop 创建 robot_navigation 包

在使用树莓派搭建ro2环境进行激光雷达建图的时候,可能会遇到 robot_navigation 包缺失的问题,需要手动进行创建

激活环境命令:

# 进入 ros2_ws 根目录(必须在这个目录执行 source)
cd ~/ros2_ws# 激活环境(每次新开终端都要执行,或添加到 bash 配置)
source install/setup.bash

robot_navigation 是一个非ros2官方的包,需要自己创建,创建流程如下:

1.cd到自己创建的ros2空间:

cd ~/ros2_ws/src

并执行下面的命令:

ros2 pkg create robot_navigation \--build-type ament_python \--dependencies rclpy launch_ros nav2_bringup slam_toolbox

2.创建目录结构

cd robot_navigation 
mkdir launch config maps

3.创建必要的文件,setup.py ,如果有则无需创建,如果无则需要创建一个

将下面的内容复制粘贴替换进去:

import os  # 新增:导入 os 模块(用于路径拼接)
import glob  # 已添加:导入 glob 模块
from setuptools import setup  # 确保有这行(导入 setup 函数)package_name = 'robot_navigation'setup(name=package_name,version='0.0.0',packages=[package_name],data_files=[('share/ament_index/resource_index/packages',['resource/' + package_name]),('share/' + package_name, ['package.xml']),# 以下 3 行:将 glob(...) 改为 glob.glob(...)(os.path.join('share', package_name, 'launch'), glob.glob('launch/*.py')),(os.path.join('share', package_name, 'config'), glob.glob('config/*.yaml')),(os.path.join('share', package_name, 'maps'), glob.glob('maps/*')),],install_requires=['setuptools'],zip_safe=True,maintainer='your_name',maintainer_email='liuyanlin_sc@qq.com',description='Robot navigation package',license='Apache License 2.0',tests_require=['pytest'],entry_points={'console_scripts': [],},
)

4.然后去:ros2_ws/src/robot_navigation/launch 这个路径下新建文件:slam_launch.py 并复制下面的内容:

from launch import LaunchDescription
from launch_ros.actions import Node
from launch.actions import DeclareLaunchArgument
from launch.substitutions import LaunchConfiguration
import os
from ament_index_python.packages import get_package_share_directorydef generate_launch_description():# 获取包目录pkg_dir = get_package_share_directory('robot_navigation')return LaunchDescription([DeclareLaunchArgument('use_sim_time',default_value='false',description='Use simulation (Gazebo) clock if true'),# 激光雷达节点Node(package='ydlidar',executable='ydlidar_node',name='ydlidar_node',parameters=[{'port': '/dev/ttyUSB0','frame_id': 'laser_frame','angle_compensate': True,'scan_mode': 'Standard'}],output='screen'),# SLAM工具箱节点Node(package='slam_toolbox',executable='async_slam_toolbox_node',name='slam_toolbox',parameters=[{'use_sim_time': LaunchConfiguration('use_sim_time'),'params_file': os.path.join(pkg_dir, 'config', 'slam_toolbox_params.yaml')}],output='screen'),# TF转换 - 基础到激光雷达Node(package='tf2_ros',executable='static_transform_publisher',name='base_to_laser',arguments=['0', '0', '0.1', '0', '0', '0', 'base_link', 'laser_frame']),# TF转换 - 基础到IMUNode(package='tf2_ros',executable='static_transform_publisher',name='base_to_imu',arguments=['0', '0', '0.05', '0', '0', '0', 'base_link', 'imu_link']),])

5.继续在 ros2_ws/src/robot_navigation/launch 路径下新建文件:navigation_launch.py 并粘贴下面内容:

from launch import LaunchDescription
from launch.actions import IncludeLaunchDescription
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch.substitutions import ThisLaunchFileDir
import os
from ament_index_python.packages import get_package_share_directorydef generate_launch_description():# 使用nav2_bringup的导航启动文件nav2_bringup_dir = get_package_share_directory('nav2_bringup')return LaunchDescription([IncludeLaunchDescription(PythonLaunchDescriptionSource(os.path.join(nav2_bringup_dir, 'launch', 'navigation_launch.py')),launch_arguments={'use_sim_time': 'false','params_file': os.path.join(get_package_share_directory('robot_navigation'), 'config','nav2_params.yaml')}.items()),])

6.去到 ros2_ws/src/robot_navigation/config 路径下新建文件:slam_toolbox_params.yaml 粘贴下面内容:

slam_toolbox:ros__parameters:# 基本参数use_sim_time: falseodom_frame: odommap_frame: mapbase_frame: base_linkscan_topic: /scan# 地图参数resolution: 0.05max_laser_range: 12.0minimum_time_interval: 0.5# 性能参数throttle_scans: 1transform_publish_period: 0.02

7.继续在 ros2_ws/src/robot_navigation/config 路径下新建文件:nav2_params.yaml 并粘贴下面的内容:

amcl:ros__parameters:min_particles: 500max_particles: 3000transform_tolerance: 0.2initial_pose:x: 0.0y: 0.0theta: 0.0
controller_server:ros__parameters:controller_frequency: 10.0min_x_velocity_threshold: 0.001min_y_velocity_threshold: 0.001min_theta_velocity_threshold: 0.001
bt_navigator:ros__parameters:global_bt_xml_filename: "navigate_w_replanning_and_recovery.xml"behavior_tree_loop_rate: 10.0
planner_server:ros__parameters:expected_planner_frequency: 1.0
local_costmap:local_costmap:ros__parameters:update_frequency: 5.0publish_frequency: 2.0
global_costmap:global_costmap:ros__parameters:update_frequency: 1.0publish_frequency: 1.0

8.回到 ros2_ws/src/robot_navigation 路径修改 package.xml 文件,复制下面的内容覆盖掉:

<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypelocation="http://www.ros.org/schema/package_format3.xsd"?>
<package format="3"><name>robot_navigation</name><version>0.0.0</version><description>Robot navigation package</description><maintainer email="your_email@example.com">your_name</maintainer><license>Apache License 2.0</license><!-- 新增:编译工具依赖(必须有,否则 colcon 无法正确归类包) --><buildtool_depend>ament_cmake</buildtool_depend><!-- 新增:Python 包核心依赖(ROS2 识别 Python 包的关键) --><depend>ament_python</depend><!-- 保留你原有的依赖(不变) --><depend>rclpy</depend><depend>launch_ros</depend><depend>nav2_bringup</depend><depend>slam_toolbox</depend><depend>tf2_ros</depend><depend>geometry_msgs</depend><exec_depend>nav2_map_server</exec_depend><exec_depend>nav2_amcl</exec_depend><exec_depend>nav2_controller</exec_depend><exec_depend>nav2_planner</exec_depend><exec_depend>nav2_behavior_tree</exec_depend><exec_depend>nav2_bt_navigator</exec_depend><exec_depend>nav2_waypoint_follower</exec_depend><exec_depend>nav2_velocity_smoother</exec_depend><exec_depend>nav2_lifecycle_manager</exec_depend><!-- 新增:声明包类型为 Python(ROS2 识别的核心出口配置) --><export><build_type>ament_python</build_type></export>
</package>

9.回到 cd ~/ros2_ws 编译包:

colcon build

编译过程中如果有遇到提示类似:ydlidar_ros2 这种错误,使用以下命令克隆:

git clone https://github.com/YDLIDAR/ydlidar_ros2.git

然后进入 robot_navigation 包的源码目录(替换为你的实际路径,通常是 src 下


cd ~/ros2_ws/src/robot_navigation# 全局搜索并替换:将所有 "ydlidar_ros2" 替换为 "ydlidar"
sed -i 's/ydlidar_ros2/ydlidar/g' $(grep -rl "ydlidar_ros2" ./)

命令说明:
grep -rl "ydlidar_ros2" ./:搜索当前目录下所有包含 ydlidar_ros2 的文件;
sed -i 's/旧内容/新内容/g' 文件名:批量替换文件中的字符串(g 表示全局替换,避免只替换第一个)

10.验证是否替换成功

# 再次搜索,确认没有残留的 ydlidar_ros2
grep -r "ydlidar_ros2" ./

如果没有输出,说明替换成功;如果还有输出,根据提示的文件路径手动修改

11.重新编译

# 回到工作空间根目录
cd ~/ros2_ws# 重新编译 robot_navigation 包(让修改生效)
colcon build --packages-select robot_navigation# 激活环境(确保加载最新编译结果)
source install/setup.bash# 启动 launch 文件
ros2 launch robot_navigation slam_launch.py

最终输出如下图所示的内容则表示正常了,接下来就可以把激光雷达跟树莓派进行连接然后再继续往后的测试:

http://www.dtcms.com/a/604894.html

相关文章:

  • 【Linux】调试监听接口是否正常
  • Flink CDC + StarRocks用 StarRocks Connector 打通实时明细与分析
  • Linux《Socket编程Tcp》
  • 2025.11.13 力扣每日一题
  • “暗激子(dark excitons)” 以 30万倍亮度被观测到
  • 数据归一化:提升模型训练的关键技巧
  • 网站外链建设可以提升网站权重对吗三亚平台公司
  • 怎么做一种网站为别人宣传lamp 做网站
  • UE5制作扭曲声波效果
  • 从 OneThreadOneLoop 线程池到进程池:高性能 Reactor 服务器的演进
  • C语言在线编译环境 | 提高编程效率与学习体验
  • 矩阵起源成功登陆深圳“专精特新”专板,加速 AI 数据智能新进程!
  • MPC模型预测控制原理全解析:从状态预测、矩阵推导到QP求解与滚动优化(含完整手推过程)
  • android recyclerview缓存2_四级缓存机制
  • [特殊字符] 在 macOS 上设置 SQLite
  • android recyclerview缓存1_概念和常见问题
  • SQLite 速成学习
  • [特殊字符] 在 Windows 上设置 SQLite
  • 做资源网站违法吗深圳大梅沙
  • 【环境数据处理】-基于R批量对环境数据克里金插值提高数据精度
  • 广州wap网站建设百度seo优化技术
  • linux centos常用命令整理
  • Java设计模式之建造者模式(Builder)详解
  • [智能体设计模式] 第6章:规划
  • 学习react第三天
  • 营销软文网站西安网站建设网络公司熊掌号
  • 二分查找算法介绍及使用
  • [element-plus] el-tree 动态增加节点,删除节点
  • SQL:从数据基石到安全前线的双重审视
  • 数据结构:双向链表(1)