Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for DX200 controllers #49

Merged
merged 14 commits into from
Aug 14, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/ci_msbuild.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ jobs:
# controllers and for which ROS 2 versions builds fail / succeed)
fail-fast: false
matrix:
controller: [yrc1000, yrc1000u]
controller: [dx200, yrc1000, yrc1000u]
ros2_codename: [humble, galactic, foxy]

steps:
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -351,10 +351,13 @@ healthchecksdb
# M+ libmicroros distribution directories
libmicroros_yrc1000_humble/
libmicroros_yrc1000u_humble/
libmicroros_dx200_humble/
libmicroros_yrc1000_galactic/
libmicroros_yrc1000u_galactic/
libmicroros_dx200_galactic/
libmicroros_yrc1000_foxy/
libmicroros_yrc1000u_foxy/
libmicroros_dx200_foxy/

# M+ build output
*.out
9 changes: 9 additions & 0 deletions MotoROS2.sln
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MotoROS2", "src\MotoROS2_Al
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
DX200_foxy|x86 = DX200_foxy|x86
DX200_galactic|x86 = DX200_galactic|x86
DX200_humble|x86 = DX200_humble|x86
YRC1000_foxy|x86 = YRC1000_foxy|x86
YRC1000_galactic|x86 = YRC1000_galactic|x86
YRC1000_humble|x86 = YRC1000_humble|x86
Expand All @@ -15,6 +18,12 @@ Global
YRC1000u_humble|x86 = YRC1000u_humble|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{64C31524-A3C4-49D4-AD04-955D44202226}.DX200_foxy|x86.ActiveCfg = DX200_foxy|Win32
{64C31524-A3C4-49D4-AD04-955D44202226}.DX200_foxy|x86.Build.0 = DX200_foxy|Win32
{64C31524-A3C4-49D4-AD04-955D44202226}.DX200_galactic|x86.ActiveCfg = DX200_galactic|Win32
{64C31524-A3C4-49D4-AD04-955D44202226}.DX200_galactic|x86.Build.0 = DX200_galactic|Win32
{64C31524-A3C4-49D4-AD04-955D44202226}.DX200_humble|x86.ActiveCfg = DX200_humble|Win32
{64C31524-A3C4-49D4-AD04-955D44202226}.DX200_humble|x86.Build.0 = DX200_humble|Win32
{64C31524-A3C4-49D4-AD04-955D44202226}.YRC1000_foxy|x86.ActiveCfg = YRC1000_foxy|Win32
{64C31524-A3C4-49D4-AD04-955D44202226}.YRC1000_foxy|x86.Build.0 = YRC1000_foxy|Win32
{64C31524-A3C4-49D4-AD04-955D44202226}.YRC1000_galactic|x86.ActiveCfg = YRC1000_galactic|Win32
Expand Down
95 changes: 69 additions & 26 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ SPDX-License-Identifier: CC-BY-SA-4.0

