master
灵枢 · 会话式像素→3D 精度测试
在电脑上点一下图像,板子自动抓帧、算三维点、跟踪位姿,实时给出目标点的坐标差 Δ。
不再手动 scp 图片、手动回传坐标。
目录
lingshu_session/
├── agents.md # 给 AI/开发者的项目说明与硬性约定
├── README.md
├── client/ # 电脑端(Windows / Linux)
└── server/ # 板子端(Ubuntu 24.04 + ROS2 Jazzy)
快速开始
板子
# 1) pynng
sudo apt install -y python3-venv
python3 -m venv --system-site-packages ~/pynng_venv
~/pynng_venv/bin/pip install pynng
# 2) 把 server/ 下 5 个文件拷到 ~/Workplace/odin_ws/
# wire.py calib.py target_math.py session_server_node.py requirements.txt
# 3) 启动驱动后,启动会话服务
source /opt/ros/jazzy/setup.bash
source ~/Workplace/odin_ws/install/setup.bash
~/pynng_venv/bin/python session_server_node.py --port 5555
# 如果开了防火墙
sudo ufw allow 5555/tcp
电脑
cd client
python -m pip install -r requirements.txt
python session_client.py --board 192.168.43.50
启动后自动抓帧并显示图像。点一个像素,右侧会显示:
p_cam(相机系) : (0.0611, -0.0917, 2.9978)
p_lidar(雷达系): (3.0167, -0.0277, 0.1125)
★ p_map(地图系): (3.0167, -0.0277, 0.1125)
移动板子,界面每 200 ms 刷新:
pos=(+0.9060, -0.0413, +0.0075) yaw=-3.2°
Δ=(+0.2507, -0.0209, +0.0144)
只给坐标,不给距离。
两种计算模式
- 默认
--compute board:板子只回传图像;电脑只发(u,v); 板子用本地点云算p_cam/p_lidar/p_map并记成目标。点云不出板。 --compute pc:板子额外回传同帧点云;电脑本地算,再set_target回传。 适合看候选点、平面拟合细节、离线复盘。
会话
- 一次客户端启动 = 一个会话(uuid +
client_ip+board_ip)。 - 每条请求和应答都带会话信息,板子按会话隔离状态。
- 界面按钮:新会话(换 id 重抓)、重新抓帧(同会话重拍)、清除目标。
常用命令
# 无界面跑一次,看定位结果和 Δ
python session_client.py --board 192.168.43.50 --no-gui --u 800 --v 648 --watch
# 电脑端计算
python session_client.py --board 192.168.43.50 --compute pc --no-gui --u 800 --v 648
# 调候选半径 / 关平面拟合
python session_client.py --board 192.168.43.50 --radius 15 --no-fit
板子端参数:
--image-topic /odin1/image/compressed # 默认,直接转发,不用编码
--no-compressed # 原始图,需要 cv2 或 Pillow
--cloud-topic /odin1/cloud_raw
--odom-topic /odin1/odometry
--index-cell 32 # 投影索引格子大小
--radius 10 # 默认候选半径
测试(不需要 ROS)
cd client
python test_session.py # 协议 / 两种计算模式 / 会话隔离
python _bench_index.py ..\..\acc.npz # 全量投影 vs 像素索引
常见问题
| 现象 | 处理 |
|---|---|
capture 一直失败/超时 |
板子驱动是否在跑;5555 是否放行;/odin1/cloud_raw 是否有数据 |
| 抓到的图像很旧 | capture 的 stamp_delta_ms 是否很大;改用 --no-compressed |
| 点不到点 | 调大 --radius;换平整、点云密的区域;看 multi_layer / plane_used |
Δ 一直不为 0 |
先确认站到了目标点;再查 map 原点胶带、抓帧是否属于本次会话 |
板子端报 target_math.py 缺失 |
server/ 下的 5 个文件没有拷全 |
pynng 装不上 |
用 --system-site-packages 的 venv;或装 cmake/build-essential 从源码编 |
更细的协议、坐标约定、硬性规则见 agents.md。
Languages
Python
100%