8
8
9
9
import json
10
10
import re
11
+ import math
11
12
from ._blockly_base import _BlocklyBase , OPS_MAP
12
13
from ._blockly_highlight import HIGHLIGHT_BLOCKS
13
14
@@ -417,8 +418,9 @@ def _handle_gpio_set_digital(self, block, indent=0, arg_map=None):
417
418
fields = self ._get_nodes ('field' , root = block )
418
419
io = fields [0 ].text
419
420
value = 0 if fields [1 ].text == 'LOW' else 1
420
- delay_sec = fields [2 ].text if len (fields ) > 2 else 0
421
- self ._append_main_code ('code = self._arm.set_tgpio_digital({}, {}, delay_sec={})' .format (io , value , delay_sec ), indent + 2 )
421
+ is_sync = fields [2 ].text if len (fields ) > 2 else 'True'
422
+ delay_sec = fields [3 ].text if len (fields ) > 3 else 0
423
+ self ._append_main_code ('code = self._arm.set_tgpio_digital({}, {}, delay_sec={}, sync={})' .format (io , value , delay_sec , is_sync ), indent + 2 )
422
424
self ._append_main_code ('if not self._check_code(code, \' set_tgpio_digital\' ):' , indent + 2 )
423
425
self ._append_main_code (' return' , indent + 2 )
424
426
@@ -435,14 +437,36 @@ def _handle_gpio_set_digital_with_xyz(self, block, indent=0, arg_map=None):
435
437
self ._append_main_code ('if not self._check_code(code, \' set_tgpio_digital_with_xyz\' ):' , indent + 2 )
436
438
self ._append_main_code (' return' , indent + 2 )
437
439
440
+ def _handle_gpio_set_digital_with_xyz_var (self , block , indent = 0 , arg_map = None ):
441
+ value_nodes = self ._get_nodes ('value' , root = block )
442
+ x = self ._get_block_val (value_nodes [0 ], arg_map )
443
+ y = self ._get_block_val (value_nodes [1 ], arg_map )
444
+ z = self ._get_block_val (value_nodes [2 ], arg_map )
445
+ xyz_li = [x , y , z ]
446
+ xyz = []
447
+ for i in range (3 ):
448
+ if re .match ('\d+(\.\d+)*$' , xyz_li [i ]) is not None :
449
+ xyz .append (float (xyz_li [i ]))
450
+ else :
451
+ xyz .append (math .log2 (3 ) if i == 0 else math .log2 (5 ) if i == 1 else math .log2 (7 ))
452
+ xyz = str (xyz ).replace (str (math .log2 (3 )), xyz_li [0 ]).replace (str (math .log2 (5 )), xyz_li [1 ]).replace (
453
+ str (math .log2 (7 )), xyz_li [2 ])
454
+ tol_r = self ._get_block_val (value_nodes [3 ], arg_map )
455
+ io = self ._get_block_val (value_nodes [4 ], arg_map )
456
+ value = 0 if self ._get_block_val (value_nodes [5 ], arg_map ) == 'LOW' else 1
457
+ self ._append_main_code (
458
+ 'code = self._arm.set_tgpio_digital_with_xyz({}, {}, {}, {})' .format (io , value , xyz , tol_r ), indent + 2 )
459
+ self ._append_main_code ('if not self._check_code(code, \' set_tgpio_digital_with_xyz\' ):' , indent + 2 )
460
+ self ._append_main_code (' return' , indent + 2 )
461
+
438
462
def _handle_get_suction_cup (self , block , indent = 0 , arg_map = None ):
439
463
self ._append_main_code ('{}self._arm.get_suction_cup(hardware_version={})' .format ('{}' , self ._vacuum_version ), indent + 2 )
440
464
441
465
def _handle_check_air_pump_state (self , block , indent = 0 , arg_map = None ):
442
466
fields = self ._get_nodes ('field' , root = block )
443
467
state = 1 if fields [0 ].text == 'ON' else 0
444
468
timeout = float (fields [1 ].text )
445
- self ._append_main_code ('self._arm.arm.check_air_pump_state({}, timeout={})' .format (state , timeout ), indent + 2 )
469
+ self ._append_main_code ('self._arm.arm.check_air_pump_state({}, timeout={}, hardware_version={} )' .format (state , timeout , self . _vacuum_version ), indent + 2 )
446
470
447
471
def _handle_check_bio_gripper_is_catch (self , block , indent = 0 , arg_map = None ):
448
472
fields = self ._get_nodes ('field' , root = block )
@@ -464,7 +488,7 @@ def _handle_set_suction_cup(self, block, indent=0, arg_map=None):
464
488
wait = False
465
489
fields = self ._get_nodes ('field' , root = block , name = 'delay' )
466
490
delay_sec = fields [0 ].text if len (fields ) > 0 else 0
467
- self ._append_main_code ('code = self._arm.set_suction_cup({}, wait={}, delay_sec={}, hardware_version={})' .format ( on , wait , delay_sec , self ._vacuum_version ), indent + 2 )
491
+ self ._append_main_code ('code = self._arm.set_suction_cup({}, wait={}, delay_sec={}, hardware_version={})' .format (on , wait , delay_sec , self ._vacuum_version ), indent + 2 )
468
492
self ._append_main_code ('if not self._check_code(code, \' set_suction_cup\' ):' , indent + 2 )
469
493
self ._append_main_code (' return' , indent + 2 )
470
494
@@ -511,8 +535,9 @@ def _handle_gpio_set_controller_digital(self, block, indent=0, arg_map=None):
511
535
fields = self ._get_nodes ('field' , root = block )
512
536
io = fields [0 ].text
513
537
value = 0 if fields [1 ].text == 'LOW' else 1
514
- delay_sec = fields [2 ].text if len (fields ) > 2 else 0
515
- self ._append_main_code ('code = self._arm.set_cgpio_digital({}, {}, delay_sec={})' .format (io , value , delay_sec ), indent + 2 )
538
+ is_sync = fields [2 ].text if len (fields ) > 2 else 'True'
539
+ delay_sec = fields [3 ].text if len (fields ) > 3 else 0
540
+ self ._append_main_code ('code = self._arm.set_cgpio_digital({}, {}, delay_sec={}, sync={})' .format (io , value , delay_sec , is_sync ), indent + 2 )
516
541
self ._append_main_code ('if not self._check_code(code, \' set_cgpio_digital\' ):' , indent + 2 )
517
542
self ._append_main_code (' return' , indent + 2 )
518
543
@@ -525,6 +550,27 @@ def _handle_gpio_set_controller_digital_with_xyz(self, block, indent=0, arg_map=
525
550
tol_r = fields [3 ].text
526
551
io = fields [4 ].text
527
552
value = 0 if fields [5 ].text == 'LOW' else 1
553
+ self ._append_main_code (
554
+ 'code = self._arm.set_cgpio_digital_with_xyz({}, {}, {}, {})' .format (io , value , xyz , tol_r ), indent + 2 )
555
+ self ._append_main_code ('if not self._check_code(code, \' set_cgpio_digital_with_xyz\' ):' , indent + 2 )
556
+ self ._append_main_code (' return' , indent + 2 )
557
+
558
+ def _handle_gpio_set_controller_digital_with_xyz_var (self , block , indent = 0 , arg_map = None ):
559
+ value_nodes = self ._get_nodes ('value' , root = block )
560
+ x = self ._get_block_val (value_nodes [0 ], arg_map )
561
+ y = self ._get_block_val (value_nodes [1 ], arg_map )
562
+ z = self ._get_block_val (value_nodes [2 ], arg_map )
563
+ xyz_li = [x , y , z ]
564
+ xyz = []
565
+ for i in range (3 ):
566
+ if re .match ('\d+(\.\d+)*$' , xyz_li [i ]) is not None :
567
+ xyz .append (float (xyz_li [i ]))
568
+ else :
569
+ xyz .append (math .log2 (3 ) if i == 0 else math .log2 (5 ) if i == 1 else math .log2 (7 ))
570
+ xyz = str (xyz ).replace (str (math .log2 (3 )), xyz_li [0 ]).replace (str (math .log2 (5 )), xyz_li [1 ]).replace (str (math .log2 (7 )), xyz_li [2 ])
571
+ tol_r = self ._get_block_val (value_nodes [3 ], arg_map )
572
+ io = self ._get_block_val (value_nodes [4 ], arg_map )
573
+ value = 0 if self ._get_block_val (value_nodes [5 ], arg_map ) == 'LOW' else 1
528
574
self ._append_main_code ('code = self._arm.set_cgpio_digital_with_xyz({}, {}, {}, {})' .format (io , value , xyz , tol_r ), indent + 2 )
529
575
self ._append_main_code ('if not self._check_code(code, \' set_cgpio_digital_with_xyz\' ):' , indent + 2 )
530
576
self ._append_main_code (' return' , indent + 2 )
@@ -533,20 +579,43 @@ def _handle_gpio_set_controller_digital_do(self, block, indent=0, arg_map=None):
533
579
fields = self ._get_nodes ('field' , root = block )
534
580
io = fields [0 ].text
535
581
value = 0 if fields [1 ].text == 'LOW' else 1
536
- delay_sec = fields [2 ].text if len (fields ) > 2 else 0
537
- self ._append_main_code ('code = self._arm.set_cgpio_digital({}, {}, delay_sec={})' .format (io , value , delay_sec ), indent + 2 )
538
- self ._append_main_code ('if not self._check_code(code, \' set_suction_cup\' ):' , indent + 2 )
582
+ is_sync = fields [2 ].text if len (fields ) > 2 else 'True'
583
+ delay_sec = fields [3 ].text if len (fields ) > 3 else 0
584
+ self ._append_main_code ('code = self._arm.set_cgpio_digital({}, {}, delay_sec={}, sync={})' .format (io , value , delay_sec , is_sync ), indent + 2 )
585
+ self ._append_main_code ('if not self._check_code(code, \' set_cgpio_digital\' ):' , indent + 2 )
539
586
self ._append_main_code (' return' , indent + 2 )
540
587
541
588
def _handle_gpio_set_controller_digital_with_xyz_do (self , block , indent = 0 , arg_map = None ):
542
- fields = self ._get_nodes ('field ' , root = block )
543
- x = fields [0 ]. text
544
- y = fields [1 ]. text
545
- z = fields [2 ]. text
589
+ value_nodes = self ._get_nodes ('value ' , root = block )
590
+ x = self . _get_block_val ( value_nodes [0 ], arg_map )
591
+ y = self . _get_block_val ( value_nodes [1 ], arg_map )
592
+ z = self . _get_block_val ( value_nodes [2 ], arg_map )
546
593
xyz = list (map (float , [x , y , z ]))
547
- tol_r = fields [3 ].text
548
- io = fields [4 ].text
549
- value = 0 if fields [5 ].text == 'LOW' else 1
594
+ tol_r = self ._get_block_val (value_nodes [3 ], arg_map )
595
+ io = self ._get_block_val (value_nodes [4 ], arg_map )
596
+ value = 0 if self ._get_block_val (value_nodes [5 ], arg_map ) == 'LOW' else 1
597
+ self ._append_main_code (
598
+ 'code = self._arm.set_cgpio_digital_with_xyz({}, {}, {}, {})' .format (io , value , xyz , tol_r ), indent + 2 )
599
+ self ._append_main_code ('if not self._check_code(code, \' set_cgpio_digital_with_xyz\' ):' , indent + 2 )
600
+ self ._append_main_code (' return' , indent + 2 )
601
+
602
+ def _handle_gpio_set_controller_digital_with_xyz_do_var (self , block , indent = 0 , arg_map = None ):
603
+ value_nodes = self ._get_nodes ('value' , root = block )
604
+ x = self ._get_block_val (value_nodes [0 ], arg_map )
605
+ y = self ._get_block_val (value_nodes [1 ], arg_map )
606
+ z = self ._get_block_val (value_nodes [2 ], arg_map )
607
+ tol_r = self ._get_block_val (value_nodes [3 ], arg_map )
608
+ io = self ._get_block_val (value_nodes [4 ], arg_map )
609
+ value = 0 if self ._get_block_val (value_nodes [5 ], arg_map ) == 'LOW' else 1
610
+ xyz_li = [x , y , z ]
611
+ xyz = []
612
+ for i in range (3 ):
613
+ if re .match ('\d+(\.\d+)*$' , xyz_li [i ]) is not None :
614
+ xyz .append (float (xyz_li [i ]))
615
+ else :
616
+ xyz .append (math .log2 (3 ) if i == 0 else math .log2 (5 ) if i == 1 else math .log2 (7 ))
617
+ xyz = str (xyz ).replace (str (math .log2 (3 )), xyz_li [0 ]).replace (str (math .log2 (5 )), xyz_li [1 ]).replace (
618
+ str (math .log2 (7 )), xyz_li [2 ])
550
619
self ._append_main_code ('code = self._arm.set_cgpio_digital_with_xyz({}, {}, {}, {})' .format (io , value , xyz , tol_r ), indent + 2 )
551
620
self ._append_main_code ('if not self._check_code(code, \' set_cgpio_digital_with_xyz\' ):' , indent + 2 )
552
621
self ._append_main_code (' return' , indent + 2 )
@@ -564,11 +633,35 @@ def _handle_gpio_set_controller_analog_with_xyz(self, block, indent=0, arg_map=N
564
633
self ._append_main_code ('if not self._check_code(code, \' set_cgpio_analog_with_xyz\' ):' , indent + 2 )
565
634
self ._append_main_code (' return' , indent + 2 )
566
635
636
+ def _handle_gpio_set_controller_analog_with_xyz_var (self , block , indent = 0 , arg_map = None ):
637
+ value_nodes = self ._get_nodes ('value' , root = block )
638
+ x = self ._get_block_val (value_nodes [0 ], arg_map )
639
+ y = self ._get_block_val (value_nodes [1 ], arg_map )
640
+ z = self ._get_block_val (value_nodes [2 ], arg_map )
641
+ # xyz = list(map(lambda x: float(x) if re.match('\d+(\.\d+)*$', x) is not None else [x, y, z].index(x), [x, y, z]))
642
+ xyz_li = [x , y , z ]
643
+ xyz = []
644
+ for i in range (3 ):
645
+ if re .match ('\d+(\.\d+)*$' , xyz_li [i ]) is not None :
646
+ xyz .append (float (xyz_li [i ]))
647
+ else :
648
+ xyz .append (math .log2 (3 ) if i == 0 else math .log2 (5 ) if i == 1 else math .log2 (7 ))
649
+ xyz = str (xyz ).replace (str (math .log2 (3 )), xyz_li [0 ]).replace (str (math .log2 (5 )), xyz_li [1 ]).replace (
650
+ str (math .log2 (7 )), xyz_li [2 ])
651
+ tol_r = self ._get_block_val (value_nodes [3 ], arg_map )
652
+ io = self ._get_block_val (value_nodes [4 ], arg_map )
653
+ value = self ._get_block_val (value_nodes [5 ], arg_map )
654
+ self ._append_main_code ('code = self._arm.set_cgpio_analog_with_xyz({}, {}, {}, {})' .format (io , value , xyz , tol_r ), indent + 2 )
655
+ self ._append_main_code ('if not self._check_code(code, \' set_cgpio_analog_with_xyz\' ):' , indent + 2 )
656
+ self ._append_main_code (' return' , indent + 2 )
657
+
567
658
def _handle_gpio_set_controller_analog (self , block , indent = 0 , arg_map = None ):
568
- io = self ._get_node ('field' , block ).text
659
+ fields = self ._get_nodes ('field' , root = block )
660
+ io = fields [0 ].text
661
+ is_sync = fields [1 ].text
569
662
value = self ._get_node ('value' , root = block )
570
663
value = self ._get_block_val (value , arg_map = arg_map )
571
- self ._append_main_code ('code = self._arm.set_cgpio_analog({}, {})' .format (io , value ), indent + 2 )
664
+ self ._append_main_code ('code = self._arm.set_cgpio_analog({}, {}, sync={} )' .format (io , value , is_sync ), indent + 2 )
572
665
self ._append_main_code ('if not self._check_code(code, \' set_cgpio_analog\' ):' , indent + 2 )
573
666
self ._append_main_code (' return' , indent + 2 )
574
667
@@ -686,6 +779,11 @@ def _handle_gripper_set_status(self, block, indent=0, arg_map=None):
686
779
self ._append_main_code ('if not self._check_code(code, \' set_gripper_status\' ):' , indent + 2 )
687
780
self ._append_main_code (' return' , indent + 2 )
688
781
782
+ def _handle_set_bio_g2_gripper_init (self , block , indent = 0 , arg_map = None ):
783
+ self ._append_main_code ('code = self._arm.set_bio_gripper_enable(True)' , indent + 2 )
784
+ self ._append_main_code ('if not self._check_code(code, \' set_bio_gripper_enable\' ):' , indent + 2 )
785
+ self ._append_main_code (' return' , indent + 2 )
786
+
689
787
def _handle_set_bio_gripper_init (self , block , indent = 0 , arg_map = None ):
690
788
self ._append_main_code ('code = self._arm.set_bio_gripper_enable(True)' , indent + 2 )
691
789
self ._append_main_code ('if not self._check_code(code, \' set_bio_gripper_enable\' ):' , indent + 2 )
@@ -707,6 +805,16 @@ def _handle_set_bio_gripper(self, block, indent=0, arg_map=None):
707
805
self ._append_main_code ('if not self._check_code(code, \' close_bio_gripper\' ):' , indent + 2 )
708
806
self ._append_main_code (' return' , indent + 2 )
709
807
808
+ def _handle_set_bio_gripper_pos_force (self , block , indent = 0 , arg_map = None ):
809
+ fields = self ._get_nodes ('field' , root = block )
810
+ pos = fields [0 ].text
811
+ speed = fields [1 ].text
812
+ force = fields [2 ].text
813
+ wait = fields [3 ].text == 'TRUE'
814
+ self ._append_main_code ('code = self._arm.set_bio_gripper_position(pos={}, speed={}, force={}, wait={})' .format (pos , speed , force , wait ), indent + 2 )
815
+ self ._append_main_code ('if not self._check_code(code, \' open_bio_gripper\' ):' , indent + 2 )
816
+ self ._append_main_code (' return' , indent + 2 )
817
+
710
818
def _handle_set_robotiq_init (self , block , indent = 0 , arg_map = None ):
711
819
self ._append_main_code ('code, ret = self._arm.robotiq_reset()' , indent + 2 )
712
820
self ._append_main_code ('if not self._check_code(code, \' robotiq_reset\' ):' , indent + 2 )
@@ -1124,6 +1232,7 @@ def _handle_python_code(self, block, indent=0, arg_map=None, **kwargs):
1124
1232
if (self ._is_exec or (not self ._is_exec and not self ._is_ide )) and code .strip () and code not in \
1125
1233
['finally:' , 'else:' ] and all ([i not in code for i in ['elif' , 'except' , 'def' , 'class' ]]) \
1126
1234
and not code .startswith ('@' ):
1235
+ # 只有在studio执行blockly时或者SDK直接调用run_blockly_app时才会执行
1127
1236
code_indent = re .match ('(\s*).*' , code ).group (1 )
1128
1237
self ._append_main_code (code_indent + 'if not self.is_alive:' , indent + 2 )
1129
1238
self ._append_main_code (code_indent + 'return' , indent + 3 )
0 commit comments