跳到主要内容

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 发布的运动控制指令。