使用激光雷达在ROS 1与Ubuntu 18.04中实现2D平面自主导航

摘要

本文将详细介绍如何在ROS 1环境下利用激光雷达进行2D平面自主导航的实现方法。我们将通过一系列步骤来设置开发环境,并演示如何配置和使用必要的软件包以实现机器人自主导航功能。

环境准备

  1. 操作系统: Ubuntu 18.04 LTS
  2. ROS版本: Melodic Morenia
  3. 硬件需求:
    • 计算机:安装了Ubuntu 18.04 LTS的操作系统。
    • 机器人平台:具备足够的计算能力支持ROS,这里选用树莓派4B主控板。
    • 激光雷达:镭神N10P激光雷达。

安装ROS

确保你已经安装了ROS Melodic。如果未安装,请按照以下步骤操作:

  1. 添加ROS仓库:
    sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
  2. 添加密钥:
    sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
  3. 更新并安装ROS基础包
    sudo apt update
    sudo apt install ros-melodic-desktop-full
  4. 设置环境变量:
    echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
    source ~/.bashrc
  5. 安装额外工具RVIZ和Robot State Publisher:
    sudo apt-get install ros-melodic-rviz
    sudo apt-get install ros-melodic-robot-state-publisher

激光雷达驱动安装

  1. 查找官方驱动:

    • 访问镭神激光雷达的官方网站或者GitHub仓库寻找官方提供的ROS驱动程序。
    • 镭神官方提供了ROS驱动,是以一个ROS包的形式发布的。大家可以去官网翻翻。
  2. 安装依赖:

    • 确保您的系统上已经安装了ROS Melodic和其他必要的ROS包。
    • 可能还需要安装一些特定的依赖库,包括串口通信库等。
  3. 完成基础配置:
1、安装相关库 
	sudo apt-get install libpcap-dev
2、将lsx10移动至工作空间,编译
	catkin_make
3、网口雷达运行:
	roslaunch lslidar_driver lslidar_net.launch

      串口雷达运行:
	roslaunch lslidar_driver lslidar_serial.launch

4、修改雷达运行launch中的雷达型号:
	根据实际雷达型号,将lidar_name的value值修改成  M10或者M10_P 或者N10
  • 根据雷达手册中的说明,配置驱动的参数。通常包括波特率、设备名等。
  • leishen_n10p_ros/launch/leishen_n10p.launch,编辑这个文件以适应您的硬件配置。
    <launch>
        <arg name="rplidar_mode"  default="ls_N10P" 
        <!--所有雷达正前方(小车正前方)为0度角方向,扫描角度顺时针方向增加 -->
        <!--disable_min:多角度屏蔽角度起始值 disable_max:多角度屏蔽角度结束值 ,不开启角度屏蔽默认扫描角度为0°~360° -->
        <!--Example: disable_min=[40,90]  disable_max=[50,120] 表示雷达扫描时屏蔽40°~50°,90°~120°的区间,可屏蔽单个或多个区间-->
    
        <!-- 镭神N10P雷达参数 -->
        <param name="lsn10/truncated_mode" value="0"/>    <!--0:不屏蔽角度 1:屏蔽角度-->
        <rosparam param="lsn10/disable_min">[120]</rosparam> <!--角度左值-->
        <rosparam param="lsn10/disable_max">[240]</rosparam> <!--角度右值-->
        <!-- 镭神N10P雷达参数 -->
    
      
        <!-- 启动镭神N10P雷达 -->
        <group if="$(eval rplidar_mode == 'ls_N10P')">
            <include file="$(find lsn10)/launch/lsn10.launch"/>
            <param name="/lsn10/versions" value="2"/>
        </group>
    
    </launch>
    

    将雷达连接至树莓派4B主板,之后开机使用绑定串口的方法完成设备识别。在ros终端运行以下指令完成雷达启动:(示例)

    roslaunch leishen_n10p_ros leishen_n10p.launch

    可以使用rostopic命令来验证雷达数据是否正常发布:

    rostopic echo /scan

    配置机器人模型

  • 创建一个新的catkin工作空间:

    • 如果还没有创建,请参考下面的部分创建一个新的catkin工作空间。打开ros终端依次执行以下指令:
    mkdir -p ~/catkin_ws/src
    cd ~/catkin_ws/
    catkin_make
  • src目录下创建一个描述机器人的package:

    • 如果尚未创建,请按照前面的指导创建一个包。
    catkin_create_pkg <your_robot_package> rospy std_msgs nav_msgs
  • 编辑package.xml:

    • <your_robot_package>目录下的package.xml中添加依赖:
    <build_depend>roscpp</build_depend>
    <build_depend>geometry_msgs</build_depend>
    <build_depend>leishen_n10p_ros</build_depend>
    <exec_depend>roscpp</exec_depend>
    <exec_depend>geometry_msgs</exec_depend>
    <exec_depend>leishen_n10p_ros</exec_depend>
  • 编写CMakeLists.txt:

    • <your_robot_package>目录下的CMakeLists.txt中添加以下内容:
    cmake_minimum_required(VERSION 2.8.3)
    project(<your_robot_package>)
    
    find_package(catkin REQUIRED COMPONENTS
      roscpp
      geometry_msgs
      leishen_n10p_ros
    )
    
    catkin_package(
      INCLUDE_DIRS include
      LIBRARIES <your_robot_package>
      CATKIN_DEPENDS roscpp geometry_msgs leishen_n10p_ros
      DEPENDS system_lib
    )
    
    include_directories(include ${catkin_INCLUDE_DIRS})
    
    add_executable(<your_robot_package> src/<your_robot_package>.cpp)
    target_link_libraries(<your_robot_package> ${catkin_LIBRARIES})
  • 配置robot_state_publisher:

    • 创建urdf文件夹,并在其中放置您的机器人模型文件(通常是一个.urdf文件)。
    • 编辑<your_robot_package>/launch/robot.launch文件,添加robot_state_publisher节点:

激光雷达数据处理

实现自主导航

测试与调试

  • TF转换:
    • 使用tf包来进行坐标变换。
    • 确保激光雷达的坐标系与机器人的坐标系正确关联。
  • AMCL (Adaptive Monte Carlo Localization):
    • AMCL是一种概率定位方法,用于根据传感器读数估计机器人的位置。
    • 安装AMCL:
      sudo apt-get install ros-melodic-amcl
  • Path Planning:
    • 使用move_base作为路径规划器。
    • 安装move_base
  • 创建导航堆栈:
    • 创建一个新的catkin包,包含所有必要的配置文件和启动文件。
    • 配置move_base参数,如成本地图层、全局规划器等。
  • 配置move_base:
    • <your_robot_package>/launch/navigation.launch文件中配置move_base节点:
      <?xml version="1.0"?>
      <launch>
        <node pkg="move_base" type="move_base" name="move_base" output="screen">
          <remap from="move_base/goal" to="/move_base_simple/goal"/>
          <param name="base_global_planner" value="global_planner/GlobalPlanner" />
          
          <!-- 更多参数 -->
          
          <rosparam file="$(find <your_robot_package>)/param/move_base_params.yaml" command="load" ns="move_base"/>
        </node>
      </launch>
  • 启动系统:
    • 启动ROS Master和ROS核心:
      roscore
    • 启动雷达驱动和机器人状态发布器:
      roslaunch <your_robot_package> robot.launch
    • 启动AMCL节点:
      roslaunch amcl amcl_demo.launch map_file:=<path_to_your_map_file>
    • 启动move_base节点:
      roslaunch <your_robot_package> navigation.launch
    • 使用rviz进行可视化:
      rviz
    • 在RViz中加载适当的插件,并加载地图文件。确保您的地图已经被转换为pgm格式并存储在你指定的位置。
  • 验证定位准确性:
    • 观察RViz中的机器人位置是否准确。
    • 调整AMCL参数以提高定位精度。
  • 测试路径规划:
    • 使用move_base_simple/goal话题发送目标位置。
    • 观察机器人是否能够顺利达到目标位置。
  • 故障排除:
    • 如果遇到问题,请检查日志文件和ROS节点的状态。
    • 可以使用rostopic echorostopic hz命令来检查消息发布情况。

以上是个人参考其他资料和个人实践总结而得

  • 18
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值