You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@KeplerC and @jeffi, after having validated a first PoC (#5) I had a closer look at the architecture and spent some time evaluating it. I didn't wanted to spend time on undesired features or change things too much without consensus, so, for now, find below some comments and thoughts that we can consider in the next meeting for upcoming iterations. @KeplerC, if you feel like prototyping any of these ideas and need help, ping me:
Current architecture
(approximate representation)
```
sequenceDiagram
par Workstation
Note left of User: Step 1
User->>User: "ros2 run fogros2 fogros2"
User->>FogROS2 server:
Note left of FogROS2 server: Waits until launchfile using FogROSLaunchDescription
Note left of User: Step 2
User->>Launch file: "ros2 launch fogros2_examples talker.launch.py"
Launch file ->> Launch file: Launch listener
Launch file ->> FogROS2 server: FogROSLaunchDescription
Note right of FogROS2 server: Triggers cloud "launch"
FogROS2 server->>FogROS2 server: Set up VPN
FogROS2 server->>Cloud: Bring up instances
FogROS2 server->>Cloud: Set up VPN
FogROS2 server-->>Cloud: Configure, deploy, launch, ...
end
Cloud ->> Cloud: Launch talker
Cloud ->> Launch file: Interoperate
```
Current proposal is sound. Leaving aside improvements that could be made on the synchronization approach followed and/or the implementation itself, I see the following aspects that could be refined for wider ROS 2 consumption (ordered by relevance):
⚠️⚠️⚠️1. integrated cloud launch and provisioning: As far as I understand, the real value of FogROS2 is on its cloud launch and provisioning extensions to ROS 2. Right now, this is implemented splitted across 1) a FogROS2 server and 2) a FogROSLaunchDescription, which need to be launched in two steps. This is unnecesary and all of it could be merged into a single step that's implemented purely as part of the Launch extensions (i.e. FogROS2 becomes then a ROS 2 extension for cloud launch and provisioning).
⚠️⚠️2. reduce code overlap, subclass: The current implementation forks launch and launch_ros (which is 👍 for a first implementation!), but not much is modified to justify a complete fork. I'd instead suggest to subclass Python abstractions and extend the subclasses as appropriate, with the FogROS2 logic. This way we'll avoid copying files unnecesarily.
⚠️3. expose capabilities at Launch-level: From a user's perspective, right now, the consumption/use of FogROS2 requires architectural-level knowledge if one wants flexibility on the cloud instances/locations/configuration,etc. Ideally, a user should be write her/his launch file and provide these details right there, without additional complexity.
👐 4. ros2 fog : I think there's merit in proposing fog tooling to manage and facilitate introspection of cloud infrastructure. Things like ros2 fog connect <instance-name> (to ssh into it), or ros2 fog list (to list current cloud instances) will be of much value.
Proposed architecture
sequenceDiagram
par Workstation
Note left of User: Step 1
User->>Launch file: "ros2 launch fogros2_examples talker.launch.py"
Launch file->>Launch file: Set up VPN
Launch file ->> Launch file: Launch listener
Launch file ->> Cloud: FogROSLaunchDescription
Note right of Launch file: Triggers cloud "launch"
Launch file->>Cloud: Bring up instances
Launch file->>Cloud: Set up VPN
Launch file-->>Cloud: Configure, deploy, launch, ...
end
Cloud ->> Cloud: Launch talker
Cloud ->> Launch file: Interoperate
Implementing this architecture could be done through the following abstractions:
FogROSLaunchDescription: LaunchDescription subclass which implements setup (e.g. VPN), and synchronization logic for provisining of cloud instances (the actual provisining does not happen in here, but it does ensure synchronization across provisioning and launch phases).
fogros2.AWS: Class that abstracts the provisioning of a machine in the Cloud for a specific provider (e.g. AWS). Should create the appropriate artifacts, dump them into a acceleration/cloud subfolder relative to the ROS 2 workspace (so that it can be later used by tooling), and launches the cloud instance. When finished, it should notify FogROSLaunchDescription main thread for synchronization alignment.
fogros2.CloudNode: A launch_ros.actions.Node subclass that launches the node in the corresponding cloudmachine (various options in here, e.g. it can also send the workspace and build it as part of the CloudNode logic, making the FogROSLaunchDescription and fogros2.AWSthinner).
Altogether, this will allow users to do something like this:
@KeplerC and @jeffi, after having validated a first PoC (#5) I had a closer look at the architecture and spent some time evaluating it. I didn't wanted to spend time on undesired features or change things too much without consensus, so, for now, find below some comments and thoughts that we can consider in the next meeting for upcoming iterations. @KeplerC, if you feel like prototyping any of these ideas and need help, ping me:
Current architecture
(approximate representation)
Current proposal is sound. Leaving aside improvements that could be made on the synchronization approach followed and/or the implementation itself, I see the following aspects that could be refined for wider ROS 2 consumption (ordered by relevance):
FogROSLaunchDescription
, which need to be launched in two steps. This is unnecesary and all of it could be merged into a single step that's implemented purely as part of the Launch extensions (i.e. FogROS2 becomes then a ROS 2 extension for cloud launch and provisioning).launch
andlaunch_ros
(which is 👍 for a first implementation!), but not much is modified to justify a complete fork. I'd instead suggest to subclass Python abstractions and extend the subclasses as appropriate, with the FogROS2 logic. This way we'll avoid copying files unnecesarily.ros2 fog connect <instance-name>
(to ssh into it), orros2 fog list
(to list current cloud instances) will be of much value.Proposed architecture
Implementing this architecture could be done through the following abstractions:
FogROSLaunchDescription
:LaunchDescription
subclass which implements setup (e.g. VPN), and synchronization logic for provisining of cloud instances (the actual provisining does not happen in here, but it does ensure synchronization across provisioning and launch phases).fogros2.AWS
: Class that abstracts the provisioning of a machine in the Cloud for a specific provider (e.g. AWS). Should create the appropriate artifacts, dump them into aacceleration/cloud
subfolder relative to the ROS 2 workspace (so that it can be later used by tooling), and launches the cloud instance. When finished, it should notify FogROSLaunchDescription main thread for synchronization alignment.fogros2.CloudNode
: Alaunch_ros.actions.Node
subclass that launches the node in the corresponding cloudmachine
(various options in here, e.g. it can also send the workspace and build it as part of the CloudNode logic, making theFogROSLaunchDescription
andfogros2.AWS
thinner).Altogether, this will allow users to do something like this:
The text was updated successfully, but these errors were encountered: