Motoman NX100 remote control ability research library
Project description
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
- Infrastructure
- NX100 Configs
- Install
- Lint, Test, Build
- Programs
- MoveL
- MoveJ
- Arduino gripper
- Releasing
Documents
Documents for development
- Uenian33 - nx100_robotic_tasks
- End goal. This repository will be control origin for this robot in the future.
- Ethernet Server Function Manual
- This document has information about http socket working.
- Concurrent I/O Manual
- Remote IO signal outputs, inputs, all other IO signals and ladder programming information.
Youtube videos
These videos are part of documentation.
- Youtube first demo promo related to remote control software side.
- Custom hardware Gripper related to first test of working gripper.
- Calibrating and testing ML pipeline related to first tests with machine learning based control.
Infrastructure
This is planned infrastructure for robot project with computing server.
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.
- Log into NX100 with Yaskawa emperor password from security menu. Same menu as you use to login to maintenance mode.
Do your own research to find required password.System info -> Security -> Select Management Mode -> But do not enter Management Mode password but instead Yaskawa emperor password.
- Enable following FD parameters
All supported parameters list: NX100 / NXC100 PARAMETER LISTFD078 => bit set to 1 (Ethernet WWW)
- Connect ethernet cable.
LAN1 should be occupied by default, that wire goes to pendant.LAN0 (next to serial COM port)
- 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
- Install or upgrade existing package
pip install nx100-remote-control pip install --upgrade nx100-remote-control
- 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
- 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 opens from
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
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
Custom part sources
Releasing
- Remember to increment setup.cfg version before release tag!
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file nx100_remote_control-1.0.3.tar.gz
.
File metadata
- Download URL: nx100_remote_control-1.0.3.tar.gz
- Upload date:
- Size: 31.5 kB
- Tags: Source
- Uploaded using 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
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 690d5e2815de9898f09e502046801d1320afdd51039c09b33754c062118f2acf |
|
MD5 | 9381c2d3afca26cc2e0da8efa65799e8 |
|
BLAKE2b-256 | 8a22940251e962d7ef4f27219d4d02a8e13979c1df5e1b47d7ddf6cbab35f567 |
File details
Details for the file nx100_remote_control-1.0.3-py3-none-any.whl
.
File metadata
- Download URL: nx100_remote_control-1.0.3-py3-none-any.whl
- Upload date:
- Size: 34.0 kB
- Tags: Python 3
- Uploaded using 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
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9d9110093333c54231c50338a27fb17fc7cbcbd3ea720baf78e2cfdf8b2df2f2 |
|
MD5 | f1486c36c51d6c079f0af4510bcea8cd |
|
BLAKE2b-256 | d9aac06217fb857e6ece5d3510d6ac0e500507d3964584ce6ea1d46485758036 |