# MATLAB避障算法用atan导致角度象限错误

> 原文链接：https://robotics.hellobike.com/pitfalls/2016-06-01-robotics-se-9770
> 频道：pitfalls | 更新日期：2016-06-01 | 标签：auto, stackexchange, mobile-robot, kinematics, matlab, geometry
> 核心摘要：MATLAB复现移动机器人避障算法时角度计算异常，采纳建议为用atan2替换atan保留象限信息。

# MATLAB避障算法用atan导致角度象限错误

::: v-pre
> 本文由 AI 根据公开内容整理，可能有误，请以原文为准：[Mobile robot algorithm implementation error](https://robotics.stackexchange.com/questions/9770/mobile-robot-algorithm-implementation-error)（Robotics Stack Exchange #9770）

**状态**：已解决

## 问题

在MATLAB中复现移动机器人避障论文并计划上真机，算法涉及圆形障碍物、锥形视野和滑模控制具体报错。回答指出可能因`atan`计算角度丢失象限信息，导致角度错误。

## 环境

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

## 解决办法

1. 检查代码中未解释变量和硬编码值，如`tk`、`kt`，避免把应由程序选择的值固定为`2`。
2. 在`ApplyRule10`函数的辅助角计算处，将`atan(vr_t(2)/vr_t(1))`、`atan(aux_1(2)/aux_1(1))`、`atan(aux_2(2)/aux_2(1))`改为对应的`atan2(y,x)`形式。
3. 原因是`atan(y/x)`会把`(-y)/x`和`y/(-x)`都算成同一符号，丢失象限信息；`atan2`可正确处理`y`和`x`的符号。

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

## 原始参考来源 (Sources)

- [Robotics Stack Exchange #9770：Mobile robot algorithm implementation error](https://robotics.stackexchange.com/questions/9770/mobile-robot-algorithm-implementation-error)