norm intervals

This commit is contained in:
Kseninia Mikhaylova 2024-10-29 14:52:59 +03:00
parent f5ecc08fde
commit ca0d3c07b8
6 changed files with 59765 additions and 54 deletions

59729
app.log

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,9 @@
X0 Y0 X0 Y0
X0 Y50
X0 Y100
X0 Y150
X0 Y200 X0 Y200
X0 Y150
X0 Y100
X0 Y50
X0 Y0 X0 Y0

View File

@ -39,5 +39,4 @@ class Imitator(QWidget):
self.setPalette(p) self.setPalette(p)
def updateState(self): def updateState(self):
logger.info(f'lalaala {self.imitate_point()}')
self.stepLabel.setText(f"Отправлено шагов {self.imitate_point()}") self.stepLabel.setText(f"Отправлено шагов {self.imitate_point()}")

View File

@ -25,12 +25,13 @@ class Visualize(QWidget):
# Таймер для обновления изображения # Таймер для обновления изображения
self.timer = QTimer() self.timer = QTimer()
self.timer.timeout.connect(self.update_image) self.timer.timeout.connect(self.update_image)
self.timer.start(int(500)) # Обновление каждые 100 мс self.timer.start(30)
def update_image(self): def update_image(self):
res = self.get_pybullet_image() res = self.get_pybullet_image()
if not res: return if not res:
return
(rgb, width, height) = res (rgb, width, height) = res
@ -40,8 +41,7 @@ class Visualize(QWidget):
self.label.setPixmap(pixmap) self.label.setPixmap(pixmap)
self.label.setAlignment(Qt.AlignmentFlag.AlignHCenter) self.label.setAlignment(Qt.AlignmentFlag.AlignHCenter)
self.label.resize(image.size()) self.label.update()
self.label.repaint()
def paintEvent(self, event): def paintEvent(self, event):
p = self.palette() p = self.palette()

View File

