仿真感知:真值孔位 + 真值相机 + 补 /home,让流程不改代码就能跑仿真
三块补齐,目标是"同一个流程节点,仿真/真机都不改代码":
1. 真值孔位(truth_holes.py):把 scene.yaml 与模型 SDF 里已知的孔几何
直接投影到相机像素坐标,替代 HoughCircles。perception.source 选:
yolo / truth / external —— truth 就走这条路。
为什么不用 Hough:仿真里孔是"方孔 + 贴片亮环"的近似(SDF 没有布尔运算),
靠图像门槛去凑 radus 区间很脆;而孔位本来就是场景里已知量,直接投影
既准又稳,还能当真实检测算法的对照基线。
2. 真值相机(sim_truth_perception.py):同理,直接算物体位姿,供
visual_servo/filtered_point 用,绕开 ONNX。
3. 补 /home 与 set_named_pose 服务(sim_home_service.py):真机上这两个
由 Flexiv 驱动提供,仿真里没有 —— 缺了 S01 直接超时。
4. sim_tactile_adapter 容错导入 ros_gz_interfaces:那一路只是"接触点",
力本身走 geometry_msgs/Wrench。typesupport 加载不了时退化成
contact 恒 False + centroid 恒 0,三力判据(S07 用的)不受影响 ——
宁可用退化模式跑,也不要整个适配器起不来。
5. repo_root 解析(已装包要能找回源码仓库根,见 test_repo_root.py 的用例)
与 use_sim_time 向子 launch 的传递。
另:scripts/gen_sim_handeye.py 把 URDF 真值导出手眼文件(仿真不标定)。
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -45,7 +45,7 @@
|
||||
d405_y:=-0.06
|
||||
d405_z:=0.05
|
||||
d405_roll:=0.0
|
||||
d405_pitch:=0.0
|
||||
d405_pitch:=-1.5708
|
||||
d405_yaw:=0.0
|
||||
image_width:=848
|
||||
image_height:=480
|
||||
@@ -93,13 +93,32 @@
|
||||
<!-- =======================================================================
|
||||
RealSense D405 —— 眼在手上
|
||||
=======================================================================
|
||||
位姿默认值说明(法兰坐标系,z 朝法兰外侧):
|
||||
z=+0.05 相机略微伸出法兰,避免看到夹爪本体
|
||||
y=-0.06 偏置到一侧,与真机上的支架安装位置一致
|
||||
位姿默认值说明(法兰坐标系):
|
||||
xyz: x=0, y=-0.06, z=+0.05
|
||||
z=+0.05 相机略微伸出法兰,避免看到夹爪本体
|
||||
y=-0.06 偏置到一侧,与真机上的支架安装位置一致
|
||||
rpy: roll=0, **pitch=-1.5708(-90°)**, yaw=0
|
||||
这些值**不是**真机的标定结果,只是仿真里的合理起始位。
|
||||
仿真里"手眼关系"本来就精确已知(我们直接定义了相机的安装位姿),
|
||||
所以不需要跑手眼标定 —— 但保留了可调位姿,方便模拟"标定不准"的情况,
|
||||
验证跟踪算法对误差的容忍度。
|
||||
|
||||
⚠️⚠️ pitch 这一项是**必须**的,不是"随手调的角度"。原因在 Gazebo 的
|
||||
相机惯例:**传感器/模型的视轴是 +X**(不是 +Z)。世界相机 d435 就是靠
|
||||
在 world 文件里给它模型 pitch=50° 才瞄准台面的 —— 同一个惯例。
|
||||
腕相机要在法兰垂直朝下时看工件,就得让 d405_link 的 +X 对上法兰的 +Z,
|
||||
即绕 Y 转 -90°。
|
||||
|
||||
为什么"少转这 90°"极难发现(曾经默认 0,踩过):
|
||||
· 话题有数据、预览有图像、camera_info 内参也对;
|
||||
· 深度反投影甚至"通过"了检查 —— 因为它看到的是**远处的地面**,
|
||||
反投影出来同样是 z≈0 的水平面(check_sim_cameras 当时只看
|
||||
"命中不用平面",判据太松,现在已改成核对视轴朝向);
|
||||
· 症状只出现在应用侧:S04 跟踪里真值/检测永远说"目标不在相机前方",
|
||||
伺服一直"寻找工件"原地转圈 —— 看起来像算法或标定问题。
|
||||
所以:改这里之前先想清楚视轴指向,改完跑
|
||||
python3 scripts/check_sim_cameras.py
|
||||
它会核对"腕部相机光学系的视轴是否与法兰 +Z 一致"。
|
||||
======================================================================= -->
|
||||
<xacro:if value="${d405_enable}">
|
||||
<link name="${prefix}d405_link"/>
|
||||
|
||||
Reference in New Issue
Block a user