FallenSigh 9c4f48a225 Auto-select gripper state from z coordinate in pose mode
- Add resolve_gripper_from_z(): z>=55 → down (open), z<55 → up (closed),
  overlap range prefers down
- Remove --up flag from pose subparser (fully auto-detected from --z)
- joints mode retains manual --up flag
- Update cached state to match latest run
2026-06-15 21:51:10 +08:00

CRAIC — Camera-Robot AI Control System

本仓库为 中国机器人及人工智能大赛CRAIC机器人任务挑战赛(小型桌面级) 参赛代码。

ESP32-S3 双核摄像头 + ROS 2 键盘遥控 + UDP 实时通讯的一体化机器人控制系统。

赛事

中国机器人及人工智能大赛China Robot and Artificial Intelligence Competition简称 CRAIC)是由 中国人工智能学会CAAI主办的全国性学科竞赛始于 1999 年,已列入全国普通高等学校学科竞赛排行榜教育部 A 类竞赛名单

本仓库参加赛项:机器人任务挑战赛(小型桌面级) — Robot Task Challenge (Small Desktop Level)

项目 信息
大赛名称 中国机器人及人工智能大赛
英文名称 China Robot and Artificial Intelligence Competition (CRAIC)
主办单位 中国人工智能学会 (CAAI)
赛事级别 全国普通高等学校学科竞赛排行榜 / 教育部 A 类
参赛赛项 机器人任务挑战赛(小型桌面级)
官方网站 www.caairobot.com

项目结构

craic/
├── jxbeye/                    # ESP32-S3 摄像头固件 (PlatformIO)
│   ├── src/main.cpp           # 双核并行推流 + AsyncUDP + ESP-NOW
│   ├── platformio.ini         # 构建配置 (ESP32-S3-WROOM-1-N16R8)
│   ├── boards/                # 自定义板级定义
│   ├── lib/FTServo/           # 飞特舵机控制库
│   └── include/ / test/
├── ros2/                      # ROS 2 Humble 键盘遥控
│   └── src/udp_teleop/        # 底盘 + 6轴机械臂 UDP 遥控节点
├── tools/                     # 调试工具
│   └── udp_server.py          # UDP 回显测试服务器
└── .gitignore

硬件

组件 型号
主控 ESP32-S3-WROOM-1-N16R8 (16MB Flash, 8MB PSRAM Octal)
摄像头 OV2640 (XGA 1024×768, JPEG)
舵机 飞特 SCS/STS 系列串行舵机

功能

1. ESP32-S3 固件 (jxbeye/)

  • 双核并行架构Core 0 负责摄像头采集Core 1 负责 WiFi 推流
  • MJPEG 实时推流Web 浏览器直接访问 http://<IP> 查看实时画面
  • AsyncUDP 非阻塞通讯UDP 指令由中断回调处理,不干扰推流
  • ESP-NOW:低延迟点对点通信
  • 在线 WiFi 配置:通过 Web 页面或串口修改 SSID/密码,自动保存到 NVS

2. ROS 2 键盘遥控 (ros2/src/udp_teleop/)

  • 底盘遥控W/S 前进后退、A/D 左右平移、Q/E 旋转(差速驱动)
  • 机械臂遥控6 轴关节角度独立控制,高度升降
  • 多平台键盘后端
    • stdin — Linux/macOS 终端原生输入,零依赖
    • pynput — 跨平台按键监听
    • win_poll — Windows Win32 API 轮询
  • 可配置参数:速度、步长、目标 IP/端口均通过 YAML 配置

3. UDP 通讯协议

所有指令通过 UDP 端口 8888 发送,格式:

# 底盘控制
XYW:<X速度>:<Y速度>:<W角速度>:XZHY\n

# 机械臂控制
JXB:<高度>:<J2>:<J3>:<J4>:<J5>:<J6>:0:0:EZHY\n

# 激光控制
LASERON / LASEROFF

# 串口透传
<any payload ending with ZHY or \n>

快速开始

编译 & 烧录 ESP32 固件

cd jxbeye
pio run -t upload
pio device monitor

首次启动后 ESP32 创建热点 ESP32-S3-Camera(密码 12345678),浏览器访问 http://192.168.4.1

运行 ROS 2 键盘遥控

# 创建环境(首次)
conda create -n ros2_humble -c robostack-staging -c conda-forge ros-humble-desktop
conda install -n ros2_humble -c robostack-staging -c conda-forge colcon-common-extensions
conda run -n ros2_humble pip install pynput

# 构建 & 运行
conda activate ros2_humble
cd ros2
colcon build --symlink-install --packages-select udp_teleop
source install/setup.bash

# 启动键盘遥控(默认目标 192.168.233.67:8888
ros2 run udp_teleop keyboard_control \
    --ros-args --params-file src/udp_teleop/config/params.yaml

测试 UDP 通讯

# 启动回显服务器
python tools/udp_server.py

# 发送测试指令
echo 'XYW:100:0:0:XZHY' | nc -u 127.0.0.1 8888

串口配置 WiFi

在 ESP32 串口监视器中发送:

WIFI:热点名称:密码

设备自动保存配置并重启。

依赖

环境 依赖
ESP32 PlatformIO, Arduino framework, esp32-camera
ROS 2 ROS 2 Humble (Conda robostack), pynput
测试 Python 3, Unix netcat

许可

待定。

Description
No description provided
Readme 6.7 MiB
Languages
Python 56.9%
C++ 40.9%
CMake 1.6%
C 0.3%
Shell 0.2%
Other 0.1%