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 " ] | |
} |
Комментариев нет:
Отправить комментарий