@TaigoVan
Matplotlib ist dazu gedacht Daten grafisch darzustellen. Natürlich kannst du damit auch die TCP Koordinaten deines Roboters darstellen.
Du hast ja auch schon eine Menge von Punkten im Raum angezeigt bekommen.
Ich möchte den erreichbaren/nicht erreichbaren Bereich durch das Bild anzeigen
Wie genau? bei dir werden die Punkte ja in verschiedenen Farben dargestellt. Du kannst also die erreichbaren Punkte grün färben und die nicht erreichbaren rot.
Falls du das nicht mit den Farben möchtest must du genau sagen was du haben möchtest.
Wie willst du den erreichbaren Bereich anzeigen lassen? Sollen Ebenen anzeigen wo der Bereich aufhört? ... ?
Vielleicht so?
Das ist ein sehr einfaches Beispiel wobei ein Würfelförmiger Arbeitsraum für den Roboter dargestellt wird.
Es Werden 10 Bahnpunkte des TCPs dargestellt.
(Abgewandelte Version von diesem Post:
viewtopic.php?f=1&t=32766#p249229)
Code: Alles auswählen
from mpl_toolkits.mplot3d import *
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cm
fig = plt.figure()
ax = fig.gca(projection="3d")
x_surf = np.arange(-1, 2, 1)
y_surf = np.arange(-1, 2, 1)
x_surf, y_surf = np.meshgrid(x_surf, y_surf)
z_surf = np.zeros(x_surf.shape)+1
ax.plot_surface(x_surf, y_surf, z_surf, color="gray", alpha=0.5)
z_surf = np.zeros(x_surf.shape)-1
ax.plot_surface(x_surf, y_surf, z_surf, color="gray", alpha=0.5)
x_surf = np.arange(-1, 2, 1)
z_surf = np.arange(-1, 2, 1)
x_surf, z_surf = np.meshgrid(x_surf, z_surf)
y_surf = np.zeros(y_surf.shape)+1
ax.plot_surface(x_surf, y_surf, z_surf, color="gray", alpha=0.5)
y_surf = np.zeros(y_surf.shape)-1
ax.plot_surface(x_surf, y_surf, z_surf, color="gray", alpha=0.5)
y_surf = np.arange(-1, 2, 1)
z_surf = np.arange(-1, 2, 1)
y_surf, z_surf = np.meshgrid(y_surf, z_surf)
x_surf = np.zeros(x_surf.shape)+1
ax.plot_surface(x_surf, y_surf, z_surf, color="gray", alpha=0.5)
x_surf = np.zeros(x_surf.shape)-1
ax.plot_surface(x_surf, y_surf, z_surf, color="gray", alpha=0.5)
pointsx = np.linspace(0, 1.5, 10)
pointsy = np.linspace(0, 1.5, 10)
pointsz = np.linspace(0, 1.5, 10)
ax.scatter(pointsx, pointsy, pointsz, color="black")
ax.set_xlabel("x label")
ax.set_ylabel("y label")
ax.set_zlabel("z label")
plt.show()
Alternativ könnte dir Blender helfen.
https://www.blender.org/
Blender ist ein OpenSource Software zum Modellieren von 3D Modellen.
Blender hat nicht nur eine grafische Benutzeroberfläche, sondern auch eine Python - API Modelle programmatisch zu erstellen.
Mit was für einem Roboter arbeitest du denn?
Vielleicht ist ein Softwaretool für die Programmierung für Industrieroboter auch hilfreich.
Zum Beispiel RoboDK hat eine grafische Benutzeroberfläche und zusätzlich ein Python API:
https://robodk.com/simulation
https://robodk.com/doc/en/PythonAPI/index.html