一句话结论:

 

绝大多数工业机器人、机械臂、运动控制里的XYZ坐标:优先用 float(单精度);只有高精度场景才上 double(双精度)。

 

1. 为什么大量机器人XYZ用 float(单精度 32bit)

 

- float 有效数字6~7位十进制。

机器人坐标单位一般是 mm(毫米):

 float  可以表达: 12345.67 mm ,足够到 0.01mm级别,绝大多数机械臂、移动机器人定位精度需求完全够用。

- 内存小:4字节一个坐标点。XYZ三个数才12字节;如果double要24字节。轨迹点、点云、路径点一多,内存差距会放大。

- 嵌入式运动控制器(MCU、DSP)很多FPU硬件对float运算更快。

- 机器人传感器:IMU、激光雷达、里程计原始数据本身精度就有限,传感器噪声远大于float本身的浮点误差,用double属于“浪费算力”。

 

例子:AGV小车、六轴工业机械臂、普通协作机器人、SLAM机器人的位姿  (x,y,z,roll,pitch,yaw) ,很多都是float。

 

2. 什么时候XYZ坐标必须用 double(双精度)

 

满足下面任意一种场景,选double:

 

1. 大尺度空间:比如大型龙门机床、大型测绘机器人,工作空间几十米、上百米。

单位米,距离很大时,float的有效位数会不够,误差被放大。

float 7位有效数字:100米尺度,最小分辨大概0.01米;想要微米级就不够。

2. 高精度加工:CNC、精密机床、激光切割、高精度检测机器人,要求微米级精度。

3. 矩阵运算、逆运动学求解:大量矩阵连乘、迭代求解,多次运算误差累积,double可以抑制累积误差。

4. 仿真软件(ROS的仿真、Webots、Gazebo、动力学仿真):仿真计算大量迭代,普遍用double。

 

例子:大型龙门机器人、精密测量机器人、动力学仿真环境 → double。

 

3. 一个非常常见的坑(C语言写机器人代码要注意)

 

哪怕变量存成 float x,y,z; ,中间计算(矩阵、三角函数、sin/cos)C标准库函数默认是double。

也就是:计算的时候自动提升到double运算,算完再转回float保存。

好处:中间计算精度高;坏处:少量隐式转换开销,一般可以忽略。

 

4. ROS里面的习惯(可以参考)

 

- ROS1/ROS2 消息: geometry_msgs/Point ,内部是 double x,y,z

 

✅ 注意:ROS消息定义用double,不是因为必须超高精度,是为了统一接口,兼容所有场景;但你自己写控制器底层算法,可以仍然用float来做实时控制,节省资源。

 

快速选型口诀

 

- 小型机械臂、AGV、室内移动机器人,工作范围几米内,精度要求0.01mm级别:float

- 大行程、精密加工、测绘、动力学仿真、矩阵迭代计算多:double

 

 

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