跳到主要内容

5.4.8 小车车位寻找

功能介绍

车位寻找控制 App 功能为通过车位检测算法指导机器人运动到停车位,包括左右旋转和前后平移运动。App 由 MIPI 图像采集、车位检测算法、车位寻找控制策略、图像编解码、Web 展示端组成,流程如下图:

车位寻找控制 App 从检测到运动决策的流程图

App 通过车位寻找控制策略发布的控制指令直接控制实物小车,也可以利用 PC 端 Gazebo 仿真环境下的虚拟小车进行测试。

代码仓库: (https://github.com/D-Robotics/parking_search.git)

支持平台

平台运行方式示例功能
RDK X3, RDK X3 ModuleUbuntu 20.04 (Foxy), Ubuntu 22.04 (Humble)启动 MIPI/USB 摄像头获取图像,并进行停车区域检测和车位寻找,最后通过实车运动展示寻找效果

设计说明

1.视野设置:

将视野场景区域分为“左”、“中”、“右”三个区域。计算每个区域内停车区域和行车区域的 IOU,根据阈值判断对应区域类型,从而完成小车运动决策。

将相机视野划分为左中右三区用于车位决策的示意图

2.阈值设置:

视野区域
停车区域 IOU0.60.70.6
行车区域 IOU0.80.90.8

3.类别设置:

视野区域道路背景车道线标志线车位线车位区域停车杆地锁
停车区域 IOU
行车区域 IOU

说明:由于实际检测中,由于算法本身检测精度不能达到 100%,存在将行车区域误检为停车区域的情况,因此计算行车区域时将停车区域类别包括其中。

4.算法流程:

停车区域与行车区域 IOU 计算及运动决策流程说明图

准备工作

RDK 平台

  1. RDK 已烧录好 Ubuntu 系统镜像。

  2. RDK 已成功安装 TogetheROS.Bot。

  3. RDK 已安装 MIPI 或者 USB 摄像头。

  4. 一台古月居小车作为控制下位机。

作为控制下位机的古月居小车实物图

使用介绍

RDK 平台

将小车置于水平地面,调整相机角度为水平,运行车位寻找 App 后,小车根据停车区域检测算法的结果,自动进行决策并控制小车运动,直到找到车位并进入车位停止。

APP 启动后可以在 PC 端浏览器上渲染显示 sensor 发布的图片和对应的算法结果(浏览器输入 http://IP:8000 ,IP 为 RDK 的 IP 地址)。

打开 Web 端,需打开界面右上角设置,选中”全图分割“选项,可显示渲染效果。(参考 4.2 Boxs 应用算法——室外停车区域检测)

启动古月居小车,在 RDK 上运行控制下位机节点:

source /opt/tros/setup.bash
source /userdata/originbot/local_setup.bash
ros2 run originbot_base originbot_base

启动成功后,RDK 输出 log 信息:

Loading parameters:
- port name: ttyS3
- correct factor vx: 1.0000
- correct factor vth: 1.000000
[INFO] [1662551769.540781132] [originbot_base]: originbot serial port opened
[INFO] [1662551769.741758424] [originbot_base]: IMU calibration ok.
[INFO] [1662551769.742268424] [originbot_base]: OriginBot Start, enjoy it.

使用 MIPI 摄像头发布图片

# 配置tros.b环境
source /opt/tros/setup.bash
# 从tros.b的安装路径中拷贝出运行示例需要的配置文件。
cp -r /opt/tros/${TROS_DISTRO}/lib/parking_perception/config/ .

# 配置MIPI摄像头
export CAM_TYPE=mipi

# 启动launch文件
ros2 launch parking_search parking_search.launch.py

使用 USB 摄像头发布图片

# 配置tros.b环境
source /opt/tros/setup.bash
# 从tros.b的安装路径中拷贝出运行示例需要的配置文件。
cp -r /opt/tros/${TROS_DISTRO}/lib/parking_perception/config/ .

# 配置USB摄像头
export CAM_TYPE=usb

# 启动launch文件
ros2 launch parking_search parking_search.launch.py

结果分析

1.小车在行车区域搜寻前进时 RDK 运行终端输出 log 信息,其中控制小车以 0.1m/s 的速度前进运动(do move, direction: 0, step: 0.100000)。

[parking_search-4] [WARN] [1661942399.306904646] [ParkingSearchEngine]: do move, direction: 0, step: 0.100000
[parking_search-4] [WARN] [1661942399.343490021] [ParkingSearchEngine]: do move, direction: 0, step: 0.100000
[parking_perception-3] [WARN] [1661942399.347396979] [parking_perception]: input fps: 29.97, out fps: 29.67
[parking_search-4] [WARN] [1661942399.410602188] [ParkingSearchEngine]: do move, direction: 0, step: 0.100000
[parking_search-4] [WARN] [1661942399.449585563] [ParkingSearchEngine]: do move, direction: 0, step: 0.100000
车位寻找过程中小车平移靠近停车区域的运行效果动图

2.小车发现车位后转向时在 RDK 运行终端输出 log 信息:

[parking_search-4] [WARN] [1662539779.408424498] [ParkingSearchEngine]: do rotate, direction: 2, step: 0.100000
[parking_search-4] [WARN] [1662539779.442805415] [ParkingSearchEngine]: do rotate, direction: 2, step: 0.100000
[parking_search-4] [WARN] [1662539779.483669831] [ParkingSearchEngine]: do rotate, direction: 2, step: 0.100000
[parking_search-4] [WARN] [1662539779.522690915] [ParkingSearchEngine]: do rotate, direction: 2, step: 0.100000
[parking_search-4] [WARN] [1662539779.563660873] [ParkingSearchEngine]: do rotate, direction: 2, step: 0.100000
[parking_perception-3] [WARN] [1662539779.595755290] [parking_perception]: input fps: 29.87, out fps: 29.63
[parking_search-4] [WARN] [1662539779.604272498] [ParkingSearchEngine]: do rotate, direction: 2, step: 0.100000
车位寻找过程中小车旋转调整朝向的运行效果动图

3.小车确定车位后前进并最终停止时在 RDK 运行终端输出 log 信息:

[parking_search-4] [WARN] [1662539796.196264298] [ParkingSearchEngine]: do move, direction: 0, step: 0.100000
[parking_search-4] [WARN] [1662539796.227805589] [ParkingSearchEngine]: Find Target, current count: 398, target count: 400
[parking_search-4] [WARN] [1662539796.267424798] [ParkingSearchEngine]: do move, direction: 0, step: 0.100000
[parking_search-4] [WARN] [1662539796.317332964] [ParkingSearchEngine]: Find Target, current count: 399, target count: 400
[parking_search-4] [WARN] [1662539796.346787673] [ParkingSearchEngine]: do move, direction: 0, step: 0.100000
[parking_search-4] [WARN] [1662539796.386203756] [ParkingSearchEngine]: Find Target, current count: 400, target count: 400
[parking_perception-3] [WARN] [1662539796.428427089] [ParkingSearchEngine]: input fps: 29.90, out fps: 29.74
[parking_search-4] [WARN] [1662539796.465178589] [ParkingSearchEngine]: Parking Area Arrived !!!
[parking_search-4] [WARN] [1662539796.506218048] [ParkingSearchEngine]: Parking Area Arrived !!!
[parking_search-4] [WARN] [1662539796.547036881] [ParkingSearchEngine]: Parking Area Arrived !!!

小车到达停车区域后提示 Parking Area Arrived 的效果动图

PC 端在终端使用 ros2 topic list 命令可以查询到 RDK 的 topic 信息:

$ ros2 topic list
/ai_msg_parking_perception
/cmd_vel
/hbmem_img080a1b02022201080403012021072312
/image
/imu
/odom
/originbot_status
/parameter_events
/rosout
/tf

其中 /image_jpeg 是 RDK 发布的从 MIPI sensor 采集图像后经过 JPEG 格式编码的图片, /ai_msg_parking_perception 是 RDK 发布的包含车位检测信息的算法 msg, /cmd_vel 是 RDK 发布的运动控制指令。