├── .gitignore ├── imgs ├── robotic_processing_unit.png ├── 0_robotic_processing_unit.png ├── 1_robotic_processing_unit.png ├── 2_robotic_processing_unit.png ├── 3_robotic_processing_unit.png ├── 4_robotic_processing_unit.png ├── 5_robotic_processing_unit.png ├── accelerationrobotics_logo.png └── robotcore_robotic_processing_unit.png ├── mechanical ├── robotic_processing_unit_base.stl ├── robotic_processing_unit_cover.stl ├── robotic_processing_unit_kr260.stl └── robotic_processing_unit_agx_orin.stl └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | -------------------------------------------------------------------------------- /imgs/robotic_processing_unit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-acceleration/robotic_processing_unit/HEAD/imgs/robotic_processing_unit.png -------------------------------------------------------------------------------- /imgs/0_robotic_processing_unit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-acceleration/robotic_processing_unit/HEAD/imgs/0_robotic_processing_unit.png -------------------------------------------------------------------------------- /imgs/1_robotic_processing_unit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-acceleration/robotic_processing_unit/HEAD/imgs/1_robotic_processing_unit.png -------------------------------------------------------------------------------- /imgs/2_robotic_processing_unit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-acceleration/robotic_processing_unit/HEAD/imgs/2_robotic_processing_unit.png -------------------------------------------------------------------------------- /imgs/3_robotic_processing_unit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-acceleration/robotic_processing_unit/HEAD/imgs/3_robotic_processing_unit.png -------------------------------------------------------------------------------- /imgs/4_robotic_processing_unit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-acceleration/robotic_processing_unit/HEAD/imgs/4_robotic_processing_unit.png -------------------------------------------------------------------------------- /imgs/5_robotic_processing_unit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-acceleration/robotic_processing_unit/HEAD/imgs/5_robotic_processing_unit.png -------------------------------------------------------------------------------- /imgs/accelerationrobotics_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-acceleration/robotic_processing_unit/HEAD/imgs/accelerationrobotics_logo.png -------------------------------------------------------------------------------- /imgs/robotcore_robotic_processing_unit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-acceleration/robotic_processing_unit/HEAD/imgs/robotcore_robotic_processing_unit.png -------------------------------------------------------------------------------- /mechanical/robotic_processing_unit_base.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-acceleration/robotic_processing_unit/HEAD/mechanical/robotic_processing_unit_base.stl -------------------------------------------------------------------------------- /mechanical/robotic_processing_unit_cover.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-acceleration/robotic_processing_unit/HEAD/mechanical/robotic_processing_unit_cover.stl -------------------------------------------------------------------------------- /mechanical/robotic_processing_unit_kr260.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-acceleration/robotic_processing_unit/HEAD/mechanical/robotic_processing_unit_kr260.stl -------------------------------------------------------------------------------- /mechanical/robotic_processing_unit_agx_orin.stl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ros-acceleration/robotic_processing_unit/HEAD/mechanical/robotic_processing_unit_agx_orin.stl -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Robotic Processing Unit 2 | 3 | The Robotic Processing Unit (`RPU`[^2]) is a robot-specific processing unit that uses hardware acceleration and maps robotics computations efficiently to its CPUs, FPGAs and GPUs to obtain best performance. In particular, it specializes in improving the **Robot Operating System (ROS 2)** related robot computational graphs on underlying compute resources. 4 | 5 | ![](imgs/robotic_processing_unit.png) 6 | 7 | - [Robotic Processing Unit](#robotic-processing-unit) 8 | - [Sponsoring the project](#sponsoring-the-project) 9 | - [Press coverage](#press-coverage) 10 | - [Goal](#goal) 11 | - [Vision](#vision) 12 | - [Milestones](#milestones) 13 | - [Build a Robotic Processing Unit](#build-a-robotic-processing-unit) 14 | - [BOM](#bom) 15 | - [Assembly instructions](#assembly-instructions) 16 | - [Buy a Robotic Processing Unit](#buy-a-robotic-processing-unit) 17 | - [Commercial Support](#commercial-support) 18 | 19 | 20 | ## Sponsoring the project 21 | 22 | 23 | 24 | *This project was originally sponsored by [Acceleration Robotics](https://accelerationrobotics.com/) and driven by the [ROS 2 Hardware Acceleration Working Group](https://github.com/ros-acceleration). We are open to additional sponsorships and collaborations. [Contact here for sponsoring](mailto:victor@accelerationrobotics.com) the Robotic Processing Unit (`RPU`) project. For commercial support regarding Robotic Processing Units, [get commercial support here](https://accelerationrobotics.com/start-buying.php). If you're looking to buy a fully assembled unit, [buy a Robotic Processing Unit here](#buy-a-robotic-processing-unit). Or instead, [build your own Robot Processing Unit here](#build-a-robotic-processing-unit)*. 25 | 26 | #### Press coverage 27 | - [Acceleration Robotics announce and open sources ROBOTCORE®, the first Robotic Processing Unit – specialized in ROS computations](https://news.accelerationrobotics.com/robotcore-first-robotic-processing-unit-specialized-ros) 28 | 29 | ## Goal 30 | Robotic Processing Units (RPUs) are robot brains, processing units for robots that map efficiently robot behaviors (programmed as ROS computational graphs) to underlying compute resources. They empower robots with the ability to react faster, consume less power, and deliver additional real-time capabilities. 31 | 32 | The goal of this project is to provide robotic architects a reference hardware blueprint for building hardware accelerated robotic brains. To do so, the project leverages *existing off-the-shelf* hardware acceleration development platforms will be used to prototype a robot-specific processing unit that performs best when it comes to ROS 2 and robot computational graphs. 33 | 34 | #### Vision 35 | The vision is that Robotic Processing Units will empower robots with the ability to react faster (*lower latency*, higher throughput), consume less power, and deliver additional real-time capabilities with their custom compute architectures that fit best the usual robotics pipelines. This includes tasks across *sensing, perception, mapping, localization, motion control, low-level control and actuation*. 36 | 37 | 38 | #### Milestones 39 | 40 | **Milestone 1: first demonstrators** - *raise awareness* 41 | - [x] [Robotic Processing Unit (`RPU`) project announcement](https://news.accelerationrobotics.com/hardware-accelerated-ros2-pipelines/#new-subproject-robotic-processing-unit-rpu) 42 | - [x] RFC to receive feedback and interest https://forms.gle/d4rCCoLpx9ciPiau9 43 | - [x] Use cases driving the architecture and the development 44 | - [x] Perception (`image_pipeline` and friends) 45 | - [x] [`perception_2nodes`](https://github.com/ros-acceleration/acceleration_examples/tree/main/graphs/perception/perception_2nodes) 46 | - [x] [`perception_3nodes`](https://github.com/ros-acceleration/acceleration_examples/tree/main/graphs/perception/perception_3nodes) 47 | - [ ] *Maybe consider a more elaborated graph with multi-processing paths involving more complex CV crunching, e.g. HOG (Histogram of Oriented Gradients)*? 48 | - [ ] ~~Navigation~~ 49 | - [ ] ~~Still in dicussions, open to feedback.~~ 50 | - [x] Partition work into demonstrators, prioritize and execute 51 | - [x] Disclose an initial hardware reference design of the Robotic Processing Unit (**this repo**) 52 | - [ ] Disclose benchmarking results and discuss (connected to https://github.com/ros-acceleration/community/issues/10) 53 | 54 | ## Build a Robotic Processing Unit 55 | 56 | You can build your own Robotic Processing Unit by purchasing each individual part and 3D printing the corresponding [mechanical parts](mechanical/). 57 | #### BOM 58 | | Part | Quantity | 59 | |------|----------| 60 | | [`Base` (*mechanical part*)](mechanical/robotic_processing_unit_base.stl) | 1 | 61 | | [`Cover` (*mechanical part*)](mechanical/robotic_processing_unit_cover.stl) | 1 | 62 | | [`KR260 adapter` (*mechanical part*)](mechanical/robotic_processing_unit_kr260.stl) | 1 | 63 | | [`AGX Orin adapter` (*mechanical part*)](mechanical/robotic_processing_unit_agx_orin.stl) | 1 | 64 | | Kria `KR260` robotics development kit | 1 | 65 | | Jetson `AGX Orin` developer kit | 1 | 66 | | `PYBE30-Q24-S12-T` DC-DC converter | 1 | 67 | | `M5 bolt` (ISO 7046) | 4 | 68 | | `M3 bolt` (ISO 7046) | 14 | 69 | | `M3 nut` (DIN 934) | 14 | 70 | 71 | 72 | 73 | #### Assembly instructions 74 | 75 | | Step | Image | Description | 76 | |------|-------|-------------| 77 | | `0` | ![](imgs/0_robotic_processing_unit.png) | Here's the exploded view of the Robotic Processing Unit. This should help guide the process of building your own. Start by soldering the power wiring to the `KR260` and `AGX Orin` boards separately. You need to do so on the power jack pins of each one of the robotics development kits[^1].| 78 | | `1` | ![](imgs/1_robotic_processing_unit.png) | Screw `KR260` board to `KR260 adapter` with 4x `M3 bolts` (ISO7046) and 4x `M3 nuts` (DIN934).| 79 | | `2` | ![](imgs/2_robotic_processing_unit.png) | Screw `AGX Orin` board to `AGX Orin adapter` with the same original bolts included in the development kit.| 80 | | `3` | ![](imgs/3_robotic_processing_unit.png) | Connect the previously soldered wires on both dev. boards to the `PYBE30-Q24-S12-T` DC-DC converter. Power input should come from the `AGX Orin` and regulated output to the `KR260`.| 81 | | `4` | ![](imgs/4_robotic_processing_unit.png) | Screw the `PYBE30-Q24-S12-T` DC-DC converter, the `AGX orin` and the `KR260` to the `Base`. Use 10x `M3 bolts` (ISO7046) and 10x `M3 nuts` (DIN934). | 82 | | `5` | ![](imgs/5_robotic_processing_unit.png) | Finally, fix the 4 holes of the cover and join the base and cover with 4x `M5 bolts` (ISO7046). | 83 | 84 | ## Buy a Robotic Processing Unit 85 | 86 | [ROBOTCORE®](https://accelerationrobotics.com/robotcore.php) is a commercial solution of a robot-specific processing unit that helps map Robot Operating System (ROS) computational graphs to its CPUs, GPU and FPGA efficiently to obtain best performance. It empowers robots with the ability to react faster, consume less power, and deliver additional real-time capabilities. ROBOTCORE can be purchased [here](https://accelerationrobotics.com/robotcore.php). 87 | 88 | With ROBOTCORE®, Acceleration Robotics offers also the following ROS 2 API-compatible hardware acceleration tools and robot Intellectual Property (IP) cores (`robot cores`): 89 | 90 | - [ROBOTCORE® `Framework`](https://accelerationrobotics.com/robotcore-framework.php), a hardware acceleration framework for ROS and ROS 2. 91 | - [ROBOTCORE® `Cloud`](https://accelerationrobotics.com/robotcore-cloud.php), tools to speed-up ROS 2 graphs with the cloud, and in the cloud. 92 | - [ROBOTCORE® `Perception`](https://accelerationrobotics.com/robotcore-perception.php), accelerated ROS 2 robotics perception stack. ROS 2-API compatible with default perception stack. 93 | - [ROBOTCORE® `Transform`](https://accelerationrobotics.com/robotcore-transform.php), accelerated ROS 2 coordinate transformations (`tf2`). ROS 2-API compatible with default `tf2`. 94 | 95 | [![](imgs/robotcore_robotic_processing_unit.png)](https://accelerationrobotics.com/robotcore.php) 96 | 97 | 98 | ## Commercial Support 99 | 100 | For commercial support while building on top of the Robotic Processing Unit project, [reach out here](https://accelerationrobotics.com/start-buying.php). 101 | 102 | [^1]: You'll need to unscrew AGX Orin's 4 outer bolts and extract aluminum lower support to solder it properly. 103 | 104 | [^2]: We're very aware that the RPU acronym is overloaded and also used to refer to other types of processing units including *Remote Processing Unit*, *Ray Processing Unit*, *Real-time Processing Unit*, *Radio Processing Unit*, *Regional Processing Unit* or *RAID Processing Unit* among others. See [comparison for fun](https://trends.google.com/trends/explore?q=Real-time%20Processing%20Unit,Remote%20Processing%20Unit,Ray%20Processing%20Unit,Radio%20Processing%20Unit,Robotic%20Processing%20Unit). 105 | --------------------------------------------------------------------------------