Overview

Uli SDK is a set of software libraries that implement infrastructures, services, and tools for building safe, reliable, and maintainable AI powered software for networked edge devices. Whether you are working on self driving vehicle, autonomous logistics, smart city, health care automation, factory automation, security, and military robotics, Uli SDK will provide solutions for your projects.

Infrastructure

In the interconnected world of cloud, servers, and edge devices, Uli SDK logically organizescomputing devices into subsystems and nodes. As shown in the graph below, a subsystem consists of one or more nodes. Each node has one or more comp applications, which implement related services. The services use messages to communicate with each other.

To identify the source and destination of messages, subsystems, nodes, and comp applications are assigned unique identifiers in their context. Messages between servers and clients are addressed in tuples of (Subsystem ID, Node ID, Comp ID).

The Subsystem ID and Node ID can be assigned dynamically. Similar to the DHCP server assigning IP addresses, the Id Allocator service of the Uli SDK assigns IDs to the requesting Subsystems. Once subsystem ID is assigned, the Subsystem Manager service of the subsystem then assigns IDs to the requesting Nodes in the Subsystem.

Messages are encoded into Cap’n Proto, refer to capnproto.org, for efficiency and native integration of NVIDIA ISAAC SDK. The communication of messages utilizes UDP unicast and multicast packets to transmit the messages.

The Node Manager service, implemented in each node, provides message routing. It learns from messages passing through for routing information to forward messages to destinations.No IP addresses are needed for message communication.

Services

For every service, Uli SDK specifies and implements input/output messages, internal events(events within the Comp application), state machine, and configurable parameters of that services. Related services are combined into Comp Applications.

Each Comp Application is required to have Service Register and Status Reporter services. The Service Register allows the services of the Comp Application to be discovered. The Status Reporter allows the details of status of the services to be reported to the clients.

Architecture

Uli SDK implements the orange outlined blocks in Figure 4. The blocks at the top level, Operator Controllers, Subsystem Managers, Node Managers, Comp Applications, and Proxies are composed of Services, which implement standard interfaces to the blue outlined blocks.

Tools

Uli SDK provides complete set of tools for code generation, build, and application deployment. Uli SDK code generation tools generate C++ codes for record structures, messages, services,and comp applications. The generated codes are very concise. SLOC (Source Lines Of Codes) of Uli SDK generated service is around 400 lines. Uli SDK uses “bazel”, the highly efficient build tool from Google. It is capable of cross building both x86 and ARM 64 bit libraries and applications, with or without CUDA support. It is tested in x86_64 Ubuntu 18.04 and NVIDIA Jetson boards. A set of shell scripts are also created for stage and deploy applications to network of edge devices and controllers. The scripts are capable of handling both x86 and ARM applications.

Advantages

Uli SDK presents clear advantages over other implementations by its simplicity and dynamic nature. The followings summarize the important features of Uli SDK:

  • Well defined messaging interfaces and behaviors of the services, providing interoperability between clients and services.

  • Dynamic ID assignment of subsystems and nodes, no need to have prior knowledge of IP network configurations.

  • Discovery of services and resources from networks of computing modules.

  • Service access authorization and exclusive access control of services.

  • Management of life cycles of services.

  • Monitoring the health status of services.

  • Propagation of e-stop to allow services to handle emergency situations.

  • Support various mode of operations, such as Standard, Training, Maintenance, etc.

  • Integrate with ROS1, ROS2, Foxglove Studio, NVIDIA ISAAC ROS, robotic applications and real-world simulations.

  • Automatic source code generation for data records, messages, services, and comp applications.

  • Python bindings of the generated comp applications.

  • Comprehensive code examples of C++ comp applications and Pyqt5 UI.

Licensing

Uli SDK let you create, organize, and manage access of services in networks of edge devices. It is dual licensed under open source and annual sponsorship licenses. The open source license is available under GPL and LGPLv3 open source licenses. The Uli SDK open source licensing is ideal for use cases such as open source projects with open source distribution, student/academic purposes, internal research and demonstration without external distribution,or other projects where all (L)GPL obligations can be met. The annual sponsorship Uli SDK license gives you the full rights for a year to create and distribute software on your own terms without any open source obligations. Your supports are very important for our future development of Uli SDK. Visit our website: www.ulisdk.com