add collision detection

This commit is contained in:
LiuzhengSJ
2026-07-13 15:05:34 +01:00
parent 58e84c6a33
commit 4add432f53
3 changed files with 10705 additions and 10625 deletions

View File

@ -0,0 +1,80 @@
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# --------------------------------------------------
# 1. Load the data
# --------------------------------------------------
csv_path = Path("workspace_nocollisiondetection.csv")
# The file has no column names, so header=None is important.
df = pd.read_csv(
csv_path,
header=None,
names=["x", "y", "z", "ik_rate"],
)
print(df.head())
print("z planes:", np.sort(df["z"].unique()))
# --------------------------------------------------
# 2. Create an output directory
# --------------------------------------------------
output_dir = Path("contour_plots")
output_dir.mkdir(exist_ok=True)
# --------------------------------------------------
# 3. Use the same colour scale for every z-plane
# --------------------------------------------------
value_min = df["ik_rate"].min()
value_max = df["ik_rate"].max()
# More levels give a smoother-looking contour plot.
levels = np.linspace(value_min, value_max, 51)
# --------------------------------------------------
# 4. Draw one contour plot for each z-plane
# --------------------------------------------------
for z_value, plane in df.groupby("z", sort=True):
# Rows become y-coordinates, columns become x-coordinates.
grid = plane.pivot(index="y", columns="x", values="ik_rate")
x = grid.columns.to_numpy()
y = grid.index.to_numpy()
ik_grid = grid.to_numpy()
X, Y = np.meshgrid(x, y)
fig, ax = plt.subplots(figsize=(7, 6))
contour = ax.contourf(
X,
Y,
ik_grid,
levels=levels,
cmap="viridis",
extend="both",
)
colorbar = fig.colorbar(contour, ax=ax)
colorbar.set_label("IK rate")
ax.set_title(f"IK rate at z = {z_value:.2f}")
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_aspect("equal")
fig.tight_layout()
output_path = output_dir / f"ik_contour_z_{z_value:.2f}.png"
fig.savefig(output_path, dpi=200, bbox_inches="tight")
plt.close(fig)
print(f"Plots saved to: {output_dir.resolve()}")