Skip to content

Commit

Permalink
Merge pull request #337 from Yaskawa-Global/jazzy_wip
Browse files Browse the repository at this point in the history
Jazzy Jalisco
  • Loading branch information
ted-miller authored Jan 31, 2025
2 parents f473dbe + 127a487 commit 67f5440
Show file tree
Hide file tree
Showing 18 changed files with 204 additions and 36 deletions.
1 change: 1 addition & 0 deletions .github/workflows/ci_msbuild.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ jobs:
{ release: 20241211, codename: foxy },
{ release: 20241211, codename: galactic },
{ release: 20241211, codename: humble },
{ release: 20250113, codename: jazzy },
]

steps:
Expand Down
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,9 @@ healthchecksdb
.vscode/

# M+ libmicroros distribution directories
libmicroros_yrc1000_jazzy/
libmicroros_yrc1000u_jazzy/
libmicroros_dx200_jazzy/
libmicroros_yrc1000_humble/
libmicroros_yrc1000u_humble/
libmicroros_dx200_humble/
Expand All @@ -361,4 +364,3 @@ libmicroros_dx200_foxy/

# M+ build output
*.out
/libmicroros_yrc1000_iron
9 changes: 9 additions & 0 deletions MotoROS2.sln
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,15 @@ Global
DX200_foxy|x86 = DX200_foxy|x86
DX200_galactic|x86 = DX200_galactic|x86
DX200_humble|x86 = DX200_humble|x86
DX200_jazzy|x86 = DX200_jazzy|x86
YRC1000_foxy|x86 = YRC1000_foxy|x86
YRC1000_galactic|x86 = YRC1000_galactic|x86
YRC1000_humble|x86 = YRC1000_humble|x86
YRC1000_jazzy|x86 = YRC1000_jazzy|x86
YRC1000u_foxy|x86 = YRC1000u_foxy|x86
YRC1000u_galactic|x86 = YRC1000u_galactic|x86
YRC1000u_humble|x86 = YRC1000u_humble|x86
YRC1000u_jazzy|x86 = YRC1000u_jazzy|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{64C31524-A3C4-49D4-AD04-955D44202226}.DX200_foxy|x86.ActiveCfg = DX200_foxy|Win32
Expand All @@ -24,18 +27,24 @@ Global
{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}.DX200_jazzy|x86.ActiveCfg = DX200_jazzy|Win32
{64C31524-A3C4-49D4-AD04-955D44202226}.DX200_jazzy|x86.Build.0 = DX200_jazzy|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
{64C31524-A3C4-49D4-AD04-955D44202226}.YRC1000_galactic|x86.Build.0 = YRC1000_galactic|Win32
{64C31524-A3C4-49D4-AD04-955D44202226}.YRC1000_humble|x86.ActiveCfg = YRC1000_humble|Win32
{64C31524-A3C4-49D4-AD04-955D44202226}.YRC1000_humble|x86.Build.0 = YRC1000_humble|Win32
{64C31524-A3C4-49D4-AD04-955D44202226}.YRC1000_jazzy|x86.ActiveCfg = YRC1000_jazzy|Win32
{64C31524-A3C4-49D4-AD04-955D44202226}.YRC1000_jazzy|x86.Build.0 = YRC1000_jazzy|Win32
{64C31524-A3C4-49D4-AD04-955D44202226}.YRC1000u_foxy|x86.ActiveCfg = YRC1000u_foxy|Win32
{64C31524-A3C4-49D4-AD04-955D44202226}.YRC1000u_foxy|x86.Build.0 = YRC1000u_foxy|Win32
{64C31524-A3C4-49D4-AD04-955D44202226}.YRC1000u_galactic|x86.ActiveCfg = YRC1000u_galactic|Win32
{64C31524-A3C4-49D4-AD04-955D44202226}.YRC1000u_galactic|x86.Build.0 = YRC1000u_galactic|Win32
{64C31524-A3C4-49D4-AD04-955D44202226}.YRC1000u_humble|x86.ActiveCfg = YRC1000u_humble|Win32
{64C31524-A3C4-49D4-AD04-955D44202226}.YRC1000u_humble|x86.Build.0 = YRC1000u_humble|Win32
{64C31524-A3C4-49D4-AD04-955D44202226}.YRC1000u_jazzy|x86.ActiveCfg = YRC1000u_jazzy|Win32
{64C31524-A3C4-49D4-AD04-955D44202226}.YRC1000u_jazzy|x86.Build.0 = YRC1000u_jazzy|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
41 changes: 23 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,8 @@ The following general requirements must be met in order to be able to use MotoRO
- the controller must have a correctly configured network connection:
- DX200 and YRC1000micro: `LAN`
- YRC1000: either `LAN2` or `LAN3`
- ROS 2 version: Foxy, Galactic or Humble.
MotoROS2 does not support ROS 2 Iron Irwini, nor Jazzy nor Rolling Ridley.
- ROS 2 version: Foxy, Galactic, Humble, or Jazzy.
MotoROS2 does not support ROS 2 Iron Irwini nor Rolling Ridley.
- Docker or a from-source build of the micro-ROS Agent
- FastDDS as RMW (even when using ROS 2 Galactic)

