260609

我们接下来要进入我们的 04 了,即视觉旗帜检测,我们目前先采用算法来进行检测,针对颜色进行检测就可以了。

对于模型的接入,我们会在算法跑通的基础上,接入模型,既 04B,YOLO 旗帜检测升级。

flowchart TD P00["00 系统基线<br/>源码静态调查与能力边界"] P01["01 SLAM 建图与定位<br/>/scan、/odom、TF、/map"] P02["02 Nav2 导航接入<br/>NavigateToPose 与 costmap"] P03["03 边界探索<br/>frontier 选择与目标切换"] P04["04 视觉旗帜检测<br/>相机、图像 topic、检测事件"] P04B["04B YOLO 旗帜检测升级<br/>模型推理、检测框、backend 切换"] P05["05 旗帜位置估计<br/>camera/base/map 中的位置判断"] P06["06 任务状态机<br/>探索、发现、靠近、停止"] P07["07 集成演示<br/>端到端验证与复盘"] P00 --> P01 --> P02 --> P03 --> P06 --> P07 P00 --> P04 --> P04B --> P05 --> P06 P04B --> P06

我们目前让 AI 完成了 04 部分的文档和代码。

我们 04,包括 04B,目前只会做到对旗帜的图像检测,而不会对旗帜进行实际的定位和导航,实际的定位 + 导航我们会在 05 再去做。

我们先实现所需的消息文件,创建 src/kibot_one_interface/msg/FlagDetection.msg:

std_msgs/Header header
bool detected
float32 center_x
float32 center_y
uint32 image_width
uint32 image_height
uint32 pixel_count
float32 confidence

这个 header 是继续沿用标准消息库中的 Header,方便我们后续接入相机 link 后知道这个图片是从哪个相机传过来的。

然后 detected 是我们给阶段 06 提供的最小状态切换条件。

center_x/center_y负责给我们的阶段 05 留出方向估计的入口。

对于 image_width/image_heigh,便于我们后续的消费者可以把像素进行中心归一化。

最后的 pixel_count/confidence则负责让我们来判断检测的质量。

然后把这个消息注册到 CMake 中,需要添加 find_package(std_msgs REQUIRED)作为所需的依赖,然后把 "msg/FlagDetection.msg" 放到 rosidl_generate_interfaces 中。

除此之外,我们还需要更新一下src/kibot_one_interface/package.xml,把我们标准消息库给加进去:

  <depend>std_msgs</depend>

最后我们看看能不能构建成功:

(.venv) jese--ki@KiBall:~/Projects/dev/KiBots/KiBotTwo$ make build 
colcon build
Starting >>> kibot_one_interface
Starting >>> kibot_one_sim
Finished <<< kibot_one_sim [0.32s]                                                               
Finished <<< kibot_one_interface [1.81s]                   
Starting >>> kibot_one_control
Finished <<< kibot_one_control [1.15s]        

Summary: 3 packages finished [3.11s]

最后成功构建。