![YRC1000: supported](https://img.shields.io/badge/YRC1000-supported-blue.svg)
![YRC1000micro: supported](https://img.shields.io/badge/YRC1000micro-supported-blue.svg)
![DX200: not supported](https://img.shields.io/badge/DX200-not%20supported-inactive.svg)
![DX200: supported](https://img.shields.io/badge/DX200-supported-blue.svg)
![FS100: not supported](https://img.shields.io/badge/FS100-not%20supported-inactive.svg)
![DX100: not supported](https://img.shields.io/badge/DX100-not%20supported-inactive.svg)

Expand All @@ -31,8 +31,13 @@ The following sections document how to download, install, configure, use and tro
- download the [latest release](#download) and extract onto USB stick
- edit the [configuration file](#configuration), at least Agent IP and port
- insert USB stick into pendant
- *Maintenance* mode: load the appropriate `mr2_yrc1_*.out` or `mr2_yrc1m_*.out` MotoPlus application [onto controller](#installation)
- *Online* mode: load `motoros2_config.yaml` via `USER DEFINED FILES`
- *Maintenance* mode: load the MotoPlus application [onto the controller](#installation):
- DX200: `mr2_dx2_*.out`
- YRC1000: `mr2_yrc1_*.out`
- YRC1000micro: `mr2_yrc1m_*.out`
- *Online* mode:
- DX200: insert USB stick with `motoros2_config.yaml` into `CN106` in the controller cabinet
- YC1000[micro]: load `motoros2_config.yaml` via `USER DEFINED FILES`
- start an instance of the [micro-ROS Agent](#the-micro-ros-agent) on a PC
- reboot controller
- verify [MotoROS2 is running](#verifying-successful-installation)
Expand All @@ -53,7 +58,7 @@ The following sections document how to download, install, configure, use and tro
- [Verifying YAML correctness](#verifying-yaml-correctness)
- [Example INFORM jobs](#example-inform-jobs)
- [Installation](#installation)
- [YRC1000 and YRC1000micro](#yrc1000-and-yrc1000micro)
- [DX200, YRC1000 and YRC1000micro](#dx200-yrc1000-and-yrc1000micro)
- [Building from source](#building-from-source)
- [Updating the configuration](#updating-the-configuration)
- [The micro-ROS Agent](#the-micro-ros-agent)
Expand Down Expand Up @@ -86,11 +91,15 @@ The following sections document how to download, install, configure, use and tro

The following general requirements must be met in order to be able to use MotoROS2 with a Yaskawa Motoman robot controller:

- controller series: YRC1000 or YRC1000micro
- controller series: DX200, YRC1000, or YRC1000micro
- minimum versions of system software:
- `DN2.44.00-00` for DX200
- `YAS2.80.00-00` for YRC1000
- `YBS2.31.00-00` for YRC1000micro
- the controller must have a correctly configured network connection (either `LAN2` or `LAN3`)
- the controller must have a correctly configured network connection:
- DX200: `LAN`
- YRC1000: either `LAN2` or `LAN3`
- YRC1000micro: either `LAN2` or `LAN3`
- MotoPlus and Motoman-Driver must be enabled on the controller
- ROS 2 version: Foxy, Galactic, Humble or Rolling.
ROS 2 Iron Irwini is not yet supported.
Expand Down Expand Up @@ -151,6 +160,9 @@ The values must match *exactly*.

|**Controller** |**ROS 2 Version** | **File** |**Version** | **MD5 hash** |
|---------------|------------------|-------------------|------------|------------------------------------|
| DX200 | Foxy | `mr2_dx2_f.out` | `TODO` | `TODO` |
| DX200 | Galactic | `mr2_dx2_g.out` | `TODO` | `TODO` |
| DX200 | Humble | `mr2_dx2_h.out` | `TODO` | `TODO` |
| YRC1000 | Foxy | `mr2_yrc1_f.out` | `v0.1.0` | `eb3c028d0989b6cce2eb4d50a9f45001` |
| YRC1000 | Galactic | `mr2_yrc1_g.out` | `v0.1.0` | `78abcead2e2504109a49287648a9bc04` |
| YRC1000 | Humble | `mr2_yrc1_h.out` | `v0.1.0` | `c5d0f2cce281ed1cb8194badaaffc511` |
Expand Down Expand Up @@ -213,13 +225,13 @@ All MotoROS2 release `.zip`s contain a copy of the default INFORM jobs (`.jbi` a

The following variants are shipped with MotoROS2 in the `robot_jobs` sub directory:

| **Directory** | **Description** | **Supported controller(s)** |
|:----------------------------|:---------------------|:----------------------------|
| `single_arm` | Single robot group | YRC1000, YRC1000micro |
| `single_arm_with_ext_axis` | Robot + station axis | YRC1000, YRC1000micro |
| `single_arm_with_base_axis` | Robot + base axis | YRC1000, YRC1000micro |
| `two_arms` | Two robot groups | YRC1000, YRC1000micro |
| `sda_dual_arm` | SDA robots *only* | - |
| **Directory** | **Description** | **Supported controller(s)** |
|:----------------------------|:---------------------|:-----------------------------|
| `single_arm` | Single robot group | DX200, YRC1000, YRC1000micro |
| `single_arm_with_ext_axis` | Robot + station axis | DX200, YRC1000, YRC1000micro |
| `single_arm_with_base_axis` | Robot + base axis | DX200, YRC1000, YRC1000micro |
| `two_arms` | Two robot groups | DX200, YRC1000, YRC1000micro |
| `sda_dual_arm` | SDA robots *only* | - |

**These jobs are not required.**
The INFORM job will be automatically generated at startup.
Expand All @@ -229,22 +241,22 @@ If needed, open a new issue on the [Issue tracker](https://github.com/yaskawa-gl

## Installation

Place the `.out` (main binary), `.yaml` (configuration), and `.dat` (I/O names) files on an external storage device: both Secure Digital (SD) and USB sticks can be used.
Place the `.out` (main binary), `.yaml` (configuration), and `.dat` (I/O names) files on an external storage device: Compact Flash (CF), Secure Digital (SD), and USB sticks can be used depending on the controller model.
Insert the storage device into the robot's programming pendant and refer to the following section.

### YRC1000 and YRC1000micro
### DX200, YRC1000, and YRC1000micro

Turn on the robot controller while holding the `{Main Menu}` key on the keypad to enter *Maintenance* mode.
You may release the key when you see the Yaskawa logo appear on the screen.

In *Maintenance* mode:

1. upgrade to *MANAGEMENT* security level by touching `[System Info]`→`[Security]` (default password is all `9`'s)
1. touch `[MotoPlus APL]`→`[Device]` to select either SD or USB memory type
1. touch `[MotoPlus APL]`→`[Load (User App)]` to select and load the `mr2_yrc1_*.out` (or `mr2_yrc1m_*.out`) file
1. touch `[MotoPlus APL]`→`[Device]` to select CF, SD, or USB memory type
1. touch `[MotoPlus APL]`→`[Load (User App)]` to select and load the `mr2_*_*.out` file
1. touch `[MotoPlus APL]`→`[File List]` and verify that MotoROS2 was properly installed and no other MotoPlus applications are currently loaded on the controller
1. touch `[File]`→`[Initialize]` and select `USER DEFINED FILES`
1. select `SRAM RAM DRIVE` and initialize it
1. (YRC1000[micro] only): touch `[File]`→`[Initialize]` and select `USER DEFINED FILES`
1. (YRC1000[micro] only): select `SRAM RAM DRIVE` and initialize it
1. rotate the pendant key-switch (upper left of pendant) fully counter-clockwise into `TEACH` mode
1. reboot the robot controller into regular mode

Expand All @@ -254,21 +266,41 @@ In *Normal Operation* mode:
touch `[RESET]` to clear the alarm
1. upgrade to *MANAGEMENT* security level by touching `[System Info]`→`[Security]` (default password is all `9`'s)
1. touch `[PARAMETER]`→`[S2C]` and set the following parameters:
1. `S2C541 = 0`
1. `S2C542 = 0`
1. `S2C1102 = 2`
1. `S2C1104 = 2`
1. `S2C1117 = 1` (DX200 only)
1. `S2C1250 = 1`
1. `S2C1402 = 3`
1. touch `[EX MEMORY]`→`[Load]`
1. cursor to `USER DEFINED FILES` and press `[SELECT]`
1. cursor to `motoros2_config.yaml` and press `[SELECT]` then `[ENTER]`

If a custom INFORM job will be used:

1. touch `[EX MEMORY]`→`[Load]`
1. cursor to `JOB` and press `[SELECT]`
1. cursor to your job file and press `[SELECT]` then `[ENTER]`

Within 30 seconds of loading the configuration file, you should get alarm `8001[10] Speed FB enabled, reboot now`. Reboot again and there should be no alarms.
#### YRC1000 and YRC1000 micro

1. touch `[EX MEMORY]`→`[Load]`
1. cursor to `USER DEFINED FILES` and press `[SELECT]`
1. cursor to `motoros2_config.yaml` and press `[SELECT]` then `[ENTER]`

#### DX200

1. power down the DX200 controller
1. copy the `motoros2_config.yaml` file to a USB storage drive
1. insert the USB drive into the `CN106` USB port inside the controller cabinet
1. leave the drive in place and close the controller cabinet
1. power up the DX200 controller

Note: on DX200, the USB stick used to store `motoros2_config.yaml` can't be removed, it *must* remain inserted into the USB port labelled `CN106`, or at least as long as MotoROS2 is installed on the controller.
Without the USB stick in `CN106`, MotoROS2 would not be able to load its configuration and alarms will be raised on each controller (re)boot.

### All supported controllers

Within 30 seconds of loading the configuration file, you should get alarm `8001[10] Speed FB enabled, reboot now`.
Reboot again and there should be no alarms.

If you receive any errors or alarms after rebooting, please refer to the [Troubleshooting](#troubleshooting) section for information on how to remedy the issue.

Expand All @@ -280,7 +312,9 @@ Please refer to [doc/Building from source](doc/build_from_source.md).

It may be necessary to update MotoROS2 configuration during or after initial deployment.

### Controller software YAS4.70 or YBS3.02 or later
### YRC1000 and YRC1000micro

#### Controller software YAS4.70 or YBS3.02 or later

In *Normal Operation* mode:

Expand All @@ -293,7 +327,7 @@ In *Normal Operation* mode:
1. touch `[YES]` to overwrite
1. reboot the robot controller

### Older controller software
#### Older controller software

Due to the way the controller treats files, `motoros2_config.yaml` cannot be directly overwritten using the `[EX MEMORY]` menu.
Instead, MotoROS2 has a built-in mechanism which updates the controller's copy of the `.yaml` file with a new version placed on a USB stick.
Expand Down Expand Up @@ -329,6 +363,15 @@ To extract a copy of your current configuration from the teach pendant:
1. cursor to `USER DEFINED FILES` and press `[SELECT]`
1. cursor to `motoros2_config.yaml` and press `[SELECT]` then `[ENTER]`

### DX200 only

1. power down the robot controller and open the cabinet
1. locate the USB port labelled `CN106` on the robot's CPU board and remove the USB stick
1. overwrite the `motoros2_config.yaml` file in the root directory of a USB stick with an updated version
1. replace the USB stick into `CN106` and close the controller cabinet
1. power on the controller and wait for it to fully boot (ie: you see the regular UI on the teach pendant)
1. verify MotoROS2 has started

## The micro-ROS Agent

The micro-ROS Agent acts as the transparent bridge between MotoROS2 and ROS 2.
Expand Down Expand Up @@ -739,7 +782,7 @@ As such, no statements are made about priorities or development schedule for any

The following items are on the MotoROS2 roadmap, and are listed here in no particular order:

- support DX200/FS100 controllers
- support FS100 controllers
- read/write of controller variables
- CRUD of INFORM job files (ie: create, retrieve, update, delete)
- starting/stopping INFORM jobs (other than `INIT_ROS`)
Expand Down
30 changes: 15 additions & 15 deletions doc/faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,44 +15,44 @@ MotoROS2 *development* (ie: building MotoROS2 from source) does require a MotoPl

Development of a ROS 2 application that interfaces with MotoROS2 does **not** require a MotoPlus SDK license.

## Can MotoROS2 be installed on DX100, FS100 or DX200 controllers?
## Can MotoROS2 be installed on DX100 or FS100 controllers?

MotoROS2 only supports YRC1000 and YRC1000micro controllers.
MotoROS2 only supports DX200, YRC1000 and YRC1000micro controllers.

## Does MotoROS2 support all Yaskawa Motoman robots?

MotoROS2 is manipulator agnostic, and as such is expected to be compatible with all Yaskawa Motoman robots which can be used with the controller series supported by MotoROS2 (ie: YRC1000 and YRC1000micro).
MotoROS2 is manipulator agnostic, and as such is expected to be compatible with all Yaskawa Motoman robots which can be used with the controller series supported by MotoROS2 (ie: DX200, YRC1000 and YRC1000micro).

## Can MotoROS2 be used with SDA robots?

The current version of MotoROS2 is only compatible with YRC1000 and YRC1000micro controllers.
This controller is not used with SDA robots (ie: dual-arm robots), and as such, MotoROS2 does not support SDA robots.
The current version of MotoROS2 is only compatible with DX200, YRC1000 and YRC1000micro controllers.
These controllers are not used with SDA robots (ie: dual-arm robots), and as such, MotoROS2 does not support SDA robots.

Note: the limitation is not MotoROS2, but the controller.
Users of SDA robots paired with a YRC1000 (or newer) wishing to use MotoROS2 are encouraged to contact the developers.
Users of SDA robots paired with a DX200 or YRC1000 (or newer) wishing to use MotoROS2 are encouraged to contact the developers.

## Can MotoROS2 be used with Scara robots?

The current version of MotoROS2 is compatible with YRC1000 and YRC1000micro controllers.
Provided the robot is used with a YRC1000 generation controller, it should be supported by MotoROS2.
The current version of MotoROS2 is compatible with DX200, YRC1000 and YRC1000micro controllers.
Provided the robot is used with a DX200 or YRC1000 generation controller, it should be supported by MotoROS2.

## Can MotoROS2 be used with Delta robots?

The current version of MotoROS2 is only compatible with YRC1000 and YRC1000micro controllers.
This controller is not used with Delta robots, and as such, MotoROS2 does not support Delta robots.
The current version of MotoROS2 is only compatible with DX200, YRC1000 and YRC1000micro controllers.
These controllers are not used with Delta robots, and as such, MotoROS2 does not support Delta robots.

Note: the limitation is not MotoROS2, but the controller.
Users of Delta robots paired with a YRC1000 (or newer) wishing to use MotoROS2 are encouraged to contact the developers.
Users of Delta robots paired with a DX200 or YRC1000 (or newer) wishing to use MotoROS2 are encouraged to contact the developers.

## Can MotoROS2 be used with palletizing robots?

The current version of MotoROS2 is compatible with YRC1000 and YRC1000micro controllers.
Provided the palletizing robot is used with a YRC1000 generation controller, it should be supported by MotoROS2.
The current version of MotoROS2 is compatible with DX200, YRC1000 and YRC1000micro controllers.
Provided the palletizing robot is used with a DX200 or YRC1000 generation controller, it should be supported by MotoROS2.

## Can MotoROS2 be used with welding robots?

The current version of MotoROS2 is compatible with YRC1000 and YRC1000micro controllers.
Provided the robot is used with a YRC1000 generation controller, the *motion* of the arm can be controlled by MotoROS2.
The current version of MotoROS2 is compatible with DX200, YRC1000 and YRC1000micro controllers.
Provided the robot is used with a DX200 or YRC1000 generation controller, the *motion* of the arm can be controlled by MotoROS2.

Note: MotoROS2 does not have any process-controls.
It cannot be used to control the welding power source.
Expand Down
38 changes: 37 additions & 1 deletion doc/troubleshooting.md
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,8 @@ ALARM 8003
*Solution:*
Your robot controller requires internal configuration changes to support the MotoROS2 driver.

For DX200: ensure the controller is updated to at least `DN2.44.00-00`.

For YRC1000 and YRC1000micro: ensure the controller is updated to at least `YAS2.80.00-00` (for YRC1000) and `YBS2.31.00-00` (for YRC1000micro).
If the system software version is below this, please contact Yaskawa Motoman for assistance with upgrading the controller.

Expand Down Expand Up @@ -612,7 +614,8 @@ ALARM 8013

*Solution:*
Follow the [setup instructions](../README.md#installation) to load the `motoros2_config.yaml` configuration file.
Be sure to follow the steps for initializing SRAM and setting the `S2C` parameters.
Double check the setting of the `S2C` parameters.
Additionally, on YRC-generation controllers, be sure to follow the steps for initializing SRAM.

### Alarm: 8013[1]

Expand Down Expand Up @@ -910,3 +913,36 @@ ALARM 8014
*Solution:*
There was a failure when generating the default INFORM job.
Please obtain the standard job from the Github repository and load it using the teach pendant.

### Alarm: 8015[0]

*Example:*

```text
ALARM 8015
Failed to parse RBCALIB.DAT
[0]
```

*Solution:*
Check the following robot parameters on the teach pendant and make sure they are set to the values shown here:

- S2C1103 = 2
- S2C1117 = 1

If that does not resolve the issue, please contact Yaskawa technical support for assistance.
Include a copy of the `ALL.PRM` and `CMOS.BIN` from your robot controller.

### Alarm: 8015[1] - [4]

*Example:*

```text
ALARM 8015
Failed to parse RBCALIB.DAT
[1]
```

*Solution:*
Open a new ticket on the MotoROS2 [Issue tracker](https://github.com/yaskawa-global/motoros2/issues).
Please include a copy of the `RBCALIB.DAT` from your robot controller along with the output from the [Debug log client](#debug-log-client).
Loading