@ -65,11 +65,6 @@ class SocketRobotArm:
def run_pybullet(self, type="DIRECT"): def run_pybullet(self, type="DIRECT"):
self.physics_client = p.connect(getattr(p, type)) self.physics_client = p.connect(getattr(p, type))
logger.info(f"Connect to {self.physics_client} by {type}") logger.info(f"Connect to {self.physics_client} by {type}")
p.setGravity(0, 0, -9.81, physicsClientId=self.physics_client)
p.setAdditionalSearchPath(pybullet_data.getDataPath())
p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, 0)
self.simulation_loop()
def load_models(self): def load_models(self):
p.loadURDF("plane.urdf", physicsClientId=self.physics_client) p.loadURDF("plane.urdf", physicsClientId=self.physics_client)
@ -92,36 +87,13 @@ class SocketRobotArm:
f"Размеры модели (длина x, длина y, длина z): ({size_x}, {size_y}, {size_z})" f"Размеры модели (длина x, длина y, длина z): ({size_x}, {size_y}, {size_z})"
) )
def simulation_loop(self):
logger.info(f"Начат цикл симуляции")
while True:
# bodyUniqueId = self.body_id
# position, orientation = p.getBasePositionAndOrientation(bodyUniqueId)
# # logger.info(f"Position: {position}, Orientation: {orientation}")
# # Получение состояния суставов
# num_joints = p.getNumJoints(bodyUniqueId)
# joint_states = p.getJointStates(bodyUniqueId, range(num_joints))
# joint_log = []
# for i, state in enumerate(joint_states):
# joint_position = state[0] # Угол
# joint_velocity = state[1] # Угловая скорость
# joint_log.append(
# f"Joint {i} - Position: {joint_position}, Velocity: {joint_velocity}"
# )
# logger.info("\n".join(joint_log))
p.stepSimulation()
time.sleep(1 / 240)
def get_pybullet_image(self): def get_pybullet_image(self):
if self.physics_client is None: if self.physics_client is None:
return return
width, height, rgb, _, _ = p.getCameraImage( width, height, rgb, _, _ = p.getCameraImage(
width=640, width=300,
height=640, height=300,
viewMatrix=p.computeViewMatrix( viewMatrix=p.computeViewMatrix(
cameraEyePosition=[2, 2, 2], cameraEyePosition=[2, 2, 2],
cameraTargetPosition=[0, 0, 0], cameraTargetPosition=[0, 0, 0],
@ -154,6 +126,9 @@ class SocketRobotArm:
return self.status return self.status
def upd_model(self): def upd_model(self):
threading.Thread(target=self.upd_model_func, daemon=True).start()
def upd_model_func(self):
logger.info("UPDATE") logger.info("UPDATE")
self.get_axis() self.get_axis()
self.set_text(text=f"Координаты осей {self.start_axis_coordinates}") self.set_text(text=f"Координаты осей {self.start_axis_coordinates}")
@ -201,12 +176,15 @@ class SocketRobotArm:
time.sleep(0.05) time.sleep(0.05)
def imitate(self): def imitate(self):
threading.Thread(target=self.imitate_func, daemon=True).start()
def imitate_func(self):
points = self.steps_from_file() points = self.steps_from_file()
for i, p in enumerate(points): for i, point in enumerate(points):
if p["action"] == "10": if point["action"] == "10":
self.imitate_point = i self.imitate_point = i
angles = self.convert_to_joint( angles = self.convert_to_joint(
[float(p) for p in [p["m0"], p["m1"], p["m2"]]] [float(point) for point in [point["m0"], point["m1"], point["m2"]]]
) )
self.set_joint(angles) self.set_joint(angles)
time.sleep(0.5) time.sleep(0.5)

View File

@ -6,32 +6,31 @@ import pybullet as p
import pybullet_data import pybullet_data
def main(type = 'SHARED_MEMORY_SERVER'): def main(type="SHARED_MEMORY_SERVER"):
# Подключаемся к графическому серверу в режиме SHARED_MEMORY_SERVER # Подключаемся к графическому серверу в режиме SHARED_MEMORY_SERVER
# physicsClient = p.connect(p.SHARED_MEMORY_SERVER) # physicsClient = p.connect(p.SHARED_MEMORY_SERVER)
physicsClient = p.connect(getattr(p, type)) physicsClient = p.connect(getattr(p, type))
print(f"start pybullet ph client {physicsClient}") print(f"start pybullet ph client {physicsClient}")
# Настраиваем среду # Настраиваем среду
p.setAdditionalSearchPath(pybullet_data.getDataPath()) p.setAdditionalSearchPath(pybullet_data.getDataPath())
p.setGravity(0, 0, -10) p.setGravity(0, 0, -9.81, physicsClientId=physicsClient)
while True: while True:
# Основной цикл физического движка # Основной цикл физического движка
p.stepSimulation() p.stepSimulation()
time.sleep(1.0 / 240.0) time.sleep(30 * 0.001)
if __name__ == "__main__": if __name__ == "__main__":
# Парсер аргументов командной строки # Парсер аргументов командной строки
parser = argparse.ArgumentParser(description="Запуск PyBullet сервера.") parser = argparse.ArgumentParser(description="Запуск PyBullet сервера.")
parser.add_argument( parser.add_argument(
"--test", "--test", action="store_true", help="Запустить сервер в режиме GUI_SERVER"
action="store_true",
help="Запустить сервер в режиме GUI_SERVER"
) )
args = parser.parse_args() args = parser.parse_args()
# Если передан аргумент --test, устанавливаем тип подключения SHARED_MEMORY_SERVER # Если передан аргумент --test, устанавливаем тип подключения SHARED_MEMORY_SERVER
connection_type = 'GUI_SERVER' if args.test else 'SHARED_MEMORY_SERVER' connection_type = "GUI_SERVER" if args.test else "SHARED_MEMORY_SERVER"
connection_type = "SHARED_MEMORY_SERVER"
main(connection_type) main(connection_type)