# Prepare the Target System ## Install Canonical Ubuntu OS Intel recommends a fresh installation of the Ubuntu distribution of the Linux OS for your target system, but this is not mandatory. Install Ubuntu 22.04 (Jammy Jellyfish) or Ubuntu 24.04 (Noble Numat). Your choice of OS version determines the compatible ROS distribution (Humble Hawksbill or Jazzy Jalisco, respectively). ::::{tab-set} :::{tab-item} **Ubuntu 24.04** :sync: jazzy Depending on your processor type, select one of the following Canonical Ubuntu 24.04 LTS variants: |Processor type|Canonical Ubuntu 24.04 LTS variant| |-|-| |Intel® Core™ Ultra Processors|[Ubuntu OS version 24.04 LTS (Noble Numat)](https://releases.ubuntu.com/24.04) Desktop image| |Other Intel® processors, including:
11th/12th/13th Generation Intel® Core™ Processors,
Intel® Processor N-series (products formerly Alder Lake-N)|24.04 LTS image for Intel IoT platforms, available at [Download Ubuntu image for Intel® IoT platforms](https://ubuntu.com/download/iot/intel-iot)| ::: :::{tab-item} **Ubuntu 22.04** :sync: humble Depending on your processor type, select one of the following Canonical Ubuntu 22.04 LTS variants: |Processor type|Canonical Ubuntu 22.04 LTS variant| |-|-| |Intel® Core™ Ultra Processors|[Ubuntu OS version 22.04 LTS (Jammy Jellyfish)](https://releases.ubuntu.com/22.04) Desktop image| |Other Intel® processors, including:
11th/12th/13th Generation Intel® Core™ Processors,
Intel® Processor N-series (products formerly Alder Lake-N)|22.04 LTS image for Intel IoT platforms, available at [Download Ubuntu image for Intel® IoT platforms](https://ubuntu.com/download/iot/intel-iot)| ::: :::: Visit the Canonical Ubuntu website to see the detailed installation instructions: [Install Ubuntu desktop](https://ubuntu.com/tutorials/install-ubuntu-desktop). ### Steps to Install Canonical Ubuntu 1. Download the ISO file from the official website, according to the table above. 2. Create a bootable flash drive by using an imaging application, such as Startup Disk Creator, which is available in a standard Ubuntu\* desktop installation. 3. After flashing the USB drive, turn off the target system, insert the USB drive, and power it on. If the target system does not boot from the USB drive, change the BIOS settings to prioritize booting from the USB drive. 4. Follow the prompts for installation with default configurations. 5. After installation, power down the system, remove the USB drive and then power up. 6. Verify Ubuntu\* is successfully installed. ### Verify that the appropriate Linux kernel is installed Run the following command to display the installed Linux kernel: ```bash uname -r ``` Depending on the processor type, the expected result is as follows: |Processor type|Expected kernel version| |-|-| |Intel® Core™ Ultra Processors|``6.5.0-44-generic``| |Other Intel® processors|``5.15.0-1060-intel-iotg``| ## Install ROS 2 Distribution To install ROS 2 on your system, follow the **ROS 2 setup guide**: ::::{tab-set} :::{tab-item} **Jazzy** :sync: jazzy [https://docs.ros.org/en/jazzy/Installation.html](https://docs.ros.org/en/jazzy/Installation.html). ::: :::{tab-item} **Humble** :sync: humble [https://docs.ros.org/en/humble/Installation.html](https://docs.ros.org/en/humble/Installation.html). ::: :::: ### ROS 2 Installation Overview When following the **ROS 2 setup with Ubuntu Deb Packages**, typically the installation includes the following steps: 1. Set up APT sources 2. Install ROS packages using APT 3. Environment setup You will find the respective setup guides for supported distributions here: ::::{tab-set} :::{tab-item} **Jazzy** :sync: jazzy [https://docs.ros.org/en/jazzy/Installation/Ubuntu-Install-Debians.html#ubuntu-debian-packages](https://docs.ros.org/en/jazzy/Installation/Ubuntu-Install-Debians.html#ubuntu-debian-packages) ::: :::{tab-item} **Humble** :sync: humble [https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html#ubuntu-debian-packages](https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html#ubuntu-debian-packages) ::: :::: ### Prepare your ROS 2 Environment In order to execute any ROS 2 command in a new shell, you first have to source the ROS 2 ``setup.bash`` and set the individual ``ROS_DOMAIN_ID`` for your ROS 2 communication graph. ::::{tab-set} :::{tab-item} **Jazzy** :sync: jazzy ```bash source /opt/ros/jazzy/setup.bash export ROS_DOMAIN_ID=42 ``` ::: :::{tab-item} **Humble** :sync: humble ```bash source /opt/ros/humble/setup.bash export ROS_DOMAIN_ID=42 ``` ::: :::: > **Note:** The value 42 serves just as an example. Use an individual ID for every ROS 2 > node that is expected to participate in a given ROS 2 graph in order to avoid conflicts > in handling messages. Get more information about **The ROS_DOMAIN_ID** in: ::::{tab-set} :::{tab-item} **Jazzy** :sync: jazzy [documentation](https://docs.ros.org/en/jazzy/Concepts/Intermediate/About-Domain-ID.html) ::: :::{tab-item} **Humble** :sync: humble [documentation](https://docs.ros.org/en/humble/Concepts/Intermediate/About-Domain-ID.html) ::: :::: #### Set up a permanent ROS 2 environment To simplify the handling of your system, you may add these lines to ``~/.bashrc`` file. In this way, the required settings are executed automatically if a new shell is launched. ::::{tab-set} :::{tab-item} **Jazzy** :sync: jazzy ```bash echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc echo "export ROS_DOMAIN_ID=42" >> ~/.bashrc ``` ::: :::{tab-item} **Humble** :sync: humble ```bash echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc echo "export ROS_DOMAIN_ID=42" >> ~/.bashrc ``` ::: :::: #### Important Notes - If you miss to source the ROS 2 setup bash script, you will not be able to execute any ROS 2 command. - If you forget to set a dedicated ``ROS_DOMAIN_ID``, the ROS 2 command will be executed and may partially behave as expected. But you have to expect a diversity of unexpected behaviors too. - Ensure you use the same ``ROS_DOMAIN_ID`` for every ROS 2 node that is expected to participate in a given ROS 2 graph. - Ensure you use an individual ``ROS_DOMAIN_ID`` for every ROS 2 communication graph, in order to avoid conflicts in message handling.