摘要
本文将详细介绍如何在ROS 1环境下利用激光雷达进行2D平面自主导航的实现方法。我们将通过一系列步骤来设置开发环境,并演示如何配置和使用必要的软件包以实现机器人自主导航功能。
环境准备
- 操作系统: Ubuntu 18.04 LTS
- ROS版本: Melodic Morenia
- 硬件需求:
- 计算机:安装了Ubuntu 18.04 LTS的操作系统。
- 机器人平台:具备足够的计算能力支持ROS,这里选用树莓派4B主控板。
- 激光雷达:镭神N10P激光雷达。
安装ROS
确保你已经安装了ROS Melodic。如果未安装,请按照以下步骤操作:
- 添加ROS仓库:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
- 添加密钥:
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
- 更新并安装ROS基础包:
sudo apt update sudo apt install ros-melodic-desktop-full
- 设置环境变量:
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc source ~/.bashrc
- 安装额外工具RVIZ和Robot State Publisher:
sudo apt-get install ros-melodic-rviz sudo apt-get install ros-melodic-robot-state-publisher
激光雷达驱动安装
-
查找官方驱动:
- 访问镭神激光雷达的官方网站或者GitHub仓库寻找官方提供的ROS驱动程序。
- 镭神官方提供了ROS驱动,是以一个ROS包的形式发布的。大家可以去官网翻翻。
-
安装依赖:
- 确保您的系统上已经安装了ROS Melodic和其他必要的ROS包。
- 可能还需要安装一些特定的依赖库,包括串口通信库等。
- 完成基础配置:
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格式并存储在你指定的位置。
- 启动ROS Master和ROS核心:
- 验证定位准确性:
- 观察RViz中的机器人位置是否准确。
- 调整AMCL参数以提高定位精度。
- 测试路径规划:
- 使用
move_base_simple/goal
话题发送目标位置。 - 观察机器人是否能够顺利达到目标位置。
- 使用
- 故障排除:
- 如果遇到问题,请检查日志文件和ROS节点的状态。
- 可以使用
rostopic echo
和rostopic hz
命令来检查消息发布情况。
以上是个人参考其他资料和个人实践总结而得