2) Блендер Контролер
| Сервопривод s1, s2; | ||
| void setup () { | ||
| Последовательный. начало ( 115200 ); | ||
| Последовательный. flush (); | ||
| s1. прикрепить ( 9 ); | ||
| s2. прикрепить ( 8 ); | ||
| } | ||
| String readString () { | ||
| String inString = " " ; | ||
| char inChar; | ||
| while (Serial. available ()> 0 ) { | ||
| inChar = ( char ) Серийный. читать (); | ||
| inString + = inChar; | ||
| задержка ( 1 ); | ||
| } | ||
| вернуть inString; | ||
| } | ||
| int * parseString (String msg) { | ||
| static int a [ 2 ]; | ||
| int commaIndex = msg. indexOf ( ' , ' ); | ||
| a [ 0 ] = сообщение подстрока ( 0 , commaIndex). toInt (); | ||
| a [ 1 ] = сообщение подстрока (commaIndex + 1 ). toInt (); | ||
| вернуть ; | ||
| } | ||
| void writeValues ( int b []) { | ||
| если (b [ 0 ] < 20 ), b [ 0 ] = 20 ; | ||
| если (b [ 0 ]> 150 ), b [ 0 ] = 150 ; | ||
| если (b [ 1 ] < 40 ) b [ 1 ] = 40 ; | ||
| если (b [ 1 ]> 160 ), b [ 1 ] = 160 ; | ||
| // s1.write (b [0]); | ||
| s1. написать ( карта (b [ 0 ], 0 , 180 , 150 , 20 )); | ||
| s2. написать ( карта (б [ 1 ], 0 , 180 , 40 , 160 )); | ||
| Последовательный. печать (b [ 0 ]); | ||
| Последовательный. печать ( " " ); | ||
| Последовательный. println (b [ 1 ]); | ||
| } | ||
| void loop () { | ||
| // Serial.print ("a"); | ||
| if (Serial. available ()) { | ||
| String входящий = readString (); | ||
| int * angles = parseString (входящий); | ||
| writeValues (углы); | ||
| } | ||
| } ------------- |
Для запуска контроллера сначала загрузите код arduino на плату.
импорт БПИ
В этом репо показано, как управлять роботом из блендера с помощью python. Для запуска контроллера сначала загрузите код arduino на плату. Затем в файле блендера нажмите «Run Script», затем значок воспроизведения и, наконец, наведите курсор мыши на контрольную кость и нажмите клавишу «G»
4) Доктор
импорт БПИ
В этом репо показано, как управлять роботом из блендера с помощью python. Для запуска контроллера сначала загрузите код arduino на плату. Затем в файле блендера нажмите «Run Script», затем значок воспроизведения и, наконец, наведите курсор мыши на контрольную кость и нажмите клавишу «G»
| импорт математики | |
| время импорта | |
| импорт SYS | |
| импортный сериал | |
| импорт глобус | |
| port = ' ' .join (glob.glob ( " / dev / ttyUSB * " )) | |
| ser = serial.Serial (порт, 115200 ) | |
| print ( " подключено к: " + ser.portstr) | |
| ob = bpy.data.objects [ ' Арматура ' ] | |
| bpy.context.scene.objects.active = ob | |
| bpy.ops.object.mode_set ( mode = ' POSE ' ) | |
| смещение 1 = 30 | |
| смещение2 = 140 | |
| def get_local_orientation ( pose_bone ): | |
| local_orientation = pose_bone.matrix_channel.to_euler () | |
| если pose_bone.parent равен None : | |
| вернуть local_orientation | |
| еще : | |
| x = local_orientation.x - pose_bone.parent.matrix_channel.to_euler (). x | |
| y = local_orientation.y - pose_bone.parent.matrix_channel.to_euler (). y | |
| z = local_orientation.z - pose_bone.parent.matrix_channel.to_euler (). z | |
| возврат (x, y, z) | |
| def sendAngles (): | |
| bone1 = ob.pose.bones [ ' Link1IK ' ] | |
| bone2 = ob.pose.bones [ ' Link2IK ' ] | |
| angle1 = str ( round (math.degrees (get_local_orientation (bone1) [ 2 ]) + offset1)) # [0] = x, [1] = y, [2] = z | |
| angle2 = str ( round (math.degrees (get_local_orientation (bone2) [ 2 ]) + offset2)) | |
| печать ( " % s % s \ n " % (angle1, angle2)) | |
| ser.write ((angle1 + ' , ' + angle2) .encode ( ' UTF-8 ' )) | |
| def frameChange ( passScene ): | |
| sendAngles () | |
| bpy.app.handlers.frame_change_pre.append (frameChange) |
| { | |
| " image " : " Screenshot.png " , | |
| " tags " : [ " robotics " , " blender " , " python " , " servo " ] | |
| } |


Комментариев нет:
Отправить комментарий