完结撒花
This commit is contained in:
parent
559a94c55a
commit
fbc632a324
BIN
.idea/copilot/chatSessions/00000000000.xd
generated
BIN
.idea/copilot/chatSessions/00000000000.xd
generated
Binary file not shown.
BIN
.idea/copilot/chatSessions/blobs/version
generated
BIN
.idea/copilot/chatSessions/blobs/version
generated
Binary file not shown.
2
.idea/graduation_design.iml
generated
2
.idea/graduation_design.iml
generated
@ -5,7 +5,7 @@
|
|||||||
<excludeFolder url="file://$MODULE_DIR$/.idea" />
|
<excludeFolder url="file://$MODULE_DIR$/.idea" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/.venv" />
|
<excludeFolder url="file://$MODULE_DIR$/.venv" />
|
||||||
</content>
|
</content>
|
||||||
<orderEntry type="jdk" jdkName="Python 3.10 (graduation_design)" jdkType="Python SDK" />
|
<orderEntry type="inheritedJdk" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
7
.idea/misc.xml
generated
Normal file
7
.idea/misc.xml
generated
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Black">
|
||||||
|
<option name="sdkName" value="Python 3.10 (graduation_design)" />
|
||||||
|
</component>
|
||||||
|
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (graduation_design)" project-jdk-type="Python SDK" />
|
||||||
|
</project>
|
147
.idea/workspace.xml
generated
147
.idea/workspace.xml
generated
@ -4,31 +4,69 @@
|
|||||||
<option name="autoReloadType" value="SELECTIVE" />
|
<option name="autoReloadType" value="SELECTIVE" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="31e8b3f2-5159-47b8-a798-4b06368c40f5" name="更改" comment="1. 调试了模型预测的输出结果 2. 成功控制机械臂移动">
|
<list default="true" id="31e8b3f2-5159-47b8-a798-4b06368c40f5" name="更改" comment="1.大体实现机械臂跟随物体移动 2.使用线程队列将机器人控制与视觉识别解耦,大大提高了系统的流畅性">
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/copilot/chatSessions/00000000000.xd" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/copilot/chatSessions/00000000000.xd" afterDir="false" />
|
<change afterPath="$PROJECT_DIR$/abandon_code/hand_control.py" afterDir="false" />
|
||||||
|
<change afterPath="$PROJECT_DIR$/abandon_code/img_process/Log/OrbbecSDK.log.txt" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/.idea/copilot/chatSessions/00000000000.xd" beforeDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/.idea/copilot/chatSessions/blobs/version" beforeDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/.idea/graduation_design.iml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/graduation_design.iml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/img_process/ObjectClassify.py" beforeDir="false" afterPath="$PROJECT_DIR$/ObjectClassify.py" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/ObjectClassify.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/ObjectClassify.py" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/img_process/__init__.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/img_process/__init__.py" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/integration_testing/__init__.py" beforeDir="false" afterPath="$PROJECT_DIR$/App.py" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/img_process/orbbec_camera/OrbbecCamera.py" beforeDir="false" afterPath="$PROJECT_DIR$/orbbec_camera/OrbbecCamera.py" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/integration_testing/integration_tests.py" beforeDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/img_process/orbbec_camera/__init__.py" beforeDir="false" afterPath="$PROJECT_DIR$/orbbec_camera/__init__.py" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/img_process/orbbec_camera/utils.py" beforeDir="false" afterPath="$PROJECT_DIR$/orbbec_camera/utils.py" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/img_process/take_photos.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/img_process/take_photos.py" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/img_process/train/package-seg.yaml" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/img_process/train/package-seg.yaml" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/img_process/train/train.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/img_process/train/train.py" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/img_process/train/yolov8n-seg.pt" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/img_process/train/yolov8n-seg.pt" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/img_process/train/yolov8n.pt" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/img_process/train/yolov8n.pt" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/img_process/yolo.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/img_process/yolo.py" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/img_process/yolov8n-seg.pt" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/img_process/yolov8n-seg.pt" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/img_process/yolov8n.pt" beforeDir="false" afterPath="$PROJECT_DIR$/yolov8n.pt" afterDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" />
|
|
||||||
<change beforePath="$PROJECT_DIR$/robot_control/FRRobot.py" beforeDir="false" afterPath="$PROJECT_DIR$/robot_control/FRRobot.py" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/robot_control/FRRobot.py" beforeDir="false" afterPath="$PROJECT_DIR$/robot_control/FRRobot.py" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/robot_control/control.py" beforeDir="false" afterPath="$PROJECT_DIR$/robot_control/control.py" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/robot_control/control.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/control.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/ConveyorTrack.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/ConveyorTrack.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/ConveyorTrackRecord.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/ConveyorTrackRecord.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/ConveyorTrackSet.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/ConveyorTrackSet.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/TrajectoryJ_repetition.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/TrajectoryJ_repetition.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/force_compliance.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/force_compliance.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/force_control.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/force_control.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/force_find_surface_calcenter.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/force_find_surface_calcenter.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/force_guard.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/force_guard.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/force_load_identification.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/force_load_identification.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/force_payload_identify.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/force_payload_identify.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/force_rot_insertion.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/force_rot_insertion.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/force_sensor_set.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/force_sensor_set.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/force_spiral_search.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/force_spiral_search.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/froce_line_insertion.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/froce_line_insertion.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/getDHcomp.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/getDHcomp.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/get_robot_data.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/get_robot_data.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/getversion.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/getversion.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/io_interface.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/io_interface.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/jog.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/jog.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/movec&circle&newspiral.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/movec&circle&newspiral.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/movej&movel&movecart.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/movej&movel&movecart.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/offset.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/offset.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/robot_basic_interface.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/robot_basic_interface.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/robot_common_set.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/robot_common_set.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/robot_external_device.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/robot_external_device.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/robot_log_interface.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/robot_log_interface.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/robot_lua_test.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/robot_lua_test.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/robot_point_table_download.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/robot_point_table_download.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/robot_point_table_switch.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/robot_point_table_switch.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/robot_point_table_upload.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/robot_point_table_upload.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/robot_safety_set.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/robot_safety_set.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/robot_updata_lua.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/robot_updata_lua.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/servo.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/servo.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/spline.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/spline.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/tpd_record.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/tpd_record.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/tpd_repetition.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/tpd_repetition.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/webapp_program_use_interface.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/webapp_program_use_interface.py" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/robot_control/examples/weld.py" beforeDir="false" afterPath="$PROJECT_DIR$/abandon_code/examples/weld.py" afterDir="false" />
|
||||||
</list>
|
</list>
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||||
</component>
|
</component>
|
||||||
|
<component name="FileTemplateManagerImpl">
|
||||||
|
<option name="RECENT_TEMPLATES">
|
||||||
|
<list>
|
||||||
|
<option value="Python Script" />
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
<component name="Git.Settings">
|
<component name="Git.Settings">
|
||||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||||
</component>
|
</component>
|
||||||
@ -44,23 +82,25 @@
|
|||||||
<option name="hideEmptyMiddlePackages" value="true" />
|
<option name="hideEmptyMiddlePackages" value="true" />
|
||||||
<option name="showLibraryContents" value="true" />
|
<option name="showLibraryContents" value="true" />
|
||||||
</component>
|
</component>
|
||||||
<component name="PropertiesComponent"><![CDATA[{
|
<component name="PropertiesComponent">{
|
||||||
"keyToString": {
|
"keyToString": {
|
||||||
"Python.FRRobot.executor": "Run",
|
"Python.App.executor": "Run",
|
||||||
"Python.ObjectClassify.executor": "Run",
|
"Python.FRRobot.executor": "Run",
|
||||||
"Python.control.executor": "Run",
|
"Python.ObjectClassify.executor": "Run",
|
||||||
"RunOnceActivity.OpenProjectViewOnStart": "true",
|
"Python.control.executor": "Run",
|
||||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
"Python.hand_control.executor": "Run",
|
||||||
"last_opened_file_path": "F:/Jetbrains/PyCharm Professional",
|
"RunOnceActivity.OpenProjectViewOnStart": "true",
|
||||||
"node.js.detected.package.eslint": "true",
|
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||||
"node.js.detected.package.tslint": "true",
|
"last_opened_file_path": "C:/Users/SF/Downloads/PathPlanningVisualizer",
|
||||||
"node.js.selected.package.eslint": "(autodetect)",
|
"node.js.detected.package.eslint": "true",
|
||||||
"node.js.selected.package.tslint": "(autodetect)",
|
"node.js.detected.package.tslint": "true",
|
||||||
"nodejs_package_manager_path": "npm",
|
"node.js.selected.package.eslint": "(autodetect)",
|
||||||
"settings.editor.selected.configurable": "settings.saveactions",
|
"node.js.selected.package.tslint": "(autodetect)",
|
||||||
"vue.rearranger.settings.migration": "true"
|
"nodejs_package_manager_path": "npm",
|
||||||
|
"settings.editor.selected.configurable": "com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable",
|
||||||
|
"vue.rearranger.settings.migration": "true"
|
||||||
}
|
}
|
||||||
}]]></component>
|
}</component>
|
||||||
<component name="RecentsManager">
|
<component name="RecentsManager">
|
||||||
<key name="MoveFile.RECENT_KEYS">
|
<key name="MoveFile.RECENT_KEYS">
|
||||||
<recent name="F:\Projects\PyCharmProjects\graduation_design\abandon_code" />
|
<recent name="F:\Projects\PyCharmProjects\graduation_design\abandon_code" />
|
||||||
@ -68,7 +108,7 @@
|
|||||||
</key>
|
</key>
|
||||||
</component>
|
</component>
|
||||||
<component name="RunManager">
|
<component name="RunManager">
|
||||||
<configuration name="ObjectClassify" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
|
<configuration name="App" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
|
||||||
<module name="graduation_design" />
|
<module name="graduation_design" />
|
||||||
<option name="ENV_FILES" value="" />
|
<option name="ENV_FILES" value="" />
|
||||||
<option name="INTERPRETER_OPTIONS" value="" />
|
<option name="INTERPRETER_OPTIONS" value="" />
|
||||||
@ -82,7 +122,7 @@
|
|||||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
|
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
|
||||||
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/ObjectClassify.py" />
|
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/App.py" />
|
||||||
<option name="PARAMETERS" value="" />
|
<option name="PARAMETERS" value="" />
|
||||||
<option name="SHOW_COMMAND_LINE" value="false" />
|
<option name="SHOW_COMMAND_LINE" value="false" />
|
||||||
<option name="EMULATE_TERMINAL" value="false" />
|
<option name="EMULATE_TERMINAL" value="false" />
|
||||||
@ -93,7 +133,7 @@
|
|||||||
</configuration>
|
</configuration>
|
||||||
<recent_temporary>
|
<recent_temporary>
|
||||||
<list>
|
<list>
|
||||||
<item itemvalue="Python.ObjectClassify" />
|
<item itemvalue="Python.App" />
|
||||||
</list>
|
</list>
|
||||||
</recent_temporary>
|
</recent_temporary>
|
||||||
</component>
|
</component>
|
||||||
@ -118,7 +158,21 @@
|
|||||||
<workItem from="1711857077648" duration="18301000" />
|
<workItem from="1711857077648" duration="18301000" />
|
||||||
<workItem from="1711885626226" duration="118000" />
|
<workItem from="1711885626226" duration="118000" />
|
||||||
<workItem from="1711885752611" duration="4821000" />
|
<workItem from="1711885752611" duration="4821000" />
|
||||||
<workItem from="1711935133710" duration="14551000" />
|
<workItem from="1711935133710" duration="14700000" />
|
||||||
|
<workItem from="1712289981625" duration="1075000" />
|
||||||
|
<workItem from="1712296765330" duration="703000" />
|
||||||
|
<workItem from="1712298076053" duration="141000" />
|
||||||
|
<workItem from="1712563399610" duration="252000" />
|
||||||
|
<workItem from="1713339327589" duration="714000" />
|
||||||
|
<workItem from="1713340213432" duration="598000" />
|
||||||
|
<workItem from="1713341195668" duration="11000" />
|
||||||
|
<workItem from="1713620291532" duration="596000" />
|
||||||
|
<workItem from="1713708584211" duration="31000" />
|
||||||
|
<workItem from="1713965477865" duration="3980000" />
|
||||||
|
<workItem from="1714008271871" duration="13419000" />
|
||||||
|
<workItem from="1714038806197" duration="1530000" />
|
||||||
|
<workItem from="1714040350736" duration="5195000" />
|
||||||
|
<workItem from="1714045786345" duration="1233000" />
|
||||||
</task>
|
</task>
|
||||||
<task id="LOCAL-00001" summary="调试了模型预测的输出结果">
|
<task id="LOCAL-00001" summary="调试了模型预测的输出结果">
|
||||||
<option name="closed" value="true" />
|
<option name="closed" value="true" />
|
||||||
@ -144,7 +198,15 @@
|
|||||||
<option name="project" value="LOCAL" />
|
<option name="project" value="LOCAL" />
|
||||||
<updated>1711895216612</updated>
|
<updated>1711895216612</updated>
|
||||||
</task>
|
</task>
|
||||||
<option name="localTasksCounter" value="4" />
|
<task id="LOCAL-00004" summary="1.大体实现机械臂跟随物体移动 2.使用线程队列将机器人控制与视觉识别解耦,大大提高了系统的流畅性">
|
||||||
|
<option name="closed" value="true" />
|
||||||
|
<created>1711951173395</created>
|
||||||
|
<option name="number" value="00004" />
|
||||||
|
<option name="presentableId" value="LOCAL-00004" />
|
||||||
|
<option name="project" value="LOCAL" />
|
||||||
|
<updated>1711951173395</updated>
|
||||||
|
</task>
|
||||||
|
<option name="localTasksCounter" value="5" />
|
||||||
<servers />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
<component name="TypeScriptGeneratedFilesManager">
|
<component name="TypeScriptGeneratedFilesManager">
|
||||||
@ -153,11 +215,14 @@
|
|||||||
<component name="VcsManagerConfiguration">
|
<component name="VcsManagerConfiguration">
|
||||||
<MESSAGE value="调试了模型预测的输出结果" />
|
<MESSAGE value="调试了模型预测的输出结果" />
|
||||||
<MESSAGE value="1. 调试了模型预测的输出结果 2. 成功控制机械臂移动" />
|
<MESSAGE value="1. 调试了模型预测的输出结果 2. 成功控制机械臂移动" />
|
||||||
<option name="LAST_COMMIT_MESSAGE" value="1. 调试了模型预测的输出结果 2. 成功控制机械臂移动" />
|
<MESSAGE value="1.大体实现机械臂跟随物体移动 2.使用线程队列将机器人控制与视觉识别解耦,大大提高了系统的流畅性" />
|
||||||
|
<option name="LAST_COMMIT_MESSAGE" value="1.大体实现机械臂跟随物体移动 2.使用线程队列将机器人控制与视觉识别解耦,大大提高了系统的流畅性" />
|
||||||
</component>
|
</component>
|
||||||
<component name="com.intellij.coverage.CoverageDataManagerImpl">
|
<component name="com.intellij.coverage.CoverageDataManagerImpl">
|
||||||
<SUITE FILE_PATH="coverage/graduation_design$FRRobot.coverage" NAME="FRRobot 覆盖结果" MODIFIED="1711950740512" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/robot_control" />
|
<SUITE FILE_PATH="coverage/graduation_design$FRRobot.coverage" NAME="FRRobot 覆盖结果" MODIFIED="1714043618392" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/robot_control" />
|
||||||
<SUITE FILE_PATH="coverage/graduation_design$ObjectClassify.coverage" NAME="ObjectClassify 覆盖结果" MODIFIED="1711950908435" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
|
<SUITE FILE_PATH="coverage/graduation_design$App.coverage" NAME="App 覆盖结果" MODIFIED="1714046470593" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
|
||||||
|
<SUITE FILE_PATH="coverage/graduation_design$ObjectClassify.coverage" NAME="ObjectClassify 覆盖结果" MODIFIED="1714038967757" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" />
|
||||||
|
<SUITE FILE_PATH="coverage/graduation_design$hand_control.coverage" NAME="hand_control 覆盖结果" MODIFIED="1713967324533" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/robot_control" />
|
||||||
<SUITE FILE_PATH="coverage/graduation_design$control.coverage" NAME="control 覆盖结果" MODIFIED="1711950717891" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/robot_control" />
|
<SUITE FILE_PATH="coverage/graduation_design$control.coverage" NAME="control 覆盖结果" MODIFIED="1711950717891" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/robot_control" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
140
App.py
Normal file
140
App.py
Normal file
@ -0,0 +1,140 @@
|
|||||||
|
import tkinter as tk
|
||||||
|
from PIL import Image, ImageTk
|
||||||
|
import torch
|
||||||
|
from ultralytics import YOLO
|
||||||
|
import cv2
|
||||||
|
from orbbec_camera.OrbbecCamera import OrbbecCamera
|
||||||
|
from robot_control.FRRobot import FRRobot
|
||||||
|
|
||||||
|
# 全局变量
|
||||||
|
model = YOLO('yolov8n.pt')
|
||||||
|
camera = OrbbecCamera('HW', True, image_width=640)
|
||||||
|
robot_controller = FRRobot()
|
||||||
|
correction_factor = 1
|
||||||
|
center_point = 320
|
||||||
|
|
||||||
|
|
||||||
|
class App:
|
||||||
|
def __init__(self, window, window_title):
|
||||||
|
self.window = window
|
||||||
|
self.window.title(window_title)
|
||||||
|
self.window.geometry("1280x720") # 设置窗口大小
|
||||||
|
|
||||||
|
# 设置图像帧,并固定大小
|
||||||
|
self.frame = tk.Label(self.window)
|
||||||
|
self.frame.grid(row=0, column=0, columnspan=3, padx=320, pady=20)
|
||||||
|
|
||||||
|
# 设置文本输出区域
|
||||||
|
self.text = tk.Text(self.window, height=10, width=50)
|
||||||
|
self.text.grid(row=3, column=0, columnspan=3, padx=320, pady=20)
|
||||||
|
|
||||||
|
# 控制按钮,居中对齐
|
||||||
|
self.btn_start = tk.Button(self.window, text="Start", command=self.start)
|
||||||
|
self.btn_start.grid(row=4, column=0, sticky="ew", padx=(106, 3))
|
||||||
|
|
||||||
|
self.btn_stop = tk.Button(self.window, text="Stop", command=self.stop)
|
||||||
|
self.btn_stop.grid(row=4, column=2, sticky="ew", padx=(3, 106))
|
||||||
|
|
||||||
|
self.btn_home = tk.Button(self.window, text="Home", command=self.to_home)
|
||||||
|
self.btn_home.grid(row=4, column=1, sticky="ew")
|
||||||
|
|
||||||
|
# 机械臂运动标志位
|
||||||
|
self.is_arm_moving_label = tk.Label(self.window, text="机械臂运动标志位: False", font=("Arial", 12))
|
||||||
|
self.is_arm_moving_label.grid(row=5, column=0, columnspan=1, sticky="ew", pady=10)
|
||||||
|
|
||||||
|
# 抓取动作标志位
|
||||||
|
self.is_catch_moving_label = tk.Label(self.window, text="抓取动作标志位: False", font=("Arial", 12))
|
||||||
|
self.is_catch_moving_label.grid(row=6, column=0, columnspan=1, sticky="ew", pady=10)
|
||||||
|
|
||||||
|
self.running = False
|
||||||
|
self.update_flag() # 初始化定时更新
|
||||||
|
|
||||||
|
self.window.mainloop()
|
||||||
|
|
||||||
|
def log(self, message):
|
||||||
|
self.text.insert(tk.END, message + '\n')
|
||||||
|
self.text.see(tk.END)
|
||||||
|
|
||||||
|
def start(self):
|
||||||
|
self.running = True
|
||||||
|
self.log("启动摄像头...")
|
||||||
|
camera.run()
|
||||||
|
self.to_home()
|
||||||
|
self.process_video_frame()
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
self.running = False
|
||||||
|
self.log("停止中...")
|
||||||
|
camera.stop()
|
||||||
|
robot_controller.add_move_command("home")
|
||||||
|
robot_controller.add_move_command("stop")
|
||||||
|
|
||||||
|
def to_home(self):
|
||||||
|
self.log("回到原点...")
|
||||||
|
robot_controller.add_move_command("home")
|
||||||
|
|
||||||
|
def process_video_frame(self):
|
||||||
|
if self.running:
|
||||||
|
color_image = camera.get_color_image()
|
||||||
|
if color_image is not None:
|
||||||
|
self.display_image(color_image)
|
||||||
|
results = model.predict(source=color_image,
|
||||||
|
show=True,
|
||||||
|
conf=0.5,
|
||||||
|
half=True,
|
||||||
|
imgsz=640,
|
||||||
|
verbose=False)
|
||||||
|
self.handle_detection_results(results)
|
||||||
|
|
||||||
|
self.window.after(30, self.process_video_frame)
|
||||||
|
|
||||||
|
def display_image(self, img):
|
||||||
|
img_cv = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
|
||||||
|
img_pil = Image.fromarray(img_cv)
|
||||||
|
img_tk = ImageTk.PhotoImage(image=img_pil)
|
||||||
|
self.frame.imgtk = img_tk
|
||||||
|
self.frame.configure(image=img_tk)
|
||||||
|
|
||||||
|
def handle_detection_results(self, results):
|
||||||
|
for r in results:
|
||||||
|
if len(r.boxes.xywh) > 0 and not robot_controller.catch_moving and not robot_controller.is_arm_moving:
|
||||||
|
positions = r.boxes.xywh.tolist()
|
||||||
|
x_pos, y_pos, high, width = positions[0]
|
||||||
|
x_distance = (x_pos - center_point) * correction_factor
|
||||||
|
y_distance = (y_pos - center_point) * correction_factor
|
||||||
|
|
||||||
|
self.log(f"X距离: {x_distance}, Y距离: {y_distance}")
|
||||||
|
|
||||||
|
move_commands = []
|
||||||
|
if abs(x_distance) > 15:
|
||||||
|
move_commands.append(("x", x_distance))
|
||||||
|
if abs(y_distance) > 15:
|
||||||
|
move_commands.append(("y", y_distance))
|
||||||
|
|
||||||
|
if abs(x_distance) < 15 and abs(y_distance) < 15:
|
||||||
|
self.log("到达指定位置")
|
||||||
|
robot_controller.catch_moving = True
|
||||||
|
if camera.get_center_distance() <= 0:
|
||||||
|
self.log("抓取物体距离过近或相机参数错误,无法执行抓取")
|
||||||
|
robot_controller.catch_moving = False
|
||||||
|
continue
|
||||||
|
robot_controller.add_catch_commands(["catch", camera.get_center_distance()])
|
||||||
|
self.log(f"执行抓取命令,深度: {camera.get_center_distance()} mm")
|
||||||
|
|
||||||
|
if move_commands:
|
||||||
|
self.log(f"添加移动指令: {move_commands}")
|
||||||
|
if not robot_controller.is_arm_moving:
|
||||||
|
self.log(f"发送指令: {move_commands}")
|
||||||
|
robot_controller.add_move_command(move_commands)
|
||||||
|
|
||||||
|
def update_flag(self):
|
||||||
|
self.is_arm_moving_label.config(text='机械臂运动标志位: ' + str(robot_controller.is_arm_moving))
|
||||||
|
self.is_catch_moving_label.config(text='抓取动作标志位: ' + str(robot_controller.catch_moving))
|
||||||
|
# 每1000毫秒(1秒)调用一次自身,持续更新标志位
|
||||||
|
self.window.after(500, self.update_flag)
|
||||||
|
|
||||||
|
|
||||||
|
# 主运行环境
|
||||||
|
if __name__ == '__main__':
|
||||||
|
root = tk.Tk()
|
||||||
|
app = App(root, "Robot Camera Control")
|
BIN
Log/OrbbecSDK.log.txt
Normal file
BIN
Log/OrbbecSDK.log.txt
Normal file
Binary file not shown.
@ -1,11 +1,5 @@
|
|||||||
import asyncio
|
|
||||||
import os
|
|
||||||
import threading
|
|
||||||
|
|
||||||
from time import sleep
|
|
||||||
import Robot
|
|
||||||
import torch
|
import torch
|
||||||
from torch import tensor
|
|
||||||
from ultralytics import YOLO
|
from ultralytics import YOLO
|
||||||
import cv2
|
import cv2
|
||||||
from orbbec_camera.OrbbecCamera import OrbbecCamera
|
from orbbec_camera.OrbbecCamera import OrbbecCamera
|
||||||
@ -28,7 +22,7 @@ def init():
|
|||||||
global image_width
|
global image_width
|
||||||
# 检测GPU是否存在
|
# 检测GPU是否存在
|
||||||
if not torch.cuda.is_available():
|
if not torch.cuda.is_available():
|
||||||
print("你忘了打开独显,大聪明")
|
print("独立显卡未启用")
|
||||||
exit(1)
|
exit(1)
|
||||||
# 输入的视频的宽度
|
# 输入的视频的宽度
|
||||||
image_width = 640
|
image_width = 640
|
||||||
@ -38,7 +32,6 @@ def init():
|
|||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
# 初始化
|
# 初始化
|
||||||
init()
|
init()
|
||||||
|
|
||||||
# 处理循环
|
# 处理循环
|
||||||
while True:
|
while True:
|
||||||
color_image = camera.get_color_image()
|
color_image = camera.get_color_image()
|
||||||
@ -60,7 +53,9 @@ if __name__ == '__main__':
|
|||||||
high = 0
|
high = 0
|
||||||
width = 0
|
width = 0
|
||||||
for r in results:
|
for r in results:
|
||||||
if len(r.boxes.xywh) > 0:
|
print("robot_controller.catch_moving: ", robot_controller.catch_moving)
|
||||||
|
print("robot_controller.is_arm_moving: ", robot_controller.is_arm_moving)
|
||||||
|
if len(r.boxes.xywh) > 0 and robot_controller.catch_moving is False and robot_controller.is_arm_moving is False:
|
||||||
positions = r.boxes.xywh.tolist()
|
positions = r.boxes.xywh.tolist()
|
||||||
x_pos = positions[0][0]
|
x_pos = positions[0][0]
|
||||||
y_pos = positions[0][1]
|
y_pos = positions[0][1]
|
||||||
@ -87,8 +82,15 @@ if __name__ == '__main__':
|
|||||||
y_dir = 1 if y_distance < 0 else 0
|
y_dir = 1 if y_distance < 0 else 0
|
||||||
move_commands.append(("y", y_distance))
|
move_commands.append(("y", y_distance))
|
||||||
|
|
||||||
|
if abs(x_distance) < 15 and abs(y_distance) < 15:
|
||||||
|
print("到达指定位置")
|
||||||
|
robot_controller.catch_moving = True
|
||||||
|
robot_controller.add_catch_commands(["catch", camera.get_center_distance()])
|
||||||
|
|
||||||
if len(move_commands) > 0:
|
if len(move_commands) > 0:
|
||||||
if not robot_controller.is_action:
|
print("添加移动指令: ", move_commands)
|
||||||
|
if not robot_controller.is_arm_moving:
|
||||||
|
print("发送指令: ", move_commands)
|
||||||
# 添加移动指令
|
# 添加移动指令
|
||||||
robot_controller.add_move_command(move_commands)
|
robot_controller.add_move_command(move_commands)
|
||||||
|
|
38
abandon_code/hand_control.py
Normal file
38
abandon_code/hand_control.py
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
import requests
|
||||||
|
|
||||||
|
url = 'http://192.168.3.200/motor'
|
||||||
|
|
||||||
|
is_open = False
|
||||||
|
|
||||||
|
|
||||||
|
def open_hand():
|
||||||
|
params = {
|
||||||
|
'direction': 'cw',
|
||||||
|
'speed': 2000
|
||||||
|
}
|
||||||
|
|
||||||
|
response = requests.get(url, params=params)
|
||||||
|
|
||||||
|
print(response.text) # 打印响应内容
|
||||||
|
print(response.status_code) # 打印响应状态码
|
||||||
|
if response.status_code == 200:
|
||||||
|
flag = True
|
||||||
|
|
||||||
|
|
||||||
|
def close_hand():
|
||||||
|
params = {
|
||||||
|
'direction': 'ccw',
|
||||||
|
'speed': 2000
|
||||||
|
}
|
||||||
|
|
||||||
|
response = requests.get(url, params=params)
|
||||||
|
|
||||||
|
print(response.text) # 打印响应内容
|
||||||
|
print(response.status_code) # 打印响应状态码
|
||||||
|
if response.status_code == 200:
|
||||||
|
flag = False
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
# close_hand()
|
||||||
|
open_hand()
|
BIN
abandon_code/img_process/Log/OrbbecSDK.log.txt
Normal file
BIN
abandon_code/img_process/Log/OrbbecSDK.log.txt
Normal file
Binary file not shown.
@ -1,26 +1,35 @@
|
|||||||
import queue
|
import queue
|
||||||
import threading
|
import threading
|
||||||
|
import requests
|
||||||
import Robot
|
import Robot
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
|
||||||
|
# todo: 1. 添加软限位
|
||||||
|
# todo: 2. 添加回零点功能(完成)
|
||||||
|
# todo: 3. 将抓取流程封装成一个函数(完成)
|
||||||
|
# todo: 4. 将物品移至指定位置(完成)
|
||||||
|
|
||||||
class FRRobot:
|
class FRRobot:
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
# 机械臂相关
|
||||||
self.robotCTL = Robot.RPC('192.168.3.102')
|
self.robotCTL = Robot.RPC('192.168.3.102')
|
||||||
self.is_action = False # 是否正在执行动作
|
|
||||||
self.speed = 100 # 速度百分比,[0~100]默认20
|
self.speed = 100 # 速度百分比,[0~100]默认20
|
||||||
self.home = [] # 回零点
|
self.home = [] # 回零点
|
||||||
self.tool = 1 # 工具坐标系编号
|
self.tool = 1 # 工具坐标系编号
|
||||||
self.user = 1 # 工件坐标系编号
|
self.user = 1 # 工件坐标系编号
|
||||||
# 100% 60mm/s; 50% 30mm/s; 20% 12mm/s
|
# 100% 60mm/s; 50% 30mm/s; 20% 12mm/s
|
||||||
self.velocity = 60 # 速度(mm/s)
|
self.velocity = 60 # 速度(mm/s)
|
||||||
|
self.is_arm_moving = False # 是否正在执行动作
|
||||||
# 线程相关
|
# 线程相关
|
||||||
self.command_queue = queue.Queue()
|
self.command_queue = queue.Queue()
|
||||||
self.listener_thread = threading.Thread(target=self.process_commands)
|
self.listener_thread = threading.Thread(target=self.process_commands)
|
||||||
self.listener_thread.daemon = True # 设置为守护线程,确保主程序退出时线程也会退出
|
self.listener_thread.daemon = True # 设置为守护线程,确保主程序退出时线程也会退出
|
||||||
self.listener_thread.start()
|
self.listener_thread.start()
|
||||||
|
# 夹爪相关
|
||||||
|
self.is_open = False # 夹爪是否打开
|
||||||
|
self.catch_moving = False # 是否在执行抓取动作
|
||||||
|
|
||||||
speed_error_code = self.robotCTL.SetSpeed(self.speed)
|
speed_error_code = self.robotCTL.SetSpeed(self.speed)
|
||||||
if speed_error_code != 0:
|
if speed_error_code != 0:
|
||||||
@ -30,42 +39,127 @@ class FRRobot:
|
|||||||
def add_move_command(self, command):
|
def add_move_command(self, command):
|
||||||
self.command_queue.put(command)
|
self.command_queue.put(command)
|
||||||
|
|
||||||
|
def add_catch_commands(self, command):
|
||||||
|
self.command_queue.put(command)
|
||||||
|
|
||||||
def process_commands(self):
|
def process_commands(self):
|
||||||
while True:
|
while True:
|
||||||
move_commands = self.command_queue.get()
|
move_commands = self.command_queue.get()
|
||||||
|
if move_commands is None:
|
||||||
|
continue
|
||||||
|
print("接收到指令: ", move_commands)
|
||||||
|
if move_commands[0] == "catch":
|
||||||
|
self.catch(move_commands[1])
|
||||||
|
continue
|
||||||
|
if move_commands == "home":
|
||||||
|
self.run_script("/fruser/Home.lua")
|
||||||
|
continue
|
||||||
if move_commands == "stop":
|
if move_commands == "stop":
|
||||||
self.robotCTL.ImmStopJOG()
|
self.robotCTL.ImmStopJOG()
|
||||||
break # 通过发送一个特定的"stop"命令来停止线程
|
break
|
||||||
|
# 停止线程
|
||||||
# axis, distance, direction = move_commands
|
# axis, distance, direction = move_commands
|
||||||
print("接收到指令: ", move_commands)
|
|
||||||
|
# 机械臂移动
|
||||||
|
# todo:这地方写的不好,其实不用for,直接和上面一样判断就行
|
||||||
for command in move_commands:
|
for command in move_commands:
|
||||||
self.is_action = True
|
self.is_arm_moving = True
|
||||||
axis, distance = command
|
axis, distance = command
|
||||||
if axis == "x":
|
if axis == "x":
|
||||||
print("x移动距离: ", distance)
|
print("x移动距离: ", distance)
|
||||||
move_time = abs(distance) / self.velocity
|
|
||||||
direction = 1 if distance > 0 else 0
|
direction = 1 if distance > 0 else 0
|
||||||
self.move_x(distance, direction)
|
self.move_x(distance, direction)
|
||||||
print("x移动时间: ", move_time)
|
|
||||||
time.sleep(move_time)
|
|
||||||
self.robotCTL.ImmStopJOG()
|
|
||||||
elif axis == "y":
|
elif axis == "y":
|
||||||
print("y移动距离: ", distance)
|
print("y移动距离: ", distance)
|
||||||
move_time = abs(distance) / self.velocity
|
|
||||||
direction = 1 if distance < 0 else 0
|
direction = 1 if distance < 0 else 0
|
||||||
self.move_y(distance, direction)
|
self.move_y(distance, direction)
|
||||||
print("y移动时间: ", move_time)
|
|
||||||
time.sleep(move_time)
|
|
||||||
self.robotCTL.ImmStopJOG()
|
|
||||||
|
|
||||||
self.is_action = False
|
|
||||||
self.command_queue.task_done()
|
self.command_queue.task_done()
|
||||||
|
|
||||||
def move_x(self, distance=30, direction=1):
|
def move_x(self, distance=30, direction=1):
|
||||||
# direction为0代表负方向,为1代表正方向
|
# direction为0代表负方向,为1代表正方向
|
||||||
dis = int(distance)
|
move_time = abs(distance) / self.velocity
|
||||||
self.robotCTL.StartJOG(ref=4, nb=1, dir=direction, max_dis=100, vel=20.0, acc=100.0)
|
self.robotCTL.StartJOG(ref=4, nb=1, dir=direction, max_dis=100, vel=20.0, acc=100.0)
|
||||||
|
time.sleep(move_time)
|
||||||
|
print("x移动时间: ", move_time)
|
||||||
|
self.robotCTL.ImmStopJOG()
|
||||||
|
self.is_arm_moving = False
|
||||||
|
|
||||||
def move_y(self, distance=30, direction=1):
|
def move_y(self, distance=30, direction=1):
|
||||||
dis = int(distance)
|
move_time = abs(distance) / self.velocity
|
||||||
self.robotCTL.StartJOG(ref=4, nb=2, dir=direction, max_dis=100, vel=20.0, acc=100.0)
|
self.robotCTL.StartJOG(ref=4, nb=2, dir=direction, max_dis=100, vel=20.0, acc=100.0)
|
||||||
|
time.sleep(move_time)
|
||||||
|
print("y移动时间: ", move_time)
|
||||||
|
self.robotCTL.ImmStopJOG()
|
||||||
|
self.is_arm_moving = False
|
||||||
|
|
||||||
|
def move_z(self, distance=30, direction=1):
|
||||||
|
move_time = (abs(distance - 100)) / self.velocity
|
||||||
|
self.robotCTL.StartJOG(ref=4, nb=3, dir=direction, max_dis=300, vel=20.0, acc=100.0)
|
||||||
|
time.sleep(move_time)
|
||||||
|
self.robotCTL.ImmStopJOG()
|
||||||
|
|
||||||
|
def run_script(self, script_name):
|
||||||
|
self.is_arm_moving = True
|
||||||
|
# 0:自动模式,1:手动模式
|
||||||
|
self.robotCTL.Mode(0)
|
||||||
|
self.robotCTL.ProgramLoad(script_name)
|
||||||
|
self.robotCTL.ProgramRun()
|
||||||
|
while self.robotCTL.GetProgramState() == 2:
|
||||||
|
time.sleep(0.1)
|
||||||
|
|
||||||
|
self.is_arm_moving = False
|
||||||
|
self.robotCTL.Mode(1)
|
||||||
|
|
||||||
|
def catch(self, distance):
|
||||||
|
if not self.is_open:
|
||||||
|
self.catch_moving = True
|
||||||
|
self.open_hand()
|
||||||
|
# 1向上,0向下
|
||||||
|
direction = 1 if distance < 0 else 0
|
||||||
|
self.is_arm_moving = True
|
||||||
|
self.move_z(distance, direction)
|
||||||
|
self.close_hand()
|
||||||
|
# 抬起物品
|
||||||
|
self.move_z(distance, 1)
|
||||||
|
self.run_script("/fruser/home2.lua")
|
||||||
|
time.sleep(0.5)
|
||||||
|
self.open_hand()
|
||||||
|
self.run_script("/fruser/Home.lua")
|
||||||
|
self.close_hand()
|
||||||
|
self.catch_moving = False
|
||||||
|
self.is_arm_moving = False
|
||||||
|
|
||||||
|
# 夹爪控制
|
||||||
|
def open_hand(self):
|
||||||
|
params = {
|
||||||
|
'direction': 'cw',
|
||||||
|
'speed': 2000
|
||||||
|
}
|
||||||
|
|
||||||
|
response = requests.get('http://192.168.3.200/motor', params=params)
|
||||||
|
|
||||||
|
print(response.text) # 打印响应内容
|
||||||
|
print(response.status_code) # 打印响应状态码
|
||||||
|
time.sleep(1)
|
||||||
|
if response.status_code == 200:
|
||||||
|
self.is_open = True
|
||||||
|
|
||||||
|
def close_hand(self):
|
||||||
|
params = {
|
||||||
|
'direction': 'ccw',
|
||||||
|
'speed': 2000
|
||||||
|
}
|
||||||
|
|
||||||
|
response = requests.get('http://192.168.3.200/motor', params=params)
|
||||||
|
|
||||||
|
print(response.text) # 打印响应内容
|
||||||
|
print(response.status_code) # 打印响应状态码
|
||||||
|
time.sleep(1)
|
||||||
|
if response.status_code == 200:
|
||||||
|
self.is_open = False
|
||||||
|
|
||||||
|
# if __name__ == '__main__':
|
||||||
|
# robot_controller = FRRobot()
|
||||||
|
# robot_controller.run_script("/fruser/home2.lua")
|
||||||
|
Loading…
Reference in New Issue
Block a user