矩形对矩形避障
在轨迹规划中, 矩形常用来表示车辆、机器人等移动实体的边界框. 矩形对矩形的避障功能可以实现两个矩形之间的避障约束, 以确保两个矩形不会发生碰撞.
建模
下面为矩形对矩形的避障不等式约束的例子:
rect2rect_ineq = rectangle_to_rectangle_inequality(
x_a, y_a, phi_a, width_a, length_a,
x_b, y_b, phi_b, width_b, length_b,
distance_to_avoid,
center_point_avoidance
)
prob.inequality(rect2rect_ineq)
其中, rectangle_to_rectangle_inequality接口的入参如下:
x_a,y_a,phi_a: 矩形a的中心坐标和朝向 (逆时针为正)width_a,length_a: 矩形a的宽度和长度x_b,y_b,phi_b: 矩形b的中心坐标和朝向 (逆时针为正)width_b,length_b: 矩形b的宽度和长度distance_to_avoid: 避障距离center_point_avoidance: 是否对矩形的中心点进行避障 (默认为True, 即对中心点进行避障). 当为True时, 会增加矩形a的中心点对矩阵b的避障约束与矩形b的中心点对矩形a的避障约束, 避障距离分别为distance_to_avoid + min(width_a, length_a) / 2(即矩形a的中心点与矩形b之间的距离需要大于避障距离加上矩形a的半宽度或半长度) 与distance_to_avoid + min(width_b, length_b) / 2

信息
rectangle_to_rectangle_inequality接口的入参 (x_a, y_a, phi_a, width_a, length_a, x_b, y_b, phi_b, width_b, length_b, distance_to_avoid)可以为常数, 关于参数的表达式, 或者关于优化变量的表达式.
注意
rectangle_to_rectangle_inequality的原理为构建8个point_to_rectangle_inequality约束, 其中4个约束为矩形a的四个角点对矩形b的避障约束, 4个约束为矩形b的四个角点对矩形a的避障约束- 该约束不能处理矩形a与矩形b重叠且各自的四个角点在对方矩形外部的情况 (例如十字交叉的情况), 可以通过设置
center_point_avoidance为True添加中心点的point_to_rectangle约束来减少这种情况的发生, 或者可以自行添加其他点处的point_to_rectangle约束来处理这种情况
效果
下面为利用矩形对矩形的避障功能实现的车辆避障轨迹规划的问题设定:
- 车辆起始位姿为0, 目标为跟踪x轴 (横轴)的参考线并且避开两个其他车辆
- 车辆的优化轨迹为100个stage, 每个stage, 即每个时间点处的车辆都与两个其他车辆进行避障, 避障距离为0.2 m
注意, 其他车辆在不同时间点处的位置可以不同, 即可处理车辆间的动态避障问题.
下面为不同初始解下的轨迹规划效果图:
- 初始解在上方
- 初始解在中间
- 初始解在下方
初始解:
最优轨迹:

初始解:
最优轨迹:

初始解:
最优轨迹 (受最大转角约束限制, 求解器返回solve_status = 3的不可行标志位与最小约束违反解):
