This commit is contained in:
Kseninia Mikhaylova 2024-10-28 15:19:13 +03:00
parent d7f1edce9c
commit 775395e9ec
8 changed files with 31406 additions and 67 deletions

31327
app.log

File diff suppressed because it is too large Load Diff

View File

@ -85,7 +85,6 @@ class MainContentComponent(QWidget):
def handle_value_change(self, new_value): def handle_value_change(self, new_value):
panels = [ panels = [
self.imitatorPanel, self.imitatorPanel,
self.visPanel,
] ]
for p in panels: for p in panels:
if new_value == "not_connected": if new_value == "not_connected":

View File

@ -32,11 +32,14 @@ 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(1000) # Обновление каждые 100 мс self.timer.start(int(1000/24)) # Обновление каждые 100 мс
def update_image(self): def update_image(self):
(rgb, width, height) = self.get_pybullet_image() res = self.get_pybullet_image()
if not res: return
(rgb, width, height) = res
# logger.info(f"Image size: {width}x{height}, RGB data length: {len(rgb)}") # logger.info(f"Image size: {width}x{height}, RGB data length: {len(rgb)}")
# rgbim = Image.fromarray(rgb) # rgbim = Image.fromarray(rgb)

View File

@ -3,7 +3,6 @@ import sys
import time import time
import argparse import argparse
import threading import threading
import queue
from PyQt5.QtCore import QThread from PyQt5.QtCore import QThread
from PyQt5.QtWidgets import QApplication from PyQt5.QtWidgets import QApplication
@ -16,9 +15,6 @@ class MyApp:
def __init__(self, mode): def __init__(self, mode):
self.mode = mode self.mode = mode
# self.robot_thread = RobotThread()
# self.robot_thread.start()
# self.robot_thread.finished.connect(self.startGui)
self.startRobot() self.startRobot()
self.startGui() self.startGui()
@ -33,7 +29,7 @@ class MyApp:
def startGui(self): def startGui(self):
app = QApplication(sys.argv) app = QApplication(sys.argv)
self.robot_app.q_app = app
mainWindow = MainContentComponent( mainWindow = MainContentComponent(
get_status=self.get_status, get_status=self.get_status,
robotPanel={ robotPanel={
@ -65,7 +61,8 @@ class MyApp:
threading.Thread(target=self.run_robot_arm, daemon=True).start() threading.Thread(target=self.run_robot_arm, daemon=True).start()
def run_robot_arm(self): def run_robot_arm(self):
self.robot_app.start() time.sleep(1)
self.robot_app.start('GUI')
def updateRobot(self, robot): def updateRobot(self, robot):
if robot in self.robots: if robot in self.robots:

View File

@ -27,7 +27,7 @@ class SocketRobotArm:
laser_id = 14 laser_id = 14
filename = "test" filename = "test"
urdf_filename = "sample" urdf_filename = "fanucM16ib"
pass_size = 4 pass_size = 4
Status = Literal["connected", "not_connected", "error"] Status = Literal["connected", "not_connected", "error"]
@ -51,30 +51,40 @@ class SocketRobotArm:
print("exiting") print("exiting")
self.socket.close() self.socket.close()
def start(self): def start(self, type="DIRECT"):
self.run_pybullet() logger.info(type)
self.run_pybullet(type)
def run_pybullet(self): def run_pybullet(self, type="DIRECT"):
self.physics_client = p.connect(p.GUI) self.physics_client = p.connect(getattr(p, type))
p.loadPlugin("eglRendererPlugin") # p.setGravity(0, 0, -9.81, physicsClientId=self.physics_client)
p.setGravity(0, 0, -9.81, physicsClientId=self.physics_client)
p.setAdditionalSearchPath(pybullet_data.getDataPath()) p.setAdditionalSearchPath(pybullet_data.getDataPath())
p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, 0)
p.configureDebugVisualizer(p.COV_ENABLE_GUI, 0) p.configureDebugVisualizer(p.COV_ENABLE_GUI, 0)
urdf_path = os.path.join("urdf", f"{self.urdf_filename}.urdf") threading.Thread(target=self.load_models, daemon=True).start()
if not os.path.exists(urdf_path): threading.Thread(target=self.simulation_loop, daemon=True).start()
raise FileNotFoundError(f"URDF file not found: {urdf_path}")
def load_models(self):
p.loadURDF("plane.urdf") p.loadURDF("plane.urdf")
self.body_id = p.loadURDF(urdf_path, [0, 0, 0], useFixedBase=True)
logger.info(f"Загружена модель {urdf_path}, id: {self.body_id}")
# self.cube_id = p.loadURDF("r2d2.urdf", [0, 0, 1], useFixedBase=0) urdf_path = os.path.join("urdf", f"{self.urdf_filename}.urdf")
self.body_id = p.loadURDF(urdf_path, [0, 0, 0], useFixedBase=True, globalScaling=2)
time.sleep(1)
self.simulation_loop() # Получение AABB
aabb = p.getAABB(self.body_id)
# Вычисление размеров модели
size_x = aabb[1][0] - aabb[0][0] # Длина по оси X
size_y = aabb[1][1] - aabb[0][1] # Длина по оси Y
size_z = aabb[1][2] - aabb[0][2] # Длина по оси Z
print(f"Размеры модели (длина x, длина y, длина z): ({size_x}, {size_y}, {size_z})")
p.configureDebugVisualizer(p.COV_ENABLE_RENDERING, 1)
def simulation_loop(self): def simulation_loop(self):
logger.info(f"Нчат цикл симуляции") logger.info(f"Начат цикл симуляции")
while True: while True:
bodyUniqueId = self.body_id bodyUniqueId = self.body_id
position, orientation = p.getBasePositionAndOrientation(bodyUniqueId) position, orientation = p.getBasePositionAndOrientation(bodyUniqueId)
@ -91,29 +101,32 @@ class SocketRobotArm:
joint_log.append( joint_log.append(
f"Joint {i} - Position: {joint_position}, Velocity: {joint_velocity}" f"Joint {i} - Position: {joint_position}, Velocity: {joint_velocity}"
) )
logger.info("\n".join(joint_log)) # logger.info("\n".join(joint_log))
p.stepSimulation() p.stepSimulation()
if self.q_app: if self.q_app:
logger.info(self.q_app)
self.q_app.processEvents() self.q_app.processEvents()
time.sleep(1 / 24) # 24 кадра в секунду time.sleep(1 / 24) # 24 кадра в секунду
def get_pybullet_image(self): def get_pybullet_image(self):
if self.physics_client is None:
return
width, height, rgb, _, _ = p.getCameraImage( width, height, rgb, _, _ = p.getCameraImage(
width=640, width=640,
height=640, height=640,
viewMatrix=p.computeViewMatrix( # viewMatrix=p.computeViewMatrix(
cameraEyePosition=[2, 2, 2], # cameraEyePosition=[2, 2, 2],
cameraTargetPosition=[0, 0, 0], # cameraTargetPosition=[0, 0, 0],
cameraUpVector=[0, 0, 1], # cameraUpVector=[0, 0, 1],
), # ),
projectionMatrix=p.computeProjectionMatrixFOV( # projectionMatrix=p.computeProjectionMatrixFOV(
fov=60.0, aspect=1.0, nearVal=0.1, farVal=10.0 # fov=60.0, aspect=1.0, nearVal=0.1, farVal=10.0
), # ),
renderer=p.ER_BULLET_HARDWARE_OPENGL, # renderer=p.ER_TINY_RENDERER,
physicsClientId=self.physics_client, # physicsClientId=self.physics_client,
flags=p.ER_NO_SEGMENTATION_MASK,
) )
return (rgb, width, height) return (rgb, width, height)
@ -212,7 +225,7 @@ class SocketRobotArm:
if coordinates is None: if coordinates is None:
return return
for joint_index in range(0, num_joints): for joint_index in range(0, num_joints):
if coordinates[joint_index] is None: if len(coordinates) <= joint_index or coordinates[joint_index] is None:
return return
p.setJointMotorControl2( p.setJointMotorControl2(
bodyUniqueId=self.body_id, bodyUniqueId=self.body_id,

View File

@ -10,7 +10,7 @@ from robot.client_socket import SocketRobotArm
if __name__ == "__main__": if __name__ == "__main__":
robot_arm = SocketRobotArm() robot_arm = SocketRobotArm()
robot_arm.start() robot_arm.start('GUI')
try: try:
while True: while True:
time.sleep(1) # Просто удерживаем основной поток активным time.sleep(1) # Просто удерживаем основной поток активным

View File

@ -9,7 +9,7 @@
<visual> <visual>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_lrmate200ib_support/meshes/lrmate200ib/visual/base_link.stl"/> <mesh filename="../urdf_support/fanuc_lrmate200ib_support/meshes/lrmate200ib/visual/base_link.stl"/>
</geometry> </geometry>
<material name=""> <material name="">
<color rgba="0.96 0.76 0.13 1.0"/> <color rgba="0.96 0.76 0.13 1.0"/>
@ -18,7 +18,7 @@
<collision> <collision>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_lrmate200ib_support/meshes/lrmate200ib/collision/base_link.stl"/> <mesh filename="../urdf_support/fanuc_lrmate200ib_support/meshes/lrmate200ib/collision/base_link.stl"/>
</geometry> </geometry>
</collision> </collision>
</link> </link>
@ -26,7 +26,7 @@
<visual> <visual>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_lrmate200ib_support/meshes/lrmate200ib/visual/link_1.stl"/> <mesh filename="../urdf_support/fanuc_lrmate200ib_support/meshes/lrmate200ib/visual/link_1.stl"/>
</geometry> </geometry>
<material name=""> <material name="">
<color rgba="0.96 0.76 0.13 1.0"/> <color rgba="0.96 0.76 0.13 1.0"/>
@ -35,7 +35,7 @@
<collision> <collision>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_lrmate200ib_support/meshes/lrmate200ib/collision/link_1.stl"/> <mesh filename="../urdf_support/fanuc_lrmate200ib_support/meshes/lrmate200ib/collision/link_1.stl"/>
</geometry> </geometry>
</collision> </collision>
</link> </link>
@ -43,7 +43,7 @@
<visual> <visual>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_lrmate200ib_support/meshes/lrmate200ib/visual/link_2.stl"/> <mesh filename="../urdf_support/fanuc_lrmate200ib_support/meshes/lrmate200ib/visual/link_2.stl"/>
</geometry> </geometry>
<material name=""> <material name="">
<color rgba="0.96 0.76 0.13 1.0"/> <color rgba="0.96 0.76 0.13 1.0"/>
@ -52,7 +52,7 @@
<collision> <collision>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_lrmate200ib_support/meshes/lrmate200ib/collision/link_2.stl"/> <mesh filename="../urdf_support/fanuc_lrmate200ib_support/meshes/lrmate200ib/collision/link_2.stl"/>
</geometry> </geometry>
</collision> </collision>
</link> </link>
@ -60,7 +60,7 @@
<visual> <visual>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_lrmate200ib_support/meshes/lrmate200ib/visual/link_3.stl"/> <mesh filename="../urdf_support/fanuc_lrmate200ib_support/meshes/lrmate200ib/visual/link_3.stl"/>
</geometry> </geometry>
<material name=""> <material name="">
<color rgba="0.96 0.76 0.13 1.0"/> <color rgba="0.96 0.76 0.13 1.0"/>
@ -69,7 +69,7 @@
<collision> <collision>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_lrmate200ib_support/meshes/lrmate200ib/collision/link_3.stl"/> <mesh filename="../urdf_support/fanuc_lrmate200ib_support/meshes/lrmate200ib/collision/link_3.stl"/>
</geometry> </geometry>
</collision> </collision>
</link> </link>
@ -77,7 +77,7 @@
<visual> <visual>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_lrmate200ib_support/meshes/lrmate200ib/visual/link_4.stl"/> <mesh filename="../urdf_support/fanuc_lrmate200ib_support/meshes/lrmate200ib/visual/link_4.stl"/>
</geometry> </geometry>
<material name=""> <material name="">
<color rgba="0.96 0.76 0.13 1.0"/> <color rgba="0.96 0.76 0.13 1.0"/>
@ -86,7 +86,7 @@
<collision> <collision>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_lrmate200ib_support/meshes/lrmate200ib/collision/link_4.stl"/> <mesh filename="../urdf_support/fanuc_lrmate200ib_support/meshes/lrmate200ib/collision/link_4.stl"/>
</geometry> </geometry>
</collision> </collision>
</link> </link>
@ -94,7 +94,7 @@
<visual> <visual>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_lrmate200ib_support/meshes/lrmate200ib/visual/link_5.stl"/> <mesh filename="../urdf_support/fanuc_lrmate200ib_support/meshes/lrmate200ib/visual/link_5.stl"/>
</geometry> </geometry>
<material name=""> <material name="">
<color rgba="0.96 0.76 0.13 1.0"/> <color rgba="0.96 0.76 0.13 1.0"/>
@ -103,7 +103,7 @@
<collision> <collision>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_lrmate200ib_support/meshes/lrmate200ib/collision/link_5.stl"/> <mesh filename="../urdf_support/fanuc_lrmate200ib_support/meshes/lrmate200ib/collision/link_5.stl"/>
</geometry> </geometry>
</collision> </collision>
</link> </link>
@ -111,7 +111,7 @@
<visual> <visual>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_lrmate200ib_support/meshes/lrmate200ib/visual/link_6.stl"/> <mesh filename="../urdf_support/fanuc_lrmate200ib_support/meshes/lrmate200ib/visual/link_6.stl"/>
</geometry> </geometry>
<material name=""> <material name="">
<color rgba="0.15 0.15 0.15 1.0"/> <color rgba="0.15 0.15 0.15 1.0"/>
@ -120,7 +120,7 @@
<collision> <collision>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_lrmate200ib_support/meshes/lrmate200ib/collision/link_6.stl"/> <mesh filename="../urdf_support/fanuc_lrmate200ib_support/meshes/lrmate200ib/collision/link_6.stl"/>
</geometry> </geometry>
</collision> </collision>
</link> </link>

View File

@ -8,7 +8,7 @@
<visual> <visual>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_m16ib_support/meshes/m16ib20/visual/base_link.stl"/> <mesh filename="../urdf_support/fanuc_m16ib_support/meshes/m16ib20/visual/base_link.stl"/>
</geometry> </geometry>
<material name=""> <material name="">
<color rgba="0.96 0.76 0.13 1.0"/> <color rgba="0.96 0.76 0.13 1.0"/>
@ -17,7 +17,7 @@
<collision> <collision>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_m16ib_support/meshes/m16ib20/collision/base_link.stl"/> <mesh filename="../urdf_support/fanuc_m16ib_support/meshes/m16ib20/collision/base_link.stl"/>
</geometry> </geometry>
</collision> </collision>
</link> </link>
@ -25,7 +25,7 @@
<visual> <visual>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_m16ib_support/meshes/m16ib20/visual/link_1.stl"/> <mesh filename="../urdf_support/fanuc_m16ib_support/meshes/m16ib20/visual/link_1.stl"/>
</geometry> </geometry>
<material name=""> <material name="">
<color rgba="0.96 0.76 0.13 1.0"/> <color rgba="0.96 0.76 0.13 1.0"/>
@ -34,7 +34,7 @@
<collision> <collision>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_m16ib_support/meshes/m16ib20/collision/link_1.stl"/> <mesh filename="../urdf_support/fanuc_m16ib_support/meshes/m16ib20/collision/link_1.stl"/>
</geometry> </geometry>
</collision> </collision>
</link> </link>
@ -42,7 +42,7 @@
<visual> <visual>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_m16ib_support/meshes/m16ib20/visual/link_2.stl"/> <mesh filename="../urdf_support/fanuc_m16ib_support/meshes/m16ib20/visual/link_2.stl"/>
</geometry> </geometry>
<material name=""> <material name="">
<color rgba="0.96 0.76 0.13 1.0"/> <color rgba="0.96 0.76 0.13 1.0"/>
@ -51,7 +51,7 @@
<collision> <collision>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_m16ib_support/meshes/m16ib20/collision/link_2.stl"/> <mesh filename="../urdf_support/fanuc_m16ib_support/meshes/m16ib20/collision/link_2.stl"/>
</geometry> </geometry>
</collision> </collision>
</link> </link>
@ -59,7 +59,7 @@
<visual> <visual>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_m16ib_support/meshes/m16ib20/visual/link_3.stl"/> <mesh filename="../urdf_support/fanuc_m16ib_support/meshes/m16ib20/visual/link_3.stl"/>
</geometry> </geometry>
<material name=""> <material name="">
<color rgba="0.96 0.76 0.13 1.0"/> <color rgba="0.96 0.76 0.13 1.0"/>
@ -68,7 +68,7 @@
<collision> <collision>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_m16ib_support/meshes/m16ib20/collision/link_3.stl"/> <mesh filename="../urdf_support/fanuc_m16ib_support/meshes/m16ib20/collision/link_3.stl"/>
</geometry> </geometry>
</collision> </collision>
</link> </link>
@ -76,7 +76,7 @@
<visual> <visual>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_m16ib_support/meshes/m16ib20/visual/link_4.stl"/> <mesh filename="../urdf_support/fanuc_m16ib_support/meshes/m16ib20/visual/link_4.stl"/>
</geometry> </geometry>
<material name=""> <material name="">
<color rgba="0.96 0.76 0.13 1.0"/> <color rgba="0.96 0.76 0.13 1.0"/>
@ -85,7 +85,7 @@
<collision> <collision>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_m16ib_support/meshes/m16ib20/collision/link_4.stl"/> <mesh filename="../urdf_support/fanuc_m16ib_support/meshes/m16ib20/collision/link_4.stl"/>
</geometry> </geometry>
</collision> </collision>
</link> </link>
@ -93,7 +93,7 @@
<visual> <visual>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_m16ib_support/meshes/m16ib20/visual/link_5.stl"/> <mesh filename="../urdf_support/fanuc_m16ib_support/meshes/m16ib20/visual/link_5.stl"/>
</geometry> </geometry>
<material name=""> <material name="">
<color rgba="0.96 0.76 0.13 1.0"/> <color rgba="0.96 0.76 0.13 1.0"/>
@ -102,7 +102,7 @@
<collision> <collision>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_m16ib_support/meshes/m16ib20/collision/link_5.stl"/> <mesh filename="../urdf_support/fanuc_m16ib_support/meshes/m16ib20/collision/link_5.stl"/>
</geometry> </geometry>
</collision> </collision>
</link> </link>
@ -110,7 +110,7 @@
<visual> <visual>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_m16ib_support/meshes/m16ib20/visual/link_6.stl"/> <mesh filename="../urdf_support/fanuc_m16ib_support/meshes/m16ib20/visual/link_6.stl"/>
</geometry> </geometry>
<material name=""> <material name="">
<color rgba="0.15 0.15 0.15 1.0"/> <color rgba="0.15 0.15 0.15 1.0"/>
@ -119,7 +119,7 @@
<collision> <collision>
<origin rpy="0 0 0" xyz="0 0 0"/> <origin rpy="0 0 0" xyz="0 0 0"/>
<geometry> <geometry>
<mesh filename="../fanuc_m16ib_support/meshes/m16ib20/collision/link_6.stl"/> <mesh filename="../urdf_support/fanuc_m16ib_support/meshes/m16ib20/collision/link_6.stl"/>
</geometry> </geometry>
</collision> </collision>
</link> </link>