update 重新规划架构,绘制机械臂夹爪轨迹图

This commit is contained in:
FrankCV2048
2024-11-27 22:42:45 +08:00
parent 29d004221f
commit bde241574c
2 changed files with 93 additions and 58 deletions

View File

@ -39,26 +39,57 @@ class FeedPosition:
class FeedLine: class FeedLine:
def __init__(self, id, name, feed_positions:list): def __init__(self, id, name, feed_positions:list):
self.feed_positions = feed_positions self.feed_positions = feed_positions
self.pos_index = 0 self.feeding2end_pos_index = 0
self.origin2start_pos_index = 0
self.start2take_pos_index = 0
self.name = name self.name = name
self.id = id self.id = id
self.get_position_list()
def get_current_position(self): def get_current_position(self):
pos = self.feed_positions[self.pos_index] pos = self.feeding_to_end[self.feeding2end_pos_index]
return pos return pos
def get_next_position(self): def get_next_feed_position(self):
pos = self.feed_positions[self.pos_index] pos = self.feeding_to_end[self.feeding2end_pos_index]
self.pos_index += 1 self.feeding2end_pos_index += 1
return pos return pos
def get_next_start_position(self):
pos = self.origin2start_pos_index[self.origin2start_pos_index]
self.origin2start_pos_index += 1
return pos
def get_next_take_position(self):
pos = self.start2take_pos_index[self.start2take_pos_index]
self.start2take_pos_index += 1
return pos
def get_take_position(self): def get_take_position(self):
for i in range(len(self.feed_positions)): for i in range(len(self.feeding_to_end)):
if self.feed_positions[i].status == FeedStatus.FTake: if self.feeding_to_end[i].status == FeedStatus.FTake:
return self.feed_positions[i] return self.feeding_to_end[i]
def set_take_position(self,position:Real_Position): def set_take_position(self,position:Real_Position):
for i in range(len(self.feeding_to_end)):
if self.feeding_to_end[i].status == FeedStatus.FTake:
self.feeding_to_end[i].position = position
def get_position_list(self):
index_start = -1
for i in range(len(self.feed_positions)):
if self.feed_positions[i].status == FeedStatus.FStart:
index_start = i
break
for i in range(len(self.feed_positions)): for i in range(len(self.feed_positions)):
if self.feed_positions[i].status == FeedStatus.FTake: if self.feed_positions[i].status == FeedStatus.FTake:
self.feed_positions[i].position = position index_take = i
self.origin_to_start = self.feed_positions[: index_start+1]
self.start_to_take = self.feed_positions[index_start:index_take+1]
self.feeding_to_end = self.feed_positions[index_take:]
class FeedingConfig: class FeedingConfig:
def __init__(self, num: int, feedLine: FeedLine, photo_locs): def __init__(self, num: int, feedLine: FeedLine, photo_locs):
@ -310,6 +341,7 @@ class Feeding:
self.robotClient.add_sendQuene(request_command) self.robotClient.add_sendQuene(request_command)
pass pass
def
def next_target(self): def next_target(self):
feed_pos = self.feedConfig.feedLine.get_next_position() feed_pos = self.feedConfig.feedLine.get_next_position()
self.feedStatus = feed_pos.status self.feedStatus = feed_pos.status

View File

@ -1,61 +1,64 @@
from PySide6.QtWidgets import ( from PySide6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget
QApplication, QWidget, QHBoxLayout, QVBoxLayout, QPushButton, from PySide6.QtDataVisualization import Q3DScatter, QScatter3DSeries, Q3DTheme,Q3DCamera,QScatterDataItem
QLineEdit, QLabel, QGroupBox, QSpacerItem, QSizePolicy from PySide6.QtGui import QVector3D, Qt
)
from PySide6.QtGui import QIcon
from PySide6.QtCore import Qt
class OptimizedUI(QWidget): import sys
class Scatter3DWindow(QMainWindow):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
self.setWindowTitle("3D 轨迹点图")
self.setWindowTitle("UI Optimization") # 创建 3D Scatter 图
self.setFixedSize(600, 150) self.graph = Q3DScatter()
self.init_ui() self.graph.activeTheme().setType(Q3DTheme.Theme.ThemeEbony) # 设置主题
self.graph.scene().activeCamera().setCameraPreset(Q3DCamera.CameraPreset.CameraPresetFront) # 修正属性名
def init_ui(self): # 创建容器
# 主布局 container = QWidget.createWindowContainer(self.graph)
main_layout = QHBoxLayout(self) container.setMinimumSize(800, 600)
main_layout.setSpacing(10)
# 1. 坐标输入框组 # 设置布局
coord_group = QGroupBox("坐标") widget = QWidget()
coord_layout = QVBoxLayout() layout = QVBoxLayout(widget)
for _ in range(2): # 两行坐标输入 layout.addWidget(container)
row_layout = QHBoxLayout() self.setCentralWidget(widget)
for label in ["x", "y", "z"]:
row_layout.addWidget(QLineEdit(), 1)
coord_layout.addLayout(row_layout)
coord_group.setLayout(coord_layout)
# 2. 功能按钮组 # 添加数据
button_layout = QVBoxLayout() self.add_data()
get_btn = QPushButton("获取位置")
save_btn = QPushButton("保存位置")
for btn in [get_btn, save_btn]:
btn.setStyleSheet("background-color: #a8e6cf; border-radius: 5px;")
button_layout.addWidget(btn)
# 3. 右侧操作按钮 def add_data(self):
add_point_btn = QPushButton("添加中间点") # 创建轨迹点数据
add_point_btn.setIcon(QIcon.fromTheme("list-add")) series = QScatter3DSeries()
add_point_btn.setStyleSheet("background-color: #61c0bf; border-radius: 5px; color: white;") series.setItemSize(0.2) # 点的大小
dropdown_btn = QPushButton("") data = []
dropdown_btn.setFixedWidth(30) data.append(QScatterDataItem(QVector3D(0.5, 0.5, 0.5)))
data.append(QScatterDataItem(QVector3D(-0.3, -0.5, -0.4)))
data.append(QScatterDataItem(QVector3D(0.0, -0.3, 0.2)))
series.dataProxy().addItems(data)
right_layout = QHBoxLayout() # 添加到图表
right_layout.addWidget(add_point_btn) self.graph.addSeries(series)
right_layout.addWidget(dropdown_btn)
# 添加控件到主布局 if __name__ == "__main__":
main_layout.addWidget(QPushButton("破碎点"), 1)
main_layout.addWidget(coord_group, 3)
main_layout.addLayout(button_layout, 2)
main_layout.addLayout(right_layout, 2)
if __name__ == "__main__":
import sys
app = QApplication(sys.argv) app = QApplication(sys.argv)
window = OptimizedUI() scatter = Q3DScatter()
window.show() scatter.setFlags(scatter.flags())
series = QScatter3DSeries()
data = []
data.append(QScatterDataItem(QVector3D(0.5, 0.5, 0.5)))
data.append(QScatterDataItem(QVector3D(-0.3, -0.5, -0.4)))
data.append(QScatterDataItem(QVector3D(0.0, -0.3, 0.2)))
series.dataProxy().addItems(data)
scatter.addSeries(series)
# 调整相机位置,更好的角度来观察散点
camera = scatter.scene().activeCamera()
camera.setCameraPreset(Q3DCamera.CameraPreset.CameraPresetFront)
scatter.setTitle('实战 Qt for Python: 3D散点图演示')
scatter.resize(480, 360)
scatter.show()
sys.exit(app.exec()) sys.exit(app.exec())