1 AutoTrack-IR-DR200 介绍
AutoTrack-IR-DR200是一款专为室内复杂环境自主移动任务设计的平台,深度融合高精度SLAM(即时定位与建图)算法与智能导航技术,具备环境感知、自主定位、路径规划及动态避障四大核心能力。该平台采用两轮独立差速驱动架构,实现原地转向与全向移动等卓越机动性能,可广泛应用于仓储物流、室内巡检、科研验证等多元化场景。基于模块化系统设计,支持激光雷达、深度相机、IMU(惯性测量单元)、超声波等多种传感器集成,提供灵活的扩展接口,便于用户进行二次开发及功能定制。
本文将详细介绍AutoTrack-IR-DR200平台的构建与实现过程。
1.1 AutoTrack-IR-DR200 特点
- 计算平台:Jetson Nano轻量级嵌入式AI加速平台
- 软件架构:基于ROS框架的模块化软件系统
- 传感器融合:支持激光雷达、IMU、深度相机等多种传感器
- 算法集成:集成GMapping、DWA、TEB等先进算法
- 通信能力:支持RS232、以太网、串口等多种通信协议
- 实时性能:毫秒级数据处理与控制响应
- 扩展性:模块化设计,支持功能定制与二次开发
1.2 工控机接口配置
Jetson Nano B01工控机提供丰富的接口,满足各种传感器和设备的接入需求:
- 电源管理:5~12V DC 输入,多路12V DC 稳压输出
- 通信接口:以太网、USB3.0 、I2C 、SPI 、I2S 、GPIO
- 传感器接口:激光雷达网口、IMU串口、相机USB接口
- 显示输出:HDMI显示输出
- 开发支持:配套SDK、ROS驱动包、仿真环境
1.3 应用场景
AutoTrack-IR-DR200平台广泛适用于多种应用场景:
- 仓储物流:自主货物搬运与仓库管理
- 室内巡检:园区、工厂、实验室等室内环境的自主巡检
- 科研验证:移动机器人算法研究与验证平台
- 教育教学:机器人课程实验与实训平台
- 无人驾驶:自动驾驶技术研究与开发
1.4 AutoTrack-IR-DR200 SLAM系统概述
AutoTrack-IR-DR200平台集成了高精度SLAM(Simultaneous Localization and Mapping)系统,通过集成激光雷达、IMU等多种传感器,实现同时定位与地图构建功能。本系统采用ROS(Robot Operating System)作为软件框架,结合GMapping、DWA、TEB等先进算法,构建完整的自主移动解决方案。本文以DR200圆形底盘为硬件实现示例,展示平台的具体应用。
AutoTrack-IR-DR200系统主要功能包括:
- 多传感器融合感知:集成激光雷达、IMU、深度相机等传感器,获取全方位环境信息
- 高精度定位:利用多传感器融合技术,实现厘米级定位精度
- 实时地图构建:支持2D栅格地图的实时构建与更新
- 智能路径规划:基于全局和局部路径规划算法,实现动态避障与最优路径选择
- 自主导航控制:控制移动底盘实现精确的自主导航与运动控制
- 模块化扩展:支持多种传感器和功能模块的灵活集成与扩展
2 工控机环境
2.1 硬件环境
- 处理器: Cortex-A57,128 核 Maxwell GPU
- 内存: 4 GB 64-bit LPDDR4 25.6 GB/s
- 电源: 5V
- 接口: USB 3.0,USB 2.0,Micro-USB,HDMI,LAN
2.2 软件环境
- 系统版本:Ubuntu-18.04
- ROS版本:ROS Melodic
2.2.1 Ubuntu-18.04安装
首先需要下载SD Card Formatter来对TF卡进行格式化处理。将TF卡插入读卡器,再将读卡器插入电脑并运行SD Card Formatter。
1.点击Select card选择自己TF卡的名称。
2.点击“Quick format”快速格式。
3.点击“Format”开始格式化,在警告弹窗中选择是。
在NVIDIA官网下载镜像文件。
下载并打开Etcher烧录工具。
1.点击“Select image”选择镜像文件即上一步下载的镜像文件。
2.将插入TF卡的读卡器插入电脑,若未插入则显示
3.点击“Select drive” 选择需要烧录的磁盘即为TF卡的磁盘设备。
4.点击“Flash”等待烧录完成
最后将读卡器中的TF卡插入Jetson nano 插上电源即可启动系统。
2.2.2 ROS Melodic安装
配置Ubuntu软件仓库,并设置密钥:
sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` 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/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
安装后,在终端执行roscore
,测试ROS:
如图显示则ROS1 Melodic安装无误。
3 外设配置
3.1 LDS-50C-C30E激光雷达
LDS-50C-C30E激光雷达,采用TOF(Time of Fight)飞行时间测距技术,根据激光飞行时间来测量距离。在40m的有效探测距离内测距精度可达到±25mm,测距精度不会随距离变化而变化。同时具备自主研发的360度扫描,运行可靠。
规格参数:
3.1.1 硬件连接和网络配置
物理连接: jetson nano连接上雷达的以太网口。
网络配置:修改网口信息,保证与雷达处于同一局域网内。
# 给网络接口添加IP地址
sudo ip addr add 192.168.158.200/24 dev <网卡名称>
sudo ip addr add 192.168.158.200/24 dev eth0
3.1.2 查看雷达点云
#启动雷达驱动
roslaunch bluesea2 udp_lidar.launch
#打开rviz查看点云数据
rviz -d /home/plan/AutoTrack-IR-DR200/src/drivers/bluesea2/rviz/demo.rviz
3.2 IMU
3.2.1 硬件介绍和连接
默认配备维特智能九轴IMU HWT906,可参考官方手册HWT906产品资料,进行配置与校准
3.2.2 安装驱动依赖
步骤1:安装Qt5串口库
# 安装Qt5串口开发库
sudo apt-get install libqt5serialport5-dev
3.2.3 下载和编译驱动
步骤1:下载源码
# 进入工作空间
cd ~/catkin_ws
# 克隆仓库到src目录
git clone --recursive https://github.com/ElettraSciComp/witmotion_IMU_ros.git src/witmotion_ros
步骤2:编译驱动
# 编译特定包
catkin_make --pkg witmotion_ros
# 重新加载环境
source devel/setup.bash
3.2.4 运行和测试IMU
步骤1:启动IMU驱动
# 确保环境变量已加载
source ~/catkin_ws/devel/setup.bash
# 启动IMU驱动
roslaunch witmotion_ros witmotion.launch
步骤2:查看IMU数据
# 查看IMU数据
rostopic echo /imu/data
3.3 深度相机
3.3.1 Dabai DW 双目结构光相机
针对服务机器人场景,奥比中光基于自主研发的ASIC芯片,推出高性能双目结构光相机Dabai DW,平均功耗低于1.2W,终端只需USB 2.0接口,即可获得高精度的3D深度信息,供后端调用,赋能机器人实现感知、避障、导航等功能。
3.3.2 安装驱动依赖
- 安装相关依赖库
sudo apt install libgflags-dev ros-melodic-image-geometry ros-melodic-camera-info-manager \
ros-melodic-image-transport-plugins ros-melodic-compressed-image-transport \
ros-melodic-image-transport ros-melodic-image-publisher libgoogle-glog-dev libusb-1.0-0-dev libeigen3-dev \
ros-melodic-diagnostic-updater ros-melodic-diagnostic-msgs \
libdw-dev
- 安装 udev 规则
cd ~/catkin_ws
source ./devel/setup.bash
roscd orbbec_camera
sudo bash ./scripts/install_udev_rules.sh
3.3.3 启动相机
启动相机并显示RGB图像与深度图像
终端一:
source ./devel/setup.bash roslaunch orbbec_camera dabai_dcw.launch
终端二:
source ./devel/setup.bash rviz
在rviz中点击Add 再点击By topic 选择/camera /color下的camera查看实时图像
若需要显示深度图像则选择/camera /depth camera
4 算法原理
4.1 建图算法
4.1.1 Gmapping算法
Gmapping是一个基于2D激光雷达使用RBPF(Rao-Blackwellized Particle Filters)算法完成二维栅格地图构建的SLAM算法。
优点:gmapping可以实时构建室内环境地图,在小场景中计算量少,且地图精度较高,对激光雷达扫描频率要求较低。
缺点:随着环境的增大,构建地图所需的内存和计算量就会变得巨大,所以gmapping不适合大场景构图。
具体算法详细解释可以参考文章
4.2 导航算法
4.2.1 路径规划算法
- 全局路径规划算法Dijkstra
Dijkstra 算法,是由荷兰计算机科学家 Edsger Wybe Dijkstra 在1956年发现的算法,戴克斯特拉算法使用类似广度优先搜索的方法解决赋权图的单源最短路径问题。
具体算法详细解释可以参考文章
- 局部路径规划算法
动态窗口算法(Dynamic Window Approaches, DWA) 是基于预测控制理论的一种次优方法,因其在未知环境下能够安全、有效的避开障碍物, 同时具有计算量小, 反应迅速、可操作性强等特点。
具体算法详细解释可以参考文章
TEB(Timed Elastic Band)路径规划算法是一种基于优化的局部路径规划算法,广泛应用于移动机器人、自动驾驶等领域。它通过在机器人的运动轨迹上引入时间信息,结合动力学约束和环境约束,生成平滑且可行的路径。
具体算法详细解释可以参考文章
5 仿真导航实验
5.1 工程环境
从AutoTrack-IR-DR200 PlanRobotShenZhen Githubhttps://github.com/PlanRobotShenZhen/AutoTrack-IR-DR200.git
或压缩包提取工程
5.1.1 工程目录结构
~/catkin_ws
├── src
│ ├── CMakeLists.txt
│ ├── bot_navigation
│ │ ├── launch
│ │ ├──amcl.launch
│ │ ├──ekf.launch
│ │ ├──gmapping.launch
│ │ ├──localization.launch
│ │ ├──move_base.launch
│ │ ├──navigation.launch
│ │ ├──save_map.launch
│ │ ├── maps
│ │ ├── param
│ │ ├── rviz
│ │ ├── scripts
│ ├── drivers
│ ├── CMakeLists.txt
└── tools
├── README.md
~/catkin_ws
(ROS工作空间根目录)maps/
:存放建图生成栅格地图文件(如.pgm
)src/
:核心功能包源码目录bot_navigation/
:机器人导航相关功能launch/
:机器人建图导航等启动文件amcl.launch
:定位节点启动配置文件ekf.launch
:扩展卡尔曼滤波配置文件gmapping.launch
:Gmapping算法建图文件localization.launch
:配置机器人定位功能的核心启动文件move_base.launch
: 自主导航的路径规划与运动控制启动文件navigation.launch
: 集成化启动配置文件(包括:组合定位、路径规划和可视化模块)save_map.launch
: 配置并启动地图保存启动文件
mapps/
:地图存放包map.pgm
:二进制图像文件,用于存储灰度图像数据。map.yaml
:机器人导航中的地图配置文件
param/
:导航栈核心参数包dr200/
:存储机器人导航栈的核心参数配置文件
rviz/
: 导航建图可视化界面配置文件- gmapping.rviz: 建图可视化界面配置文件
- navigation.rviz: 导航可视化界面配置文件
scripts/
: 地图保存等脚本文件drivers/
: 传感器底层驱动包
tools/
:辅助工具或脚本(非ROS功能包)
5.1.2 工程编译
步骤1:获取工程源码
# 从GitHub克隆
cd ~
git clone https://github.com/PlanRobotShenZhen/AutoTrack-IR-DR200.git catkin_ws
# 更新子模块
cd ~/catkin_ws && git submodule update --init --recursive
步骤2:安装系统依赖
### IMU
sudo apt-get install libqt5serialport5-dev
### Gmapping
sudo apt install ros-melodic-gmapping
sudo apt install ros-melodic-map-server
### navigation
sudo apt install ros-melodic-robot-localization
sudo apt install ros-melodic-robot-pose-ekf
sudo apt install ros-melodic-navigation
sudo apt install ros-melodic-navigation*
sudo apt install ros-melodic-move-base
sudo apt install ros-melodic-amcl
sudo apt install ros-melodic-dwa-local-planner
sudo apt install ros-melodic-teb-local-planner
步骤3:编译工程
# 清理之前的编译结果(如果存在),也可以用于检查是否缺少依赖
catkin_make clean
# 编译(单线程,避免依赖问题)
catkin_make -j1
# 重新加载环境
source ~/catkin_ws/devel/setup.bash
步骤4:串口设备配置
# 复制串口规则文件
sudo cp ./tools/serial/serial_rules/* /etc/udev/rules.d/
# 重新加载udev规则
sudo udevadm control --reload-rules
sudo udevadm trigger
# 将用户添加到dialout组(串口访问权限)
sudo usermod -aG dialout plan
sudo usermod -aG dialout root
# 重新登录或重启以使权限生效
5.2 DR200底盘仿真
5.2.1 启动Gazebo仿真环境
运行DR200底盘仿真包dr200
的run.launch:
# 确保工作空间环境已加载
source ~/catkin_ws/devel/setup.bash
roslaunch dr200_description gazebo.launch publish_odom_tf:=true
5.2.2 控制机器人运动
方法1:使用键盘控制
# 安装键盘控制包(如果未安装)
sudo apt-get install ros-melodic-teleop-twist-keyboard
# 启动键盘控制
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
# 按照提示使用以下按键控制:
# u i o
# j k l
# m , .
# q/z : 增加/减少最大速度
# w/x : 增加/减少线速度
# e/c : 增加/减少角速度
方法2:使用rqt_robot_steering图形控制
# 启动图形控制界面
rosrun rqt_robot_steering rqt_robot_steering
# 在界面中使用滑块或输入框控制线速度和角速度
5.3 构建栅格地图
5.3.1 配置仿真时间
首先需要让系统采用仿真时间,即修改~/catkin_ws/src/bot_navigation/gmapping.launch
中的/use_sim_time
参数为true
:
gedit ~/catkin_ws/src/bot_navigation/gmapping.launch
修改内容:
<!-- 在launch文件中找到并修改以下参数 -->
<param name="/use_sim_time" value="true" />
5.3.2 启动建图程序
启动Gmapping建图
# 新开终端,加载环境
source ~/catkin_ws/devel/setup.bash
#启动仿真环境
roslaunch dr200_description gazebo.launch publish_odom_tf:=false
#启动Gmapping建图算法
roslaunch bot_navigation gmapping.launch use_ekf:=true
5.3.3 控制机器人进行建图
使用rqt_robot_steering图形控制,在界面中使用滑块或输入框控制线速度和角速度
rosrun rqt_robot_steering rqt_robot_steering
5.3.4 保存建图结果
步骤1:完成建图
在另外一个终端运行
roslaunch bot_navigation save_map.launch
步骤2:查看保存的地图
# 检查地图保存目录
ls -la ~/catkin_ws/src/bot_navigation/maps
# 应该看到类似文件:
# map.pgm # 栅格地图
# mpa.yaml # 地图配置文件
5.4 导航
5.4.1 启动Gazebo仿真环境
运行DR200底盘仿真包dr200_description
的gazebo.launch:
# 确保工作空间环境已加载
source ~/catkin_ws/devel/setup.bash
roslaunch dr200_description gazebo.launch publish_odom_tf:=false
5.4.2 启动导航程序
可配置~/catkin_ws/src/bot_navigation/param
目录下的导航规划器参数
具体可参考:ROS::导航参数配置详解,rosrun rqt_reconfigure rqt_reconfigure
可动态调整
在终端运行导航启动文件:
source ~/catkin_ws/devel/setup.bash
# 导航
roslaunch bot_navigation navigation.launch use_ekf:=true open_rviz:=true slow_mode:=false move_forward_only:=true
5.5.3 设置ROS导航目标点
在rviz中点击 2D Nav Goal在图中设置目标点
6 实机导航实验
6.1 工程环境
参考 5.1 工程环境
6.2 DR200底盘
确保已连接以下模块:
- IMU
- LDS-50C-C30E
- DR200 小车底盘
6.3 构建栅格地图
启动真实环境下的小车驱动与描述
# 启动真实环境下的小车驱动与描述
roslaunch dr200_description run.launch odom_publish_tf:=false
# gmapping建图
roslaunch bot_navigation gmapping.launch use_ekf:=ture
保存地图
# 保存地图
roslaunch bot_navigation save_map.launch
6.4 导航
# 启动真实环境下的小车驱动与描述
roslaunch dr200_description run.launch odom_publish_tf:=false
# 导航
roslaunch bot_navigation navigation.launch use_ekf:=true open_rviz:=true slow_mode:=false move_forward_only:=true
在rviz中点击2D Pose Estimate对机器人进行重定位
点击 2D Nav Goal设置目标点来进行导航
7 对外通讯协议 (待补充)
7.1 协议内容
7.2 调度实验
8 结论
本文系统阐述了基于DR200底盘的AutoTrack-IR-DR200的SLAM系统构建过程。该系统开发以DR200底盘为硬件基础,首先完成了工控机环境配置,通过Ubuntu 18.04操作系统与ROS Melodic框架的部署,为后续算法开发建立标准化开发环境。
通过ROS基础教程的学习,掌握了ROS文件系统、节点通信模型等核心概念,并通过实际的话题通信示例加深了理解。在外设配置方面,成功集成了LDS-50C-C30E激光雷达和维特智能九轴IMU,为SLAM系统提供了必要的传感器数据支持。
导航系统验证阶段,先在Gazebo仿真环境中验证Gmapping建图算法有效性,继而构建包含障碍物检测、路径规划、定位导航的完整功能体系,最终通过实车测试验证了系统在动态环境中的鲁棒性,形成从环境感知、地图构建到自主导航的完整功能闭环。该系统构建过程形成的可复用开发框架,在服务机器人等领域展现出显著工程应用价值,实验结果表明其在典型场景下具备厘米级定位精度和动态避障能力。