From 494050fa61929eff3c78be57c1b30449cf6f40fc Mon Sep 17 00:00:00 2001 From: Simeone Dussoni <31098248+simeonedussoni@users.noreply.github.com> Date: Fri, 27 Oct 2023 16:56:49 +0200 Subject: [PATCH 1/5] updated documentation for fingertips mk.2 (#323) Co-authored-by: Ugo Pattacini --- docs/hands/fingertip_and_mma_mk5.md | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/docs/hands/fingertip_and_mma_mk5.md b/docs/hands/fingertip_and_mma_mk5.md index 863dfb8fc..3b9d35ba4 100644 --- a/docs/hands/fingertip_and_mma_mk5.md +++ b/docs/hands/fingertip_and_mma_mk5.md @@ -46,21 +46,24 @@ The complete configuration set is as follow: |ring | 0 | 1 | no | 1 | 17546 | |pink | 1 | 0 | no | 0 | 17545 | -#### ergoCub SN001 +#### ergoCub equipped with MMA rev. B (from ergoCub SN001) + +These robots are equipped with the MMA rev. B **IITCODE 16872.B** | finger | AD0 | AD1 | IMU | I2C dataline | IIT code | |:--:|:--:|:--:|:--:|:--:|:--:| -|thumb | 0 | 0 | IIM-42652 | 0 | 17544.A | -|index | 0 | 0 | IIM-42652 | 1 | 17544.A | -|middle | 1 | 0 | LSM6DSLTR | 1 | 17545.A | -|ring | 0 | 1 | no | 1 | 17546 | -|pink | 1 | 0 | LSM6DSLTR | 0 | 17545.A | +|thumb | 0 | 0 | IIM-42652 | 0 | 15467.B | +|index | 0 | 0 | IIM-42652 | 1 | 15467.B | +|middle | 0 | 0 | IIM-42652 | 2 | 15467.B | +|ring | 0 | 0 | IIM-42652 | 3 | 15467.B | +|pink | 0 | 0 | IIM-42652 | 4 | 15467.B | + +No customization of the boards is needed. They are purchased with the correct jumper configuration. -#### ergoCub equipped with MMA rev. B I2C dataline is decided at the MMA level through the connector assignment. -The MTB to be mounted should be equipped with a dedicated firmware to enable the use of **PIN 7** -in the connector as an additional I2C line. +The MTB to be mounted should be equipped with a **dedicated firmware** to enable the use of **PIN 7** +in the connector as an additional I2C line (SDA_4). ### Mounting the 3DMID @@ -103,7 +106,7 @@ Plus: Fig.4 - fixing the 3DMID to the soldering support.

-- Fix the 3DMID to the soldering support with 1.6x6mm screw. +- Fix the 3DMID to the soldering support with **1.6x6mm** screw. - Plug the soldering support on the base.

From 529d74872ed6f0881865c9f37d459420a680d8fd Mon Sep 17 00:00:00 2001 From: Martina Gloria <114698424+martinaxgloria@users.noreply.github.com> Date: Fri, 27 Oct 2023 17:01:50 +0200 Subject: [PATCH 2/5] First attempt to add ergocub sw documentation (#318) Co-authored-by: Ugo Pattacini --- .../ergocub_torso/install_from_scratch.md | 15 +++++ docs/ergocub_operating_systems/index.md | 14 ++++ docs/ergocub_operating_systems/network.md | 64 +++++++++++++++++++ .../icubos/installation-from-scratch.md | 4 +- docs/icub_operating_systems/icubos/jetpack.md | 39 +++++------ .../icub-server-from-scratch.md | 2 +- docs/icub_sw.md | 2 + docs/index.md | 2 +- mkdocs.yml | 7 ++ 9 files changed, 127 insertions(+), 22 deletions(-) create mode 100644 docs/ergocub_operating_systems/ergocub_torso/install_from_scratch.md create mode 100644 docs/ergocub_operating_systems/index.md create mode 100644 docs/ergocub_operating_systems/network.md diff --git a/docs/ergocub_operating_systems/ergocub_torso/install_from_scratch.md b/docs/ergocub_operating_systems/ergocub_torso/install_from_scratch.md new file mode 100644 index 000000000..004c28fce --- /dev/null +++ b/docs/ergocub_operating_systems/ergocub_torso/install_from_scratch.md @@ -0,0 +1,15 @@ +# Install from scratch + +`ergocub-torso` is based on Ubuntu server 22.04, we will install it from the default installer and then we manually customize it. + +To install the OS from scratch, please follow [this guide](../../icub_operating_systems/icubos/installation-from-scratch.md), being careful to install the [**Ubuntu 22.04 LTS Server**](https://releases.ubuntu.com/focal). + +!!! note + Remember to substitute the references to **`icub`** and **`icub-head`** respectively with **`ergocub`** and **`ergocub-torso`**. + +To synchronize the system date and time, edit the file `/etc/default/ntpdate` by changing the following lines: + +``` +NTPDATE_USE_NTP_CONF="no" +NTPSERVERS="10.0.2.1 ntp.ubuntu.com" +``` diff --git a/docs/ergocub_operating_systems/index.md b/docs/ergocub_operating_systems/index.md new file mode 100644 index 000000000..0ff43e051 --- /dev/null +++ b/docs/ergocub_operating_systems/index.md @@ -0,0 +1,14 @@ +# Introduction + +This manual describes how to install and customize the linux operating systems required to run on machines in the ergoCub enviroment. + +The ergoCub robot relies on two machines: `ergocub-head`, a [`NVIDIA Jetson Xavier AGX`](https://www.nvidia.com/en-us/autonomous-machines/embedded-systems/jetson-xavier-series/) used to control the realsense camera, the lidar and the OLED display, and `ergocub-torso`, which is a [`COM express type 10`](https://www.advantech.com/en-eu/products/0a009637-4f9d-4541-8624-a55de3ffb2a6/som-7583/mod_17ca9251-bdf5-4f74-9256-edd63a373b39) that controls the motors. + +# OS configurations + +The following guides will help you to properly configure the OS for the specific board. + +- [ergocub-head](../icub_operating_systems/icubos/jetpack.md) +- [ergocub-torso](ergocub_torso/install_from_scratch.md) + +Alternatively, you can download the OS pre-built images [here](../icub_operating_systems/download.md). diff --git a/docs/ergocub_operating_systems/network.md b/docs/ergocub_operating_systems/network.md new file mode 100644 index 000000000..f5405ab91 --- /dev/null +++ b/docs/ergocub_operating_systems/network.md @@ -0,0 +1,64 @@ +# ergoCub network + +The network on ergocub can be divided in two parts: + +- **internal network (10.0.1.0/24)**: it connects `ergocub-torso` to all the motor controller boards on the robot, it is a segregated network (there is no connection from the nodes on its subnet and the ouside world) and it is used to send motor commands from ergocub-torso to motor control boards; +- **extenal network (10.0.2.0/24)**: it is managed by the ergocub-server and it connects all the ergoCub machines together, handling the internet connection too. This connection can be _wired_ or _wireless_; +- **backup network (10.0.0.0/24)**: this is a backup/troubleshoot network for connecting directly to the robot in case of not reaching the external network. + + +## ergoCub network interfaces + +- `ergocub-torso` + + On ergocub-torso, one of the two ethernet interfaces is connected to the internal network. The other one, instead, is directly connected to ergocub-head via backup network. + +- `ergocub-head` + + On ergocub-head, the ethernet interfaces are bridged together on the backup network. + +Both head and torso are connected to the external network via WiFi. + +## IP addresses and other network configurations + +Below you can find the default network parameters of the ergoCub networks. + +### Internal network configurations + +This configuration depends deeply on the motor control board firmware and thus it can't be changed. + +- **IP address** : 10.0.1.104 - _STATIC_ +- **Netmask** : 255.255.255.0 + +Since this is a segregated network, there is no default gateway. + +### External network configurations + +Usually, it is a static configuration, but it works also in DHCP mode. This configuration _can be changed_ but it is not recommended. + +For `ergocub-torso`: + +- **WiFi IP address** : 10.0.2.2 +- **Netmask** : 255.255.255.0 +- **Default Gateway** : 10.0.2.1 +- **DNS server** : 10.0.2.1 + +For `ergocub-head`: + +- **WiFi IP address** : 10.0.2.3 +- **Netmask** : 255.255.255.0 +- **Default Gateway** : 10.0.2.1 +- **DNS server** : 10.0.2.1 + +### Backup network configurations + +For `ergocub-torso`: + +- **IP address** : 10.0.0.2 +- **Netmask** : 255.255.255.0 + +For `ergocub-head`: + +- **IP address** : 10.0.0.3 +- **Netmask** : 255.255.255.0 + diff --git a/docs/icub_operating_systems/icubos/installation-from-scratch.md b/docs/icub_operating_systems/icubos/installation-from-scratch.md index 049d1fada..2b9cb8589 100644 --- a/docs/icub_operating_systems/icubos/installation-from-scratch.md +++ b/docs/icub_operating_systems/icubos/installation-from-scratch.md @@ -1,6 +1,6 @@ # The OS on icub-head - Installation from scratch -Since iCubOS is based on the Ubuntu server, we will install it from the default installer and then manually customize it. +Since iCubOS is based on the Ubuntu server, we will install the latter from the default installer and then manually customize it. ## Latest versions @@ -40,7 +40,7 @@ Install the system by choosing the default options, except for the following ste #### Identity - **Your name** : `icub` -- **Your Server's name** : `icub-head' +- **Your Server's name** : `icub-head` - **Pick a username** : `icub` - **Choose a password** : `icub` diff --git a/docs/icub_operating_systems/icubos/jetpack.md b/docs/icub_operating_systems/icubos/jetpack.md index 601ff01a7..860c869da 100644 --- a/docs/icub_operating_systems/icubos/jetpack.md +++ b/docs/icub_operating_systems/icubos/jetpack.md @@ -1,7 +1,8 @@ # The NVIDIA JetPack - Introduction -This guide is intended for a developer that wants to flash and setup the Nvidia Jetson Xavier board for the iCub head. -The unit uses a [ConnectTech carrier board](https://connecttech.com/product/quark-carrier-nvidia-jetson-xavier-nx/), so the preliminary instructions will be focused on that specific hardware. +This guide is intended for developers who want to flash and set up the [Nvidia Jetson Xavier boards](https://www.nvidia.com/en-us/autonomous-machines/embedded-systems/jetson-xavier-series/) (i.e., AXG, NX). + +These units use a ConnectTech carrier board ([Quark](https://connecttech.com/product/quark-carrier-nvidia-jetson-xavier-nx/) for the Xavier NX, [Rogue](https://connecttech.com/product/rogue-carrier-nvidia-jetson-agx-xavier/) for the AGX), so the preliminary instructions will be focused on that specific hardware. # Requirements @@ -9,7 +10,7 @@ The unit uses a [ConnectTech carrier board](https://connecttech.com/product/quar - x86 PC/laptop for downloading Jetpack and flashing the OS - USB-C to USB-A (or USB-C to USB-C) cable to connect the PC to the ConnecTech carrier - Power supply cable -- Bench/System/ATE programmable DC power supply, capable of supplying 20V / 2A +- Bench/System/ATE programmable DC power supply, capable of supplying 20V/2A - (optional) Ethernet cable to connect the Xavier to access it with SSH To use the Xavier directly without SSHing into it: @@ -23,8 +24,7 @@ On the developer's host PC: - Nvidia JetPack installed through SDK Manager (instructions below) - Xavier [Connecttech BSP](https://connecttech.com/product/quark-carrier-nvidia-jetson-xavier-nx/) for the `board_type` board (e.g. AGX, NX) and JetPack `jetpack_ver`(e.g 4.4.2, 5.0.2). (Not required if you already have the image ready to flash) - -# Intructions +# Instructions ## Carrier hardware configuration Make sure that the switches on the carrier are set like in the picture below, so that the unit can boot manually when pressing the power (PWR) button. DO NOT power on the unit until instructed. @@ -33,10 +33,10 @@ Make sure that the switches on the carrier are set like in the picture below, so ## Hardware connection -1. Connect the carrier to the power supply through the provided cable, and set the power supply to 16V / 2A +1. Connect the carrier to the power supply through the provided cable, and set the power supply to 16V/2A. 2. Keep the power supply OFF. 3. Connect the HDMI cable, and the mouse/keyboard to the carrier. -4. Use the USB-C cable to connect the PC to the OTG USB port on the carrier +4. Use the USB-C cable to connect the PC to the OTG USB port on the carrier. ![](../img/usbotg.jpg) @@ -48,16 +48,15 @@ If you need to install an new JetPack image from scratch please follow the follo ### Jetpack setup on the host 1. Download the Nvidia SDK manager from the [official website](https://developer.nvidia.com/embedded/jetpack) by clicking *Download Nvidia SDK Manager* - 2. Run SDKManager and login with developer.nvidia.com credentials, and follow these steps: 1. Set the following options: - Target Hardware: Jetson Xavier `board_type` - Target operating system: *Linux Jetpack `jetpack_ver`*. 2. Check that everything is selected and continue - 3. The SDKManager will ask the user password to download all the components and it will install them into a local folder on the host (~12Gb of free space required); Remember, this is the password of the local Ubuntu host, not the Jetson Xavier. - 4. After the installation, the SDK Manager will be ready to flash the OS image on the Xavier; **Do not preceed further!** Press SKIP to abort the operation and quit from the SDK Manager -3. Download the ConnectTech board support package from the [official website](https://connecttech.com/product/quark-carrier-nvidia-jetson-xavier-nx/): under Downloads click on the bsp you need, it will be downloaded as `.tgz` archive. -4. At this point the `sdkManager` should have created a folder tree in `~/nvidia` containing all the files needed for the flash. Copy the `.tgz` package downloaded from Connectech website into `~/nvidia/nvidia_sdk/JetPack__Linux_/Linux_for_Tegra/` + 3. The SDKManager will ask the user password to download all the components and it will install them into a local folder on the host (~12Gb of free space required); remember: this is the password of the local Ubuntu host, not the Jetson Xavier. + 4. After the installation, the SDK Manager will be ready to flash the OS image on the Xavier; **Do not preceed further!** Press SKIP to abort the operation and quit from the SDK Manager +3. Download the ConnectTech board support package from the [official website](https://connecttech.com/product/quark-carrier-nvidia-jetson-xavier-nx/): under Downloads click on the BSP you need, it will be downloaded as `.tgz` archive. +4. At this point the `sdkManager` should have created a folder tree in `~/nvidia` containing all the files needed for the flash. Copy the `.tgz` package downloaded from ConnectTech website into `~/nvidia/nvidia_sdk/JetPack__Linux_/Linux_for_Tegra/` 5. Extract the BSP: `tar -xzf CTI-<*>.tgz` Before flashing the image, we need first to put the board in recovery mode. @@ -65,14 +64,17 @@ Before flashing the image, we need first to put the board in recovery mode. ### Booting the Xavier in Recovery mode -With the Nvidia Jetson Xavier AGX: +With the **Nvidia Jetson Xavier AGX**: + 1. Press the Force Recovery (FR) button on the carrier and keep it pressed 2. Turn on the power supply (16V) 3. Wait for several seconds, keeping the FR button pressed 4. Press the power (PWR) button for at least one second. Wait for several seconds -5. Release the FR button. Now the board is programming mode +5. Release the FR button. + +Now the board is programming mode. -With a Nvidia Jetson Xavier NX, instead, keep the button RST/RECOVERY pressed for several seconds and then, when released, the board will be in recovery mode. +With a **Nvidia Jetson Xavier NX**, instead, keep the button RST/RECOVERY pressed for several seconds and then, when released, the board will be in recovery mode. In order to check that the board went in recovery mode, run on a terminal in the host @@ -92,7 +94,7 @@ At this point we are ready to flash, in the host: 1. Change into the CTI-L4T directory: `cd ./CTI-L4T` 2. Run the install script (as root or sudo) to automatically install the BSP files to the correct locations: `sudo ./install.sh` -[Here](https://connecttech.com/resource-center/kdb373/) you can find the tutorial about the procedure by Connecttech. +[Here](https://connecttech.com/resource-center/kdb373/) you can find the tutorial about the procedure by ConnectTech. ### Verify the installation @@ -103,11 +105,12 @@ After configuring the system, the Xavier should boot normally and be ready to us #### Complete the OEM installation After booting into the OS, follow the OEM installation with the following options: + 1. Accept the license agreement 2. Select English language 3. Select the English (US) keyboard layout 4. Select the preferred time zone -5. User the user name `icub` with the hostname `icub-head-cam` +5. Set the user name to `icub` with the hostname `icub-head-cam` or `ergocub` with hostname `ergocub-head`, depending on the robot the board will be mounted on 6. Allow login without password 7. Let the installation process finish @@ -128,7 +131,7 @@ For example **Jetpack 4.5.1**, which uses **Cuda 10.2** do: sudo apt install cuda-libraries-dev-10-1 cuda-nvcc-10-2 ``` -Then, append to the `.bashrc` file located in `/home/icub/`: +Then, within the `.bashrc`: ```bash export CUDA_HOME=/usr/local/cuda-10.2 diff --git a/docs/icub_operating_systems/other-machines/icub-server-from-scratch.md b/docs/icub_operating_systems/other-machines/icub-server-from-scratch.md index 5ae15d174..46aa264b6 100644 --- a/docs/icub_operating_systems/other-machines/icub-server-from-scratch.md +++ b/docs/icub_operating_systems/other-machines/icub-server-from-scratch.md @@ -1,5 +1,5 @@ # The iCub Dedicated Server - Installation from scratch -Since iCubOS is based on Ubuntu server, we will install Ubuntu server from the default installer and the we manually costimize it. +Since iCubOS is based on Ubuntu server, we will install Ubuntu server from the default installer and then we manually customize it. ## Latest versions Latest version is based on Ubuntu Server 20.04.2 diff --git a/docs/icub_sw.md b/docs/icub_sw.md index 35a8c4c98..656a00101 100644 --- a/docs/icub_sw.md +++ b/docs/icub_sw.md @@ -3,8 +3,10 @@ - [`Software Installation`](./sw_installation/index.md) - [`Software Versioning Table`](./sw_versioning_table/index.md) - [`The OS for the iCub environment`](./icub_operating_systems/index.md) +- [`The OS for the ergoCub environment`](./ergocub_operating_systems/index.md) - [`The YARP Documentation`](https://yarp.it/latest/) - [`The iCub Software Documentation`](https://robotology.github.io/robotology-documentation/doc/html/index.html) +- [`The ergoCub Software Documentation`](https://icub-tech-iit.github.io/ergocub-software/) - [`How to set up multiple iCubs on the same network`](./icub_setup_multiple_robots/index.md) - [`iCub Firmware`](./icub_firmware/index.md) - [`iCub Microphones`](./icub_microphones/icub_microphones.md) diff --git a/docs/index.md b/docs/index.md index f811ef723..f6f93d317 100644 --- a/docs/index.md +++ b/docs/index.md @@ -9,4 +9,4 @@ #### [:gear:{.blink} Documentation resources on the `iCub Hardware`](icub_hw.md) -#### [:computer:{.blink} Documentation resources on the `iCub Software`](icub_sw.md) +#### [:computer:{.blink} Documentation resources on the `iCub Software`](icub_sw.md) \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index fab0d988f..6f19c866c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -209,6 +209,13 @@ nav: - Manual Installation: - icub-head: sw_installation/icub_head_manual.md - Software Versioning Table: sw_versioning_table/index.md + - The OS for the ergoCub environment: + - Summary: ergocub_operating_systems/index.md + - Network: ergocub_operating_systems/network.md + - ergocub-head: + - Jetpack installation: icub_operating_systems/icubos/jetpack.md + - ergocub-torso: + - Installation from scratch: ergocub_operating_systems/ergocub_torso/install_from_scratch.md - The OS for the iCub environment: - Summary: icub_operating_systems/index.md - The OS on icub-head: From 242632b722497d56e645ec190774e108e48711d1 Mon Sep 17 00:00:00 2001 From: Ugo Pattacini Date: Mon, 30 Oct 2023 09:16:08 +0100 Subject: [PATCH 3/5] Update canLoader.md --- docs/icub_firmware/canLoader/canLoader.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/icub_firmware/canLoader/canLoader.md b/docs/icub_firmware/canLoader/canLoader.md index ec177f428..8f7ac5ee7 100644 --- a/docs/icub_firmware/canLoader/canLoader.md +++ b/docs/icub_firmware/canLoader/canLoader.md @@ -27,7 +27,7 @@ The device type is the software module that wraps the can bus device you are usi ## Standard firmware update (DSP) The firmware upgrade of the whole robot is performed using a script based on a command line version of the [CanLoader](../canLoader/canLoader.md) module. Before you try to use this script please check that this module is compiled on the pc104. You should also make sure that the hardware modules it needs (controlboard, canmotioncontrol, ecan/pcan/cfw2can) are compiled and liked correctly (this is usually the case on the robot pc104). -Please notice that the firmware upgrade is delicate procedure which changes one of the core parts of the iCub robot software (and therefore requires a corresponding update of the yarp and iCub modules). If you decide to perform a firmware upgrade, be aware that this might change the robot motor behaviour quite a lot. Nevertheless, a firmware upgrade is always recommended because it usually corresponds to improvements in the control board performances. Finally, remember to perform the firmware update with your robot in a 'clean' state (i.e. control boards have been just turned on, and iCubinterface has not run yet). +Please, notice that the firmware upgrade is delicate procedure which changes one of the core parts of the iCub robot software (and therefore requires a corresponding update of the yarp and iCub modules). If you decide to perform a firmware upgrade, be aware that this might change the robot motor behaviour quite a lot. Nevertheless, a firmware upgrade is always recommended because it usually corresponds to improvements in the control board performances. Finally, remember to perform the firmware update with your robot in a 'clean' state (i.e. control boards have been just turned on, and iCubinterface has not run yet). Here are the steps to perform the firmware update: @@ -56,7 +56,7 @@ The .txt file simply contains a list of board addresses and associated firmware where: -- canModule can be either pcan (if you are using the PLX custom board) or ecan (if you are using the commercial usb to can interface produced by [ESD](http://www.esd-electronics.com/)) or cfw2can (if you are using the custom CFW2 board). +- canModule can be either pcan (if you are using the PLX custom board) or ecan (if you are using the commercial usb to can interface produced by [ESD](https://esd.eu/) or cfw2can (if you are using the custom CFW2 board). - canDeviceNum is the CAN line identifier (i.e: 0 for the head, 1 for the left arm, 2 for the right arm, etc..) - boardID is the board address (0...14) on the selected CAN line. - firmware is the firmware binary file (*.s for motorola-based boards, *.hex for DSPIC-based board) From 819e6cbbbe6c57431f0deddc452edd74807d01c1 Mon Sep 17 00:00:00 2001 From: Ugo Pattacini Date: Mon, 30 Oct 2023 10:36:01 +0100 Subject: [PATCH 4/5] Update linkcheckerrc --- scripts/linkchecker/linkcheckerrc | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/linkchecker/linkcheckerrc b/scripts/linkchecker/linkcheckerrc index 4b1f2abaf..71539c9ee 100644 --- a/scripts/linkchecker/linkcheckerrc +++ b/scripts/linkchecker/linkcheckerrc @@ -1,5 +1,6 @@ [checking] threads=20 +timeout=300 sslverify=0 [output] From 5d919960f2d71e25d845b1eb4b899ed0c389ae43 Mon Sep 17 00:00:00 2001 From: Ugo Pattacini Date: Mon, 30 Oct 2023 10:58:34 +0100 Subject: [PATCH 5/5] Update support.md --- docs/upgrade_kits/realsense_holder/support.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/upgrade_kits/realsense_holder/support.md b/docs/upgrade_kits/realsense_holder/support.md index 6604538f3..b514ea5e9 100644 --- a/docs/upgrade_kits/realsense_holder/support.md +++ b/docs/upgrade_kits/realsense_holder/support.md @@ -29,7 +29,7 @@ It ensures the compatibility with more RealSense models. | 2 | V4-16--_-_ISO7045_CZ| | screw - M4 x 16 - UNI7687 , DIN7985A , ISO7045 - SS A2 - pozidriv cross recessed pan head |11963| ## Historical review -This upgrade kit has been developed together with the [HSP@IIT](https://www.iit.it/web/humanoid-sensing-and-perception) research line as an optional plug-in support to improve iCub perception and facilitate it in grasping tasks iCub. For reference, see also the page [design holder realsense](https://github.com/icub-tech-iit/design-holder-realsense). +This upgrade kit has been developed together with the [HSP@IIT](https://hsp.iit.it/) research line as an optional plug-in support to improve iCub perception and facilitate it in grasping tasks iCub. For reference, see also the page [design holder realsense](https://github.com/icub-tech-iit/design-holder-realsense).