# 三组 r-theta 超声读数如何识别直线

> 原文链接：https://robotics.hellobike.com/pitfalls/2017-12-26-robotics-se-12585
> 频道：pitfalls | 更新日期：2017-12-26 | 标签：auto, stackexchange, ultrasonic-sensors, geometry
> 核心摘要：将极坐标超声读数转为笛卡尔坐标，再用线性回归和 R-squared 判断是否成直线。

# 三组 r-theta 超声读数如何识别直线

::: v-pre
> 本文由 AI 根据公开内容整理，可能有误，请以原文为准：[Recognizing a line from three r-theta ultrasonic distance readings?](https://robotics.stackexchange.com/questions/12585/recognizing-a-line-from-three-r-theta-ultrasonic-distance-readings)（Robotics Stack Exchange #12585）

**状态**：已解决

## 问题

提问者希望用三组角度和距离的超声读数判断是否形成直线，以便机器人识别墙面，后续还想识别角落。

## 环境

Linux / ROS 机器人软件与控制通用开发环境

## 解决办法

1. 以机器人为参考坐标系，将每个极坐标读数转换为笛卡尔坐标：`x=Distance cos(Deg)`，`y=Distance sin(Deg)`。
2. 对所有点做线性回归，求直线斜率和截距。
3. 计算 `R-squared` 判断测量点与直线的拟合程度；考虑传感器误差，不要求完全共线。
4. 若拟合不好，可剔除偏离最远的点，或按低 `R-squared` 分组判断是否存在另一面墙。
5. 若只用三点，可用中间点为参考，检查到另外两点的斜率是否完全或近似相反。

原问题作者：Cyclical Obsessive；采纳答案作者：markshancock。原内容依 CC BY-SA 4.0 授权，本页摘要同样依 CC BY-SA 4.0 授权。
:::

## 原始参考来源 (Sources)

- [Robotics Stack Exchange #12585：Recognizing a line from three r-theta ultrasonic distance readings?](https://robotics.stackexchange.com/questions/12585/recognizing-a-line-from-three-r-theta-ultrasonic-distance-readings)