Добавление робота в robot workbench

Russian forum
Forum rules
Правила форума и полезная информация

ПОЖАЛУЙСТА! Начиная обсуждение, обязательно....
Post Reply
timorterrorem
Posts: 2
Joined: Mon Oct 24, 2022 5:39 pm

Добавление робота в robot workbench

Post by timorterrorem »

доброго времени суток!

Возникла задача добавить своего робота в верстак robot. По умолчанию там есть несколько моделей (см. скриншот) Image, я хочу что бы в этом списке появился и мой робот. Я понимаю, что мне понадобится .wrl файл с моделькой робота и .csv с кинематикой, вопрос в том, куда потом положить эти файлы, что бы freecad их увидел.

Code: Select all

OS: Windows 10 Version 2009
Word size of FreeCAD: 64-bit
Version: 0.20.29177 (Git)
Build type: Release
Branch: releases/FreeCAD-0-20
Hash: 68e337670e227889217652ddac593c93b5e8dc94
Python 3.8.10, Qt 5.15.2, Coin 4.0.1, Vtk 8.2.0, OCC 7.6.2
Locale: Russian/Russia (ru_RU)
User avatar
Evgeniy
Posts: 477
Joined: Thu Jul 15, 2021 6:10 pm

Re: Добавление робота в robot workbench

Post by Evgeniy »

А где вы брали файлы с кинематикой и VRML модель?

Добавить в список можно только изменив C++ исходный код.
https://github.com/FreeCAD/FreeCAD/blob ... tRobot.cpp
Что в принципе, сложно. Но есть другие способы как можно добавить робота в проект.

Я так понимаю скидывать нужно в папку:
\FreeCAD\data\Mod\Robot\Lib\Kuka

Но если просто скинуть файлы в папку вы не сможете добавить робота через меню, скорее всего придется переименовать свои файлы под те что уже имеются.

Второй вариант это добавлять своего робота через консоль. Допустим вы создали файлы kr500_2.wrl и kr500_2.csv в папке:
\FreeCAD\data\Mod\Robot\Lib\Kuka

Тогда после выполнения ниже указанного кода через консоль, робот добавится в проект.

Code: Select all

App.activeDocument().addObject("Robot::RobotObject","Robot")
App.activeDocument().Robot.RobotVrmlFile = App.getResourceDir()+"Mod/Robot/Lib/Kuka/kr500_2.wrl"
App.activeDocument().Robot.RobotKinematicFile = App.getResourceDir()+"Mod/Robot/Lib/Kuka/kr500_2.csv"
App.activeDocument().Robot.Axis2 = -90
App.activeDocument().Robot.Axis3 = 90
App.activeDocument().Robot.Axis5 = 45
App.activeDocument().Robot.Home  = [0.0,-90.0,90.0,0.0,45.0,0.0]
App.ActiveDocument.recompute()
Если не хочется каждый раз водиться с консолью для удобства можно сохранить этот код в виде *.FCMacro макроса в папку FreeCAD_User_Folder\Macro и повесить этот код на кнопку через меню Инструменты -> Настройка...
MyRobot.png
MyRobot.png (46.87 KiB) Viewed 1306 times
Третий вариант самый простой, просто вставить любого робота из имеющихся и в его свойствах вручную поменять VRML и csv файл.
Robot3.png
Robot3.png (11.65 KiB) Viewed 1299 times
User avatar
Evgeniy
Posts: 477
Joined: Thu Jul 15, 2021 6:10 pm

Re: Добавление робота в robot workbench

Post by Evgeniy »

В меню верстака кстати тоже можно вставить. Если открыть верстак Robot и выполнить данный код в консоли:

Code: Select all

from PySide import QtGui

def addRobot1():
   robot = App.activeDocument().addObject("Robot::RobotObject","Robot")
   robot.RobotVrmlFile = App.getResourceDir()+"Mod/Robot/Lib/Kuka/kr500_1.wrl"
   robot.RobotKinematicFile = App.getResourceDir()+"Mod/Robot/Lib/Kuka/kr500_1.csv"
   robot.Axis2 = -90
   robot.Axis3 = 90
   robot.Axis5 = 45
   robot.Home  = [0.0,-90.0,90.0,0.0,45.0,0.0]
   App.ActiveDocument.recompute()   

def addRobot2():
   robot = App.activeDocument().addObject("Robot::RobotObject","Robot")
   robot.RobotVrmlFile = App.getResourceDir()+"Mod/Robot/Lib/Kuka/kr500_1.wrl"
   robot.RobotKinematicFile = App.getResourceDir()+"Mod/Robot/Lib/Kuka/kr500_1.csv"
   robot.Axis2 = -90
   robot.Axis3 = 90
   robot.Axis5 = 45
   robot.Home  = [0.0,-90.0,90.0,0.0,45.0,0.0]
   App.ActiveDocument.recompute()   

def addRobot3():
   robot = App.activeDocument().addObject("Robot::RobotObject","Robot")
   robot.RobotVrmlFile = App.getResourceDir()+"Mod/Robot/Lib/Kuka/kr500_1.wrl"
   robot.RobotKinematicFile = App.getResourceDir()+"Mod/Robot/Lib/Kuka/kr500_1.csv"
   robot.Axis2 = -90
   robot.Axis3 = 90
   robot.Axis5 = 45
   robot.Home  = [0.0,-90.0,90.0,0.0,45.0,0.0]
   App.ActiveDocument.recompute()   

def addRobotToMenu(menuItemText, func):
   mw = FreeCADGui.getMainWindow()
   pathMenu = mw.findChild(QtGui.QMenu, "&Robot")
   robotsMenu = pathMenu.findChild(QtGui.QMenu, "Insert Robots")
   whereInsert = robotsMenu.findChild(QtGui.QAction, "Separator")
   action = QtGui.QAction(robotsMenu)
   action.setText(menuItemText)
   action.setIcon(robotsMenu.actions()[0].icon()) #QtGui.QPixmap('Robot_CreateRobot.svg')
   action.setStatusTip("Add Robot")
   action.triggered.connect(func)
   robotsMenu.insertAction(whereInsert,action)

resDir = App.getResourceDir()
addRobotToMenu("My Robot №1", addRobot1)
addRobotToMenu("My Robot №2", addRobot2)
addRobotToMenu("My Robot №3", addRobot3)
print("ok")
Результат:
InsertRobots.png
InsertRobots.png (66.77 KiB) Viewed 1060 times

При большом желании можно даже создать некоторый "псевдо" верстак, который при выборе определенного нужного верстака будет встраивать свои кнопки в уже существующий верстак. Чтобы не возиться с консолью. Такой механизм реализован в :

https://github.com/dubstar-04/FreeCAD_Path_Sim

Когда пользователь выбирает 'PathWorkbench' этот код оформленный, как внешний верстак встраивает свои инструменты в тело верстака Path.
Post Reply