6.2 AMR开发指南
自主移动机器人(Autonomous Mobile Robot,AMR)是一类能够在环境中自主导航和执行任务的机器人。AMR 不同于自动导航车辆 (AGV),AGV依赖于轨道或预定义路线,并且通常需要操作员监督。AMR 通过多传感器融合、人工智能、机器学习等多种技术来理解环境并在其中导航,不受有线电源的限制。因其高度灵活的移动能力和智能导航系统,AMR在工业自动化、物流、医疗等领域得到了广泛应用。
1. 样例介绍
1.1 外观效果
1.2 功能框架
2. 样例组装
2.1 组件清单
名称 | 数量 | 备注 |
---|---|---|
RDK X5 | 1 | 地瓜 |
AMR底盘(舵轮)+上装+螺丝零件 | 1 | 煜禾森 |
单线激光雷达 | 1 | 氪见 |
tof摄像头 | 1 | 光鉴 |
双目摄像头(230ai) | 1 | 地瓜配件 |
IMU(BMI088) | 1 | 地瓜配件 |
usb转网口转换器 | 1 | |
0.3m网线 | 1 | |
12v转5V4A(MAX 5A) | 1 | |
tof相机支架(3D打印) | 1 | |
双目相机支架(3D打印) | 1 | |
盖板(3D打印) | 1 | |
m2*16螺丝+m2螺母 | 1 |
2.2 组装步骤讲解
2.2.1 底盘上装安装
原生底盘无法安装摄像头以及存放各种线缆,所以需要另外的上装接入底盘,只需将上装底部的两个孔位对齐底盘安装滑轨上的零件,锁紧螺丝即可
2.2.2 RDK X5接线
所有传感器以及底盘都直接接入RDK X5,需要注意双目摄像头使用的是两根同面的22pin排线,请按照下图所示方向安装
2.2.3 盖板安装
盖板为3D打印件(图纸见 文末附件),主要用于安装RDK X5并且收纳其余线缆。黄框位置四个安装孔用于安装RDK X5,安装位置在上盖板的背面。红框位置的安装孔对齐底盘安装滑轨上的零件,锁紧螺丝即可。
2.2.4 激光雷达模块接入
先将激光雷达安装至载板上,螺丝从载板背面安装,然后将接线穿过载板上的孔洞(右图中黄框所示)连接电源管理器。电源管理器安装在载板背面,螺丝从载板正面安装(如左图红框所示),安装完成后接入网线以及12V电源,网线与电源线穿过上装的孔洞(右图中红框所示)。
2.2.5 摄像头安装
1. tof摄像头安装
首先将tof摄像头、3D打印件、钣金支架连接在一起,注意3D打印件凹槽朝下。连接完成后将整体塞入上装上方凹槽,电源线与信号线从上装内部孔洞穿过(图3黄框) 。钣金件的螺丝孔位(图1红框)与上装内部螺丝孔位(图3红框)对齐,锁紧螺丝即可。
2. 双目摄像头安装
先将双目摄像头与3D打印件连接,然后接入底盘尾部的钣金支架即可
2.2.6 电源说明
底盘上提供12V的电源。12V提供给雷达,tof摄像头以及变压器,变压器输出5V提供给RDK X5
2.2.7 其他部件安装
3. 运行环境准备
tof相机、激光雷达、底盘、imu请根据实际设备型号获取代码或者功能包,此处仅提供地瓜配件imu的源代码。
3.1 传感器检查
3.1.1 双目摄像头
#检查i2c设备
root@ubuntu:~# i2cdetect -y -r 4
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- 32 -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 -- -- -- -- -- -- -- 58 -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
root@ubuntu:~# i2cdetect -y -r 6
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: 30 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 -- -- -- -- -- -- -- 58 -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
3.1.2 雷达
#确保雷达与板子的网关与掩码一致,确认是否能ping通
ping 雷达ip
3.1.3 底盘
#启动can设备,请根据具体can设备号以及波特率设置
ip link set can1 up type can bitrate 500000
#检查设备,会有如下输出:can1: <NOARP,UP,LOWER_UP> mtu 16 qdisc mq state UP mode DEFAULT group default qlen 10link/can
ip link show can1
#检查能否获取can数据,请根据具体can设备号设置
candump can1
3.1.4 IMU
#检查i2c设备
root@ubuntu:~# i2cdetect -y -r 5
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- 19 -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- 69 -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
#获取imu数据(会打印三个数,且随着imu的位姿变化)
cat /sys/devices/virtual/input/input2/acc_bal
cat /sys/devices/virtual/input/input2/gry_bal
3.2 功能安装
sudo apt -y tros-hobot-nav2 ros-foxy-navigation2 ros-foxy-nav-msgs
3.3 源码获取(无安装包的功能,需编译源码)
mkdir -p ~/amr_ws/src && cd src
#tofSLAM
git clone https://github.com/wunuo1/Tofslam_ros2.git
#点云过滤
git clone https://github.com/wunuo1/voxel_filter.git
#指定位置导航
git clone https://github.com/wunuo1/pose_setter.git
#双目深度
git clone https://github.com/D-Robotics/hobot_stereonet.git
3.4 代码编译
cd ~/amr_ws
source /opt/tros/humble/setup.bash
colcon build
3.5 传感器标定
3.5.1 标定前准备
1. 标定环境准备(标定工具为kalibr,此处提供包含kalibr以及其他标定脚本的dokcer)
i. 下载docker文件
链接: https://pan.baidu.com/s/1oXegKORgWi8Kzf4kdQXL2g?pwd=ur2z 提取码: ur2z
ii. 创建环境
#加载docker
docker load -i ubuntu18.04_calibration.tar
#检查docker是否加载成功(出现TAG为calibration的镜像)
docker images
#从image生成containe
docker run -it --privileged -v /home/nuo.wu/share_dir:/share_dir -e DISPLAY=$DISPLAY -e GDK_SCALE -e GDK_DPI_SCALE --net=host ubuntu18.04:calibration /bin/bash
iii.docker支持界面显示
# 在host端运行
xhost +local:docker
# 在host端运行以下指令
echo $DISPLAY
# 在docker运行以下指令
echo $DISPLAY
# 查看两者输出是否相同
# 若两者输出不同,若host端显示的结果是:0, 则在docker里运行以下指令
export DISPLAY=:0