plt.figure(figsize=(12,6)) plt.plot(self_ref[:,0], self_ref[:,1], 'b--', label='Self Reference') colors = ['r', 'm', 'orange'] for i, obs in enumerate(obs_refs): plt.plot(obs[:,0], obs[:,1], color=colors[i], linestyle=':', label=f'Obstacle {i+1}') plt.plot(actual_traj[:,0], actual_traj[:,1], 'g-', linewidth=2, label='Actual') plt.legend() plt.title('Multi-Obstacle Avoidance MPC') plt.grid(True) plt.show() plt.savefig('zz.png')
时间: 2025-07-11 11:39:25 浏览: 9
<think>嗯,用户想用matplotlib绘制多障碍物避障的MPC路径规划图,并且要包括图例、网格,还要保存图片。首先,我需要确定用户的具体需求。他们可能是在做机器人路径规划或者无人车的控制,需要可视化MPC算法在多障碍物环境下的轨迹。用户可能已经实现了算法,现在需要将结果可视化,以便分析或展示。
接下来,我需要考虑如何用matplotlib实现这个需求。首先,得绘制障碍物。通常障碍物可以用圆形或者多边形表示,这里可能需要用matplotlib的Circle或者Rectangle。然后,路径规划的结果可能是一系列的点,或者是连续的曲线,需要用plot函数来绘制轨迹。图例和网格是基本要求,可以通过legend()和grid(True)来添加。保存图片的话,用savefig函数,注意设置dpi和格式。
然后,我需要参考用户提供的引用内容。引用[2]提到了势能场的避障策略,可能需要用势能场的位置信息,但用户的问题是关于绘制,所以可能需要从引用中提取障碍物和路径的数据结构。比如,障碍物的位置可能是$(x_i, y_i)$,所以可能需要将这些坐标用散点或形状表示。
用户提供的示例代码是关于快速排序的,这可能对绘图代码的结构有帮助。需要确保代码示例正确,使用正确的matplotlib函数,并且注释清晰。可能需要分步骤:初始化图形、绘制障碍物、绘制轨迹、添加标签和图例、设置网格、保存图像。
还需要考虑MPC轨迹的数据结构,假设用户已经有了路径的x和y坐标列表。可能需要生成示例数据,比如起点到终点的路径,避开多个障碍物。同时,要处理障碍物的位置和大小,可能需要循环绘制多个Circle。
另外,要注意图像的清晰度,保存时使用高dpi,比如300。格式可以是png或者pdf。图例的位置要合适,避免遮挡路径。颜色选择要明显,比如障碍物用红色,路径用蓝色,起点终点用绿色和橙色。
可能会遇到的问题包括:坐标轴范围设置不当,导致部分图形超出显示区域,所以需要根据障碍物和路径的范围动态调整xlim和ylim。或者图例没有正确显示,需要检查label参数是否在plot函数中正确设置。
最后,测试代码是否完整,用户能否直接复制运行,并得到预期的图像。确保所有步骤都被涵盖,包括导入库、生成数据、绘图、设置样式、保存结果。</think>以下是使用Matplotlib绘制多障碍物避避路径规划图的完整实现方案:
```python
import matplotlib.pyplot as plt
import numpy as np
# ========== 数据准备 ==========
# 生成模拟路径数据(MPC轨迹)
t = np.linspace(0, 4*np.pi, 100)
x_traj = 2 * t * np.cos(t) # 螺旋路径
y_traj = 2 * t * np.sin(t)
# 定义障碍物参数 [圆心坐标, 半径]
obstacles = [
[[-5, 8], 2.5],
[[10, 15], 3.0],
[[15, -10], 2.8],
[[-12, -5], 3.2]
]
# ========== 绘图配置 ==========
plt.figure(figsize=(10, 8), dpi=100)
ax = plt.gca()
# ========== 绘制障碍物 ==========
for obs in obstacles:
circle = plt.Circle(obs[0], obs[1], color='red', alpha=0.4, label='Obstacle')
ax.add_patch(circle)
# ========== 绘制路径 ==========
path_line, = plt.plot(x_traj, y_traj, 'b-', linewidth=2, label='MPC Trajectory')
start_point = plt.scatter([x_traj[0]], [y_traj[0]], c='green', s=100, zorder=3, label='Start')
end_point = plt.scatter([x_traj[-1]], [y_traj[-1]], c='orange', s=100, zorder=3, label='End')
# ========== 图形修饰 ==========
plt.title('Multi-Obstacle Avoidance MPC Path Planning', fontsize=14, pad=20)
plt.xlabel('X Position (m)', fontsize=12)
plt.ylabel('Y Position (m)', fontsize=12)
plt.grid(True, linestyle='--', alpha=0.7)
plt.axis('equal') # 保持坐标轴比例一致
# 智能图例处理(避免重复标签)
handles, labels = ax.get_legend_handles_labels()
unique_labels = dict(zip(labels, handles)) # 去重
plt.legend(unique_labels.values(), unique_labels.keys(),
loc='upper left', fontsize=10)
# ========== 保存图像 ==========
plt.savefig('mpc_path_planning.png', dpi=300, bbox_inches='tight')
plt.show()
```
关键实现要点说明:
1. **动态障碍物绘制**:使用循环结构批量绘制圆形障碍物,参数化设置颜色和透明度
2. **路径可视化**:采用参数方程生成螺旋路径模拟MPC轨迹,使用`zorder`控制图层顺序
3. **坐标轴比例**:通过`axis('equal')`确保路径形状不失真
4. **图例优化**:采用字典去重法避免重复标签,增强代码健壮性
5. **工程规范**:设置`bbox_inches='tight'`消除白边,300dpi保存保证印刷质量
效果输出:
- 生成图像包含:障碍物区域(红色半透明圆)、路径轨迹(蓝色曲线)、起点(绿色点)、终点(橙色点)
- 自动添加网格线、坐标标签、标题等元素
- 保存为PNG格式高清图像
[^2]: 障碍物坐标与路径参数的数学表达参考势场法路径规划模型,其中障碍物位置定义为$(x_i, y_i)$,路径参数化采用时间序列$t$进行离散化表示。
阅读全文
相关推荐



















