# RMW_IMPLEMENTATION=rmw_fastrtps_cpp: Type 'my_msgs/msg/MyType' is not supported by this RMW implementation

- **ID:** `ros2/rmw-impl-unsupported-type`
- **Domain:** ros2
- **Category:** type_error
- **Verification:** ai_generated
- **Fix Rate:** 80%

## Root Cause

The custom message type uses a field type (e.g., nested arrays, unbounded sequences with complex types) that the selected RMW implementation (e.g., rmw_fastrtps_cpp) cannot serialize due to DDS type system limitations.

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| ROS2 Humble | active | — | — |
| ROS2 Iron | active | — | — |
| ROS2 Rolling | active | — | — |

## Workarounds

1. **Simplify the message type: replace nested sequences with flattened fields or use bounded sequences. For example, change 'float64[] data' to 'float64[100] data' if max size is known.** (85% success)
   ```
   Simplify the message type: replace nested sequences with flattened fields or use bounded sequences. For example, change 'float64[] data' to 'float64[100] data' if max size is known.
   ```
2. **Switch to a different RMW implementation that supports the type better, e.g., set RMW_IMPLEMENTATION=rmw_connextdds (if licensed) and test with the same message.** (75% success)
   ```
   Switch to a different RMW implementation that supports the type better, e.g., set RMW_IMPLEMENTATION=rmw_connextdds (if licensed) and test with the same message.
   ```
3. **Split the complex message into multiple simpler messages and publish them on separate topics, then synchronize in the subscriber node.** (80% success)
   ```
   Split the complex message into multiple simpler messages and publish them on separate topics, then synchronize in the subscriber node.
   ```

## Dead Ends

- **Switching to another RMW implementation (e.g., rmw_cyclonedds_cpp) blindly without testing message compatibility** — The error is specific to the message type, not the RMW. Other RMWs may have similar limitations for complex types. (70% fail)
- **Removing all fields from the message type to make it simpler, losing functionality** — Overly aggressive simplification may break application logic; the type may still be unsupported if any problematic field remains. (50% fail)
