Skip to main content

Motoman NX100 - Remote Control

Yaskawa Motoman NX100 industrial robot remote control ability research for machine vision control development. See Youtube demo video.

Actual tasks will be here Uenian33 - nx100_robotic_tasks.

Table of contents

Documents

Documents for development

Youtube videos

These videos are part of documentation.

Infrastructure

This is planned infrastructure for robot project with computing server.
infra-image

NX100 Configs

- 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.
  1. Log into NX100 with Yaskawa emperor password from security menu. Same menu as you use to login to maintenance mode.
    System info -> Security -> Select Management Mode ->
    But do not enter Management Mode password but instead Yaskawa emperor password.
    
    Do your own research to find required password.
  2. Enable following FD parameters
    All supported parameters list: NX100 / NXC100 PARAMETER LIST
    FD078 => bit set to 1 (Ethernet WWW)
    
  3. Connect ethernet cable.
    LAN0 (next to serial COM port) 
    
    LAN1 should be occupied by default, that wire goes to pendant. pc-cards
  4. Specify ethernet configuration ip, mask, default gateway.
    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.
    

Install

  1. Install or upgrade existing package
    pip install nx100-remote-control
    pip install --upgrade nx100-remote-control
    
  2. You can change robot parameters via importing 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  
    
  3. Import available contents like below examples or run web server.
    • Web interface opens from http://localhost:8080/ which looks something like this in below image.
    import nx100_remote_control
    from nx100_remote_control.module import WebServer
    
    nx100_remote_control.MOCK_RESPONSE = True 
    
    WebServer.run(addr="localhost", port=8080)
    
    • Use MOCK_RESPONSE = True to run without attached robot.
    • Replace "localhost" with "0.0.0.0" to make web server available to local network devices.

web-interface-image

Lint, Test, Build

Must have installed: pip install flake8 pytest
Lint: flake8 ./nx100_remote_control --count --select=E9,F63,F7,F82 --show-source --statistics
Test: pytest
Build: python -m build

Programs

Testing.py => Used for development and testing individual commands.
XboxController.py => As name says, can use controller to control robot, just demo.

MoveL

Quick sample for MovL command to do linear movement with robot. See MoveL object for more details or read 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
))

Use MoveL.MoveL object to see options for motion_speed_selection_ and for coordinate_specification_

Then to wait for move to be completed you can use callback function as example:

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
)

So this will exec _callback_success if position reached in given timeout or run _callback_failed if not.

Another commander class way

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')

MoveJ

Quick sample for MovJ command to do joint motion movement with robot. Read Ethernet Server Function Manual for more details about MOVJ

- !!! BE CAREFUL WITH MOVJ COMMAND AND IT'S SPEED SETTING !!!
  • Speed is given as percentage from 1 to 100.
  • Start running it with lower speed.
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

Arduino folder contains code and sketch for custom Gripper integrated for NX100 Motoman.

Ladder changes

NX100 ladder config had by default GRP meaning grouped signals so had to ungroup them to gain access to output relay #30052 ladder-config

Idea here was that I needed to be able to control relay #30052 with stock #10022 universal output signal but also with network input #22012 signal and this needed STR + NOT handling for both cases (see image ladder line 0359)

Python sample

Work in progress with 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()

Arduino code

Obvious bits are one input and two outputs. Hardware decisions don't matter, code can be changed accordingly.

  • PC817 is used to bring NX100 IO card UNIVERSAL OUTPUT signal as input for Arduino.
  • Two relays are used to short circuit NX100 input signal line's to switch on/off UNIVERSAL INPUT signal.

Sketch

Electrical-drawing

Custom part sources

Releasing

- Remember to increment setup.cfg version before release tag!

Metadata

Release files for nx100-remote-control 1.0.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for nx100-remote-control 1.0.3
File Size Uploaded
nx100_remote_control-1.0.3.tar.gz 31.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for nx100-remote-control 1.0.3
File Interpreter ABI Platform
nx100_remote_control-1.0.3-py3-none-any.whl Python 3 none any Details

Total release size: 65.5 kB

Release files / nx100_remote_control-1.0.3.tar.gz

Download URL nx100_remote_control-1.0.3.tar.gz
Size 31.5 kB
Tags Source
SHA-256 checksum
How to use checksums
690d5e2815de9898f09e502046801d1320afdd51039c09b33754c062118f2acf
BLAKE2b-256 checksum
How to use checksums
8a22940251e962d7ef4f27219d4d02a8e13979c1df5e1b47d7ddf6cbab35f567
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.6

Release files / nx100_remote_control-1.0.3-py3-none-any.whl

Download URL nx100_remote_control-1.0.3-py3-none-any.whl
Size 34.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9d9110093333c54231c50338a27fb17fc7cbcbd3ea720baf78e2cfdf8b2df2f2
BLAKE2b-256 checksum
How to use checksums
d9aac06217fb857e6ece5d3510d6ac0e500507d3964584ce6ea1d46485758036
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.4.1 importlib_metadata/4.6.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.61.1 CPython/3.9.6

Release history Release notifications | RSS feed

This release

1.0.3 This release

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page