7144005be2d82300fb136ce015fe5bf04acefa60
主要修改: - 坐标系统: z=0 为顶部改为底部,z 轴朝上 - 高度范围: d1 ∈ [-290, 0] mm (-290=底部, 0=顶部) - Z4 偏移: 80.0 (原 -80.0), Z4_OPEN=55, Z4_CLOSED=-100 - 运动学: 更新 tcp_to_joint4_center 和 forward_kinematics 的 z 坐标变换 - 夹爪逻辑: 更新 resolve_gripper_from_z 的高度判断范围 - 插值优化: 先完成末端运动,再处理 grip/release - 移除所有坐标转换中的负号,统一为正向 z 轴朝上系统
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
Languages
Python
56.9%
C++
40.9%
CMake
1.6%
C
0.3%
Shell
0.2%
Other
0.1%