Expand Down Expand Up @@ -159,8 +159,8 @@ To calculate the MD5 hash on Debian/Ubuntu for the main MotoROS2 binary, run the

```shell
$ cd /path/to/where/the/binary/was/saved
$ md5sum -b mr2_yrc1_h.out
e2d088b765a0bfed501aa213a1be1de0 mr2_yrc1_h.out
$ md5sum -b mr2_yrc1_j.out
[TODO] mr2_yrc1_j.out
```

Compare the output of `md5sum` when run against the binary downloaded in the previous section ([Downloading the files](#downloading-the-files)) with the values listed in the following table.
Expand All @@ -171,12 +171,15 @@ The values must match *exactly*.
| DX200 | Foxy | `mr2_dx2_f.out` | `0.1.3` | `a9a9e10403f726062c25d97654fad316` |
| DX200 | Galactic | `mr2_dx2_g.out` | `0.1.3` | `e8db7512215da240b28b985f2f2af98b` |
| DX200 | Humble | `mr2_dx2_h.out` | `0.1.3` | `611bda537655cf8a60d85600da6043f4` |
| DX200 | Jazzy | `mr2_dx2_j.out` | `TODO` | `TODO` |
| YRC1000 | Foxy | `mr2_yrc1_f.out` | `0.1.3` | `84bfb44e2043372127d9dfc1157a79b5` |
| YRC1000 | Galactic | `mr2_yrc1_g.out` | `0.1.3` | `866e090b6c724429ce03117712c951f4` |
| YRC1000 | Humble | `mr2_yrc1_h.out` | `0.1.3` | `e2d088b765a0bfed501aa213a1be1de0` |
| YRC1000 | Jazzy | `mr2_yrc1_j.out` | `TODO` | `TODO` |
| YRC1000micro | Foxy | `mr2_yrc1m_f.out` | `0.1.3` | `027e77b427a212aa63e5d7962d48ad92` |
| YRC1000micro | Galactic | `mr2_yrc1m_g.out` | `0.1.3` | `042d753a7729784fec8c5c23bef3e685` |
| YRC1000micro | Humble | `mr2_yrc1m_h.out` | `0.1.3` | `c0e61adbf5bf6fd6a734211f15bb0f0a` |
| YRC1000micro | Jazzy | `mr2_yrc1m_j.out` | `TODO` | `TODO` |

If the hash matches, proceed with the next section, [Configuration](#configuration).

Expand Down Expand Up @@ -423,11 +426,12 @@ Choose one or the other.

### Using Docker (Linux Only)

The command shown here starts the `humble` version of the `micro-ros-agent` Docker image.
The command shown here starts the `jazzy` version of the `micro-ros-agent` Docker image.
However, always make sure to use a version of the Agent image which corresponds to the version of ROS 2 that is being used.

With ROS 2 Foxy, use `microros/micro-ros-agent:foxy`.
With ROS 2 Humble, use `microros/micro-ros-agent:humble`.
With ROS 2 Jazzy, use `microros/micro-ros-agent:jazzy`.

To start the Agent (on a machine with Docker already installed and setup to allow non-root access):

Expand All @@ -437,7 +441,7 @@ docker run \
--rm \
--net=host \
--user=$(id -u):$(id -g) \
microros/micro-ros-agent:humble \
microros/micro-ros-agent:jazzy \
udp4 \
--port 8888
```
Expand All @@ -449,11 +453,12 @@ docker run \
The micro-ROS Agent can also be built as a ROS 2 package in a Colcon workspace.
This procedure is rather involved, so only do this if the pre-configured Docker image can not be used.

The following sections show how to build the Humble version of the Agent in a dedicated workspace (adapt the paths used below if a different workspace should be used instead).
The following sections show how to build the Jazzy version of the Agent in a dedicated workspace (adapt the paths used below if a different workspace should be used instead).

Note: always make sure to use a version of the Agent which corresponds to the version of ROS 2 that is being used.
For ROS 2 Foxy, checkout the `foxy` branch.
For ROS 2 Humble, checkout the `humble` branch.
For ROS 2 Jazzy, checkout the `jazzy` branch.

#### Linux (Debian/Ubuntu)

Expand All @@ -462,12 +467,12 @@ This requires a working ROS 2 development environment (compiler, CMake, Git, Col
In a terminal:

```shell
source /opt/ros/humble/setup.bash
source /opt/ros/jazzy/setup.bash
sudo apt update
rosdep update --rosdistro=$ROS_DISTRO
mkdir -p $HOME/micro_ros_agent_ws/src
git clone \
-b humble \
-b jazzy \
https://github.com/micro-ROS/micro_ros_setup.git \
$HOME/micro_ros_agent_ws/src/micro_ros_setup
rosdep install \
Expand All @@ -486,7 +491,7 @@ The Agent application will only need to be built *once*, unless it needs to be u
Finally, to run the Agent:

```shell
source /opt/ros/humble/setup.bash
source /opt/ros/jazzy/setup.bash
source $HOME/micro_ros_agent_ws/install/local_setup.bash
ros2 run micro_ros_agent micro_ros_agent udp4 --port 8888
```
Expand All @@ -505,14 +510,14 @@ If you are using a different version of Visual Studio, update the path to match.
Now execute the following commands:

```batch
call "C:\path\to\ros2-humble\local_setup.bat"
call "C:\path\to\ros2-jazzy\local_setup.bat"
mkdir "%USERPROFILE%\micro_ros_agent_ws\src"
git clone ^
-b humble ^
-b jazzy ^
https://github.com/micro-ROS/micro_ros_msgs.git ^
"%USERPROFILE%\micro_ros_agent_ws\src\micro_ros_msgs"
git clone ^
-b humble ^
-b jazzy ^
https://github.com/micro-ROS/micro-ROS-Agent.git ^
"%USERPROFILE%\micro_ros_agent_ws\src\micro-ROS-Agent"
cd "%USERPROFILE%\micro_ros_agent_ws"
Expand Down Expand Up @@ -543,7 +548,7 @@ After the final reboot of the controller, and after [starting the micro-ROS Agen

Note: if you are using ROS 2 Galactic, please first read [Only FastDDS is supported](#only-fastdds-is-supported).

On a PC with a supported ROS 2 installation (ie: Foxy, Galactic (with FastDDS) or Humble):
On a PC with a supported ROS 2 installation (ie: Foxy, Galactic (with FastDDS), Humble, or Jazzy):

1. open a new terminal
1. `source` the ROS 2 installation
Expand All @@ -562,7 +567,7 @@ Note: if you are using ROS 2 Galactic, please first read [Only FastDDS is suppor
As MotoROS2 uses micro-ROS, you must always make sure to first [start the micro-ROS Agent](#the-micro-ros-agent).
After registration with the Agent, MotoROS2 behaves like any other ROS 2 node.

For initial discovery of the ROS API, we recommend using the [ros2 node](https://docs.ros.org/en/humble/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Nodes/Understanding-ROS2-Nodes.html), [ros2 topic](https://docs.ros.org/en/humble/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Topics/Understanding-ROS2-Topics.html), [ros2 service](https://docs.ros.org/en/humble/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Services/Understanding-ROS2-Services.html) and [ros2 action](https://docs.ros.org/en/humble/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Actions/Understanding-ROS2-Actions.html) commandlets.
For initial discovery of the ROS API, we recommend using the [ros2 node](https://docs.ros.org/en/jazzy/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Nodes/Understanding-ROS2-Nodes.html), [ros2 topic](https://docs.ros.org/en/jazzy/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Topics/Understanding-ROS2-Topics.html), [ros2 service](https://docs.ros.org/en/jazzy/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Services/Understanding-ROS2-Services.html) and [ros2 action](https://docs.ros.org/en/jazzy/Tutorials/Beginner-CLI-Tools/Understanding-ROS2-Actions/Understanding-ROS2-Actions.html) commandlets.
Refer also to the [ROS API](#ros-api) section for more information on the various topics, services and actions MotoROS2 supports.

In order to be able to interact with MotoROS2 (either using the command line tools or from ROS 2 nodes), the message, service and action definitions must first be made available.
Expand Down Expand Up @@ -674,7 +679,7 @@ The default QoS profiles used for the topics MotoROS2 publishes to are listed in
| `robot_status` | *Sensor data* | Same |
| `tf` | *Default* | *Reliable* reliability |

Please refer to [About Quality of Service settings: QoS profiles](https://docs.ros.org/en/humble/Concepts/About-Quality-of-Service-Settings.html#qos-profiles) in the general ROS 2 documentation for more information about these default profiles.
Please refer to [About Quality of Service settings: QoS profiles](https://docs.ros.org/en/jazzy/Concepts/About-Quality-of-Service-Settings.html#qos-profiles) in the general ROS 2 documentation for more information about these default profiles.

These values are based on tests with other ROS 2 components and applications and analyses of implementations of subscribers by the authors of MotoROS2 (examples include RViz2 and MoveIt2).
But these profiles can not be compatible with all possible combinations of subscribers, and thus have been made configurable.
Expand Down Expand Up @@ -731,7 +736,7 @@ None of the other RMWs are supported, including Cyclone DDS, which is the defaul

Symptoms of this incompatibility are seemingly functional ROS 2 network connections, where topics are succesfully published and subscribed to, but service invocations and action goal submissions appear to *hang*.

**Note**: ROS 2 Foxy, ROS 2 Humble and ROS 2 Rolling all use FastDDS by default.
**Note**: ROS 2 Foxy, ROS 2 Humble, ROS 2 Jazzy, and ROS 2 Rolling all use FastDDS by default.
If you haven't changed your default RMW, you should not need to change anything for MotoROS2.

**Work-around**: unfortunately, this limitation is caused by a middleware-layer incompatibility with respect to how service requests are (de)serialised by the respective RMWs ([ros2/rmw_cyclonedds#184](https://github.com/ros2/rmw_cyclonedds/issues/184)), and without significant changes to the way MotoROS2 operates, has no known work-around.
Expand All @@ -742,7 +747,7 @@ Note that the `RMW_IMPLEMENTATION` environment variable must be `export`ed to al
Please note that the `ros-galactic-rmw-fastrtps-cpp` package must be install *prior* to building the client application workspace.
If the workspace has already been built, it must be rebuilt after installing the package.

Refer to [Working with multiple ROS 2 middleware implementations](https://docs.ros.org/en/humble/How-To-Guides/Working-with-multiple-RMW-implementations.html) in the ROS 2 documentation for more information about configuring different RMWs with ROS 2.
Refer to [Working with multiple ROS 2 middleware implementations](https://docs.ros.org/en/jazzy/How-To-Guides/Working-with-multiple-RMW-implementations.html) in the ROS 2 documentation for more information about configuring different RMWs with ROS 2.

### Maximum length of trajectories

Expand Down
14 changes: 7 additions & 7 deletions doc/build_from_source.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ The MotoPlus SDK is not compatible with Visual Studio Code.
- **MotoPlus SDK for Visual Studio v1.5.1 or higher**.
This is not the same as MotoPlus IDE. Users in Asian regions will need to purchase this software from [Yaskawa America directly](https://www.motoman.com/en-us/products/robots/sales-quote).
If you already have a license for an older version of the MotoPlus SDK, please contact `[email protected]` or `[email protected]` for assistance obtaining a newer edition.
- **libmicroros library and headers** that corresponds to your target edition of ROS 2 (Foxy, Humble, etc) and the Yaskawa controller series you are building MotoROS2 for
- **libmicroros library and headers** that corresponds to your target edition of ROS 2 (Humble, Jazzy, etc) and the Yaskawa controller series you are building MotoROS2 for
Although `libmicroros` as used by MotoROS2 is derived from the open-source [micro-ROS](https://micro.ros.org) project, various patches were needed to make it compatible with MotoPlus. As of writing, these patches can not be made open-source yet. Because of this, we distribute the `libmicroros` dependency as a closed-source library.
These can be found on the [micro_ros_motoplus/Releases](https://github.com/yaskawa-global/micro_ros_motoplus/releases) page.

Expand All @@ -35,19 +35,19 @@ These are provided as separate downloads and can be found on the [micro_ros_moto

When downloading `libmicroros` from the repo, the folder will be named with a unique identifier corresponding to the time stamp of the build.
Rename the folder to `libmicroros_<controller-series>_<ros-2-variant>`.
E.g. `libmicroros_yrc1000_humble`.
E.g. `libmicroros_yrc1000_jazzy`.

Move the folder containing `libmicroros` and the headers inside the folder with the Visual Studio solution (ie: `MotoROS2.sln`).

Example showing where `libmicroros_yrc1000_humble` should be moved for a Humble build of MotoROS2 targetting a YRC1000 controller:
Example showing where `libmicroros_yrc1000_jazzy` should be moved for a Jazzy build of MotoROS2 targetting a YRC1000 controller:

```text
motoros2
|-- libmicroros_yrc1000_humble
|-- libmicroros_yrc1000_jazzy
| |-- include
| | `-- ...
| |-- build_info.yaml
| `-- libmicroros.yrcLib_humble
| `-- libmicroros.yrcLib_jazzy
|-- src
| |-- ...
| `-- MotoROS2_AllControllers.vcxproj
Expand Down Expand Up @@ -82,15 +82,15 @@ This procedure will also allow you to verify the Visual Studio project configura
This can be a relative path, using MSBuild macros.
Copy this path, as it will be used again in the next step.

Example: `$(ProjectDir)..\libmicroros_yrc1000_humble\include;`
Example: `$(ProjectDir)..\libmicroros_yrc1000_jazzy\include;`
NOTE: Do not use the `$(SolutionDir)` macro in this step.
The path should be either relative to the project file or absolute.

![vc_directories.png](img/vc_directories.png)

1. Choose `NMake` from the left tree view.
Ensure the start of the `Include Search Path` includes the path to the `libmicroros` headers.
Example: `$(ProjectDir)..\libmicroros_yrc1000_humble\include;`
Example: `$(ProjectDir)..\libmicroros_yrc1000_jazzy\include;`

![intellisense_search_path.png](img/intellisense_search_path.png)

Expand Down
2 changes: 1 addition & 1 deletion doc/troubleshooting.md
Original file line number Diff line number Diff line change
Expand Up @@ -620,7 +620,7 @@ These alarms are often caused by version incompatibilities between ROS 2 (on the

Ensure only compatible versions are used.

As an example: the *Humble* version of MotoROS2 should only be used with ROS 2 *Humble* on the client PC and with the *Humble* version of the micro-ROS Agent.
As an example: the *Jazzy* version of MotoROS2 should only be used with ROS 2 *Jazzy* on the client PC and with the *Jazzy* version of the micro-ROS Agent.
Please also verify the client PC uses a version of ROS 2 that is [supported by MotoROS2](https://github.com/Yaskawa-Global/motoros2#general-requirements).

If the behavior persists, save a copy of the output of the [debug-listener script](#debug-log-client) and the `PANELBOX.LOG` from the robot's teach pendant.
Expand Down
18 changes: 17 additions & 1 deletion src/CommunicationExecutor.c
Original file line number Diff line number Diff line change
Expand Up @@ -310,6 +310,22 @@ void Ros_Communication_StartExecutors(SEM_ID semCommunicationExecutorStatus)

//---------------------------------
//Create timers
// rclc_timer_init_default(..) was replaced with rclc_timer_init_default2(..)
// in Jazzy, which has a different set of parameters. Call the correct version
// based on what this is being compiled for
#ifdef MOTOPLUS_LIBMICROROS_ROS2_IS_JAZZY
rc = rclc_timer_init_default2(&timerPingAgent, &g_microRosNodeInfo.support, RCL_MS_TO_NS(PERIOD_COMMUNICATION_PING_AGENT_MS), Ros_Communication_PingAgentConnection, true);
motoRosAssert_withMsg(rc == RCL_RET_OK, SUBCODE_FAIL_TIMER_INIT_PING, "Failed creating rclc timer (%d)", (int)rc);

rc = rclc_timer_init_default2(&timerPublishActionFeedback, &g_microRosNodeInfo.support, RCL_MS_TO_NS(g_nodeConfigSettings.action_feedback_publisher_period), Ros_Communication_PublishActionFeedback, true);
motoRosAssert_withMsg(rc == RCL_RET_OK, SUBCODE_FAIL_TIMER_INIT_ACTION_FB, "Failed creating rclc timer (%d)", (int)rc);

rc = rclc_timer_init_default2(&timerMonitorUserLanState, &g_microRosNodeInfo.support,
RCL_MS_TO_NS(PERIOD_COMMUNICATION_USERLAN_LINK_CHECK_MS),
Ros_Communication_MonitorUserLanState, true);
motoRosAssert_withMsg(rc == RCL_RET_OK, SUBCODE_FAIL_TIMER_INIT_USERLAN_MONITOR,
"Failed creating rclc timer (%d)", (int)rc);
#else
rc = rclc_timer_init_default(&timerPingAgent, &g_microRosNodeInfo.support, RCL_MS_TO_NS(PERIOD_COMMUNICATION_PING_AGENT_MS), Ros_Communication_PingAgentConnection);
motoRos_RCLAssertOK_withMsg(rc, SUBCODE_FAIL_TIMER_INIT_PING, "Failed creating rclc timer (%d)", (int)rc);

Expand All @@ -321,7 +337,7 @@ void Ros_Communication_StartExecutors(SEM_ID semCommunicationExecutorStatus)
Ros_Communication_MonitorUserLanState);
motoRos_RCLAssertOK_withMsg(rc, SUBCODE_FAIL_TIMER_INIT_USERLAN_MONITOR,
"Failed creating rclc timer (%d)", (int)rc);

#endif
//---------------------------------
//Create executors
rclc_executor_t executor_motion_control;
Expand Down
Loading

0 comments on commit 67f5440

Please sign in to comment.