-
Notifications
You must be signed in to change notification settings - Fork 131
Add ROS2 Action client, server, and .action codegen support #327
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
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,47 @@ | ||
| using System; | ||
| using Unity.Robotics.ROSTCPConnector.MessageGeneration; | ||
|
|
||
| namespace RosMessageTypes.ActionTutorialsInterfaces | ||
| { | ||
| [Serializable] | ||
| public class FibonacciFeedback : Message | ||
| { | ||
| public const string k_RosMessageName = "action_tutorials_interfaces/Fibonacci_Feedback"; | ||
| public override string RosMessageName => k_RosMessageName; | ||
|
|
||
| public int[] partial_sequence; | ||
|
|
||
| public FibonacciFeedback() | ||
| { | ||
| this.partial_sequence = new int[0]; | ||
| } | ||
|
|
||
| public FibonacciFeedback(int[] partial_sequence) | ||
| { | ||
| this.partial_sequence = partial_sequence; | ||
| } | ||
|
|
||
| public static FibonacciFeedback Deserialize(MessageDeserializer deserializer) => new FibonacciFeedback(deserializer); | ||
|
|
||
| private FibonacciFeedback(MessageDeserializer deserializer) | ||
| { | ||
| deserializer.Read(out this.partial_sequence, sizeof(int), deserializer.ReadLength()); | ||
| } | ||
|
|
||
| public override void SerializeTo(MessageSerializer serializer) | ||
| { | ||
| serializer.WriteLength(this.partial_sequence); | ||
| serializer.Write(this.partial_sequence); | ||
| } | ||
|
|
||
| #if UNITY_EDITOR | ||
| [UnityEditor.InitializeOnLoadMethod] | ||
| #else | ||
| [UnityEngine.RuntimeInitializeOnLoadMethod] | ||
| #endif | ||
| public static void Register() | ||
| { | ||
| MessageRegistry.Register(k_RosMessageName, Deserialize); | ||
| } | ||
| } | ||
| } |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,55 @@ | ||
| using System; | ||
| using Unity.Robotics.ROSTCPConnector.MessageGeneration; | ||
|
|
||
| namespace RosMessageTypes.ActionTutorialsInterfaces | ||
| { | ||
| /// <summary> | ||
| /// The wire-level FeedbackMessage for Fibonacci actions. | ||
| /// Layout: unique_identifier_msgs/UUID goal_id + Fibonacci_Feedback feedback. | ||
| /// </summary> | ||
| [Serializable] | ||
| public class FibonacciFeedbackMessage : Message | ||
| { | ||
| public const string k_RosMessageName = "action_tutorials_interfaces/Fibonacci_FeedbackMessage"; | ||
| // The endpoint may also report this type with /action/ in the path | ||
| // when it refreshes the topic list from the ROS2 graph. | ||
| public const string k_RosMessageNameAlt = "action_tutorials_interfaces/action/Fibonacci_FeedbackMessage"; | ||
| public override string RosMessageName => k_RosMessageName; | ||
|
|
||
| public byte[] goal_id = new byte[16]; | ||
| public FibonacciFeedback feedback = new FibonacciFeedback(); | ||
|
|
||
| public FibonacciFeedbackMessage() { } | ||
|
|
||
| public static FibonacciFeedbackMessage Deserialize(MessageDeserializer deserializer) | ||
| => new FibonacciFeedbackMessage(deserializer); | ||
|
|
||
| private FibonacciFeedbackMessage(MessageDeserializer deserializer) | ||
| { | ||
| // UUID is uint8[16] — 16 raw bytes, no length prefix. | ||
| goal_id = new byte[16]; | ||
| for (int i = 0; i < 16; i++) | ||
| deserializer.Read(out goal_id[i]); | ||
|
|
||
| // Feedback body follows inline. | ||
| feedback = FibonacciFeedback.Deserialize(deserializer); | ||
| } | ||
|
|
||
| public override void SerializeTo(MessageSerializer serializer) | ||
| { | ||
| serializer.Write(goal_id); | ||
| feedback.SerializeTo(serializer); | ||
| } | ||
|
|
||
| #if UNITY_EDITOR | ||
| [UnityEditor.InitializeOnLoadMethod] | ||
| #else | ||
| [UnityEngine.RuntimeInitializeOnLoadMethod] | ||
| #endif | ||
| public static void Register() | ||
| { | ||
| MessageRegistry.Register(k_RosMessageName, Deserialize); | ||
| MessageRegistry.Register(k_RosMessageNameAlt, Deserialize); | ||
| } | ||
| } | ||
| } |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,46 @@ | ||
| using System; | ||
| using Unity.Robotics.ROSTCPConnector.MessageGeneration; | ||
|
|
||
| namespace RosMessageTypes.ActionTutorialsInterfaces | ||
| { | ||
| [Serializable] | ||
| public class FibonacciGoal : Message | ||
| { | ||
| public const string k_RosMessageName = "action_tutorials_interfaces/Fibonacci_Goal"; | ||
| public override string RosMessageName => k_RosMessageName; | ||
|
|
||
| public int order; | ||
|
|
||
| public FibonacciGoal() | ||
| { | ||
| this.order = 0; | ||
| } | ||
|
|
||
| public FibonacciGoal(int order) | ||
| { | ||
| this.order = order; | ||
| } | ||
|
|
||
| public static FibonacciGoal Deserialize(MessageDeserializer deserializer) => new FibonacciGoal(deserializer); | ||
|
|
||
| private FibonacciGoal(MessageDeserializer deserializer) | ||
| { | ||
| deserializer.Read(out this.order); | ||
| } | ||
|
|
||
| public override void SerializeTo(MessageSerializer serializer) | ||
| { | ||
| serializer.Write(this.order); | ||
| } | ||
|
|
||
| #if UNITY_EDITOR | ||
| [UnityEditor.InitializeOnLoadMethod] | ||
| #else | ||
| [UnityEngine.RuntimeInitializeOnLoadMethod] | ||
| #endif | ||
| public static void Register() | ||
| { | ||
| MessageRegistry.Register(k_RosMessageName, Deserialize); | ||
| } | ||
| } | ||
| } |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,47 @@ | ||
| using System; | ||
| using Unity.Robotics.ROSTCPConnector.MessageGeneration; | ||
|
|
||
| namespace RosMessageTypes.ActionTutorialsInterfaces | ||
| { | ||
| [Serializable] | ||
| public class FibonacciResult : Message | ||
| { | ||
| public const string k_RosMessageName = "action_tutorials_interfaces/Fibonacci_Result"; | ||
| public override string RosMessageName => k_RosMessageName; | ||
|
|
||
| public int[] sequence; | ||
|
|
||
| public FibonacciResult() | ||
| { | ||
| this.sequence = new int[0]; | ||
| } | ||
|
|
||
| public FibonacciResult(int[] sequence) | ||
| { | ||
| this.sequence = sequence; | ||
| } | ||
|
|
||
| public static FibonacciResult Deserialize(MessageDeserializer deserializer) => new FibonacciResult(deserializer); | ||
|
|
||
| private FibonacciResult(MessageDeserializer deserializer) | ||
| { | ||
| deserializer.Read(out this.sequence, sizeof(int), deserializer.ReadLength()); | ||
| } | ||
|
|
||
| public override void SerializeTo(MessageSerializer serializer) | ||
| { | ||
| serializer.WriteLength(this.sequence); | ||
| serializer.Write(this.sequence); | ||
| } | ||
|
|
||
| #if UNITY_EDITOR | ||
| [UnityEditor.InitializeOnLoadMethod] | ||
| #else | ||
| [UnityEngine.RuntimeInitializeOnLoadMethod] | ||
| #endif | ||
| public static void Register() | ||
| { | ||
| MessageRegistry.Register(k_RosMessageName, Deserialize); | ||
| } | ||
| } | ||
| } |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Now that
GenerateSingleActionalways generates an additional*FeedbackMessage.cs,GetActionClassPaths()(used byMessageGenBrowserto determine whether an action is “built”) should be updated to include that new output. Otherwise the UI can report a .action as built even when the FeedbackMessage file is missing/out-of-date.