Яскава Motoman NX100 Промышленный робот Дистанционное управление библиотекой Python. Эта библиотека была первоначально разработана для проекта разработки контроля машинного зрения. Посмотрите больше на демонстрационном видео YouTube.
Документы для развития
Эти видео являются частью документации.
- Do changes with your own risk! in case you brick your robot or your setup is different and it doesn't work. I cannot help. System info -> Security -> Select Management Mode ->
But do not enter Management Mode password but instead Yaskawa emperor password.
FD078 => bit set to 1 (Ethernet WWW)
LAN0 (next to serial COM port)

1. Power off NX100 -> press down pendant "MAIN MENU" button while powering on NX100
2. Release "MAIN MENU" after seeing Motoman screen on pendant.
3. Login with Yaskawa emperor password from System -> Security.
4. SYSTEM -> SETUP -> OPTION FUNCTION -> TCP -> "USED"
5. SYSTEM -> SETUP -> OPTION FUNCTION -> NETWORK -> Give details.
6. Under network also find HOST SETUP -> Provide address details.
7. See that your changes have been saved.
8. Reboot NX100 and ping your NX100 ip address.
9. Test out this library.
pip install nx100-remote-control
pip install --upgrade nx100-remote-control import nx100_remote_control
nx100_remote_control . NX100_IP_ADDRESS = '192.168.2.28'
nx100_remote_control . NX100_TCP_PORT = 80
nx100_remote_control . MOCK_RESPONSE = False http://localhost:8080/ , который выглядит примерно так на изображении ниже. import nx100_remote_control
from nx100_remote_control . module import WebServer
nx100_remote_control . MOCK_RESPONSE = True
WebServer . run ( addr = "localhost" , port = 8080 )
Должен был установить: pip install flake8 pytest
Lint: flake8 ./nx100_remote_control --count --select=E9,F63,F7,F82 --show-source --statistics
Тест: pytest
Строитель: python -m build
Testing.py => Используется для разработки и тестирования отдельных команд.
XboxController.py => Как говорит имя, может использовать контроллер для управления роботом, только демонстрацию. Обратите внимание, что движения неуклюжи, потому что NX100 не поддерживает контроль в реальном времени.
Быстрый образец для команды Movl для выполнения линейного движения с роботом. См. Объект Movel для получения более подробной информации или прочтите Ethernet Server Function Manual .
from nx100_remote_control . module import Commands , Utils
from nx100_remote_control . objects import MoveL
Commands . write_linear_move ( MoveL . MoveL (
MoveL . MoveL . motion_speed_selection_posture_speed ,
5 ,
MoveL . MoveL . coordinate_specification_base_coordinate ,
353.769 , 202.779 , 120.658 ,
- 1.34 , 35.78 , 27.84 ,
Utils . binary_to_decimal ( 0x00000001 ),
0 , 0 , 0 , 0 , 0 , 0 , 0
)) Используйте объект movel.movel, чтобы увидеть параметры для motion_speed_selection_ и для coordinate_specification_
Затем, чтобы дождаться завершения движения, вы можете использовать функцию обратного вызова в качестве примера:
from nx100_remote_control . module import Commands , Utils
from nx100_remote_control . objects import MoveL
def callback_success ():
print ( 'MoveL position has been reached' )
def callback_failed ():
print ( 'MoveL error or position not reached on given timeout' )
move_l = MoveL . MoveL (
MoveL . MoveL . motion_speed_selection_posture_speed ,
5 ,
MoveL . MoveL . coordinate_specification_base_coordinate ,
353.769 , 202.779 , 120.658 ,
- 1.34 , 35.78 , 27.84 ,
Utils . binary_to_decimal ( 0x00000001 ),
0 , 0 , 0 , 0 , 0 , 0 , 0
)
Commands . robot_in_target_point_callback (
move_l = move_l , timeout = 10 , _callback_success = callback_success , _callback_failed = callback_failed
) Таким образом, это будет выполнять _callback_success если позиция достигнута в заданном тайм -ауте или запустить _callback_failed если нет.
Еще один класс командиров
from nx100_remote_control . module import LinearMove , Utils
from nx100_remote_control . objects import MoveL
move_l = MoveL . MoveL (
MoveL . MoveL . motion_speed_selection_posture_speed ,
5 ,
MoveL . MoveL . coordinate_specification_base_coordinate ,
352.769 , 202.779 , 120.658 ,
- 1.34 , 35.78 , 27.84 ,
Utils . binary_to_decimal ( 0x00000001 ),
0 , 0 , 0 , 0 , 0 , 0 , 0
)
linear_move = LinearMove . LinearMove ()
linear_move . go ( move_l = move_l , wait = True , poll_limit_seconds = 10 )
print ( 'finished' ) Быстрый образец для команды MovJ для движения движения совместного движения с роботом. Прочитайте Ethernet Server Function Manual для получения более подробной информации о MOVJ
- !!! BE CAREFUL WITH MOVJ COMMAND AND IT'S SPEED SETTING !!! from nx100_remote_control . module import JointMove , Utils
from nx100_remote_control . objects import MoveJ
move_j = MoveJ . MoveJ (
25 , # speed %
MoveJ . MoveJ . coordinate_specification_base_coordinate ,
352.769 , 202.779 , 120.658 ,
- 1.34 , 35.78 , 27.84 ,
Utils . binary_to_decimal ( 0x00000001 ),
0 , 0 , 0 , 0 , 0 , 0 , 0
)
linear_move = JointMove . JointMove ()
linear_move . go ( move_j = move_j , wait = True , poll_limit_seconds = 10 )
print ( 'finished' )Папка Arduino содержит код и эскиз для пользовательского Gripper, интегрированного для NX100 Motoman.
Конфигурация лестницы NX100 имела по умолчанию GRP, что означает сгруппированные сигналы, поэтому они должны были разгружать их, чтобы получить доступ к выходу #30052 
Идея здесь заключалась в том, что мне нужно было иметь возможность управлять реле № 30052 с помощью универсального выходного сигнала Stock #10022, а также с сигналом сетевого ввода #22012, и это необходимо не обработать обоих случаев (см. Линию лестницы изображений 0359)
Работа в процессе с Gripper.
from nx100_remote_control . module import Gripper
Gripper . write_gripper_close ()
Gripper . write_gripper_open ()
Gripper . read_gripper_closed_command_register ()
Gripper . read_gripper_acknowledge ()
Gripper . read_gripper_hit ()Очевидные биты - один вход и два выхода. Решения оборудования не имеют значения, код может быть изменен соответствующим образом.

Пользовательские детали источников
- Remember to increment setup.cfg version before release tag!