# Jetson Sensors Installation
Web version: https://hackmd.io/@cocobird231/BkmIsPa5n
*`Updated: 2024/04/26`*
The package installer for sensor depends on NVIDIA Jetson.
**System requirements**:
- OS: Ubuntu 18.04 or higher (64-bit recommend)
- RAM: 4G or higher
**Now supported sensor types**:
- ZED stereo camera (the ZED and ZED X were tested)
- The ZED SDK 4.1 will be automatically downloaded and installed.
---
## Usage
### For Newly Install (No `jetson_sensors` Under Home Path)
Run the pre-install script `get-jetson-sensors-install.sh` to grab git controlled directory (renamed as `jetson_sensors`). **Make sure Jetson is connected to the internet before installation start.**
```bash
curl -fsSL ftp://61.220.23.239/rv-12/get-jetson-sensors-install.sh | bash
```
The new directory `jetson_sensors` will be created under `$HOME`.
### Module Installation
:::warning
The `static_ip` option not support yet. Always set to `dhcp` or ignore it.
:::
1. Run the script `install.sh` under `jetson_sensors` to install package for selected module.
```bash
. ~/jetson_sensors/install.sh
```
Select a number for module installation
2. Determine the network interface and IP for program to execute.
3. Reboot while installation finished. The program will be running at startup automatically.
- **The installation will automatically detect version and install ROS2, then create ROS2 workspace under `$HOME/ros2_ws`.**
- **The packages will be built and installed under `$HOME/ros2_ws`.**
:::warning
**Effects After Installation**
- Files Creation:
- Under `$HOME/jetson_sensors`
- `run.sh.tmp`
- `.modulename` (selected module pack name)
- `.moduleinterface` (interface setting)
- `.modulename` (IP setting)
- `ros2_startup.desktop.tmp` (may be deleted)
- `common.yaml` (linked to module package under ROS2 workspace)
- `service.json` (linked to module package under ROS2 workspace)
- Under `$HOME/ros2_ws`
- `build`
- `install`
- `log`
- `src`
- Under System Environment
- `/etc/xdg/autostart/ros2_startup.desktop` (startup file)
- Dependencies Installation
- Determined by `install_dependencies.sh`
:::
### Module Update
1. Run the script `install.sh` under `jetson_sensors` directory and enter `u` for update process.
```bash
. install.sh
# Enter 'u' for update process
```
2. The update process will update `codePack` under `jetson_sensors` by pulling repositories from git server.
3. After pulling, the module package will start rebuilding if module package had been installed before.
### Module Removal
1. Run the script `install.sh` under `jetson_sensors` directory and enter `r` for package remove process.
```bash
. install.sh
# Enter 'r' for update process
```
The files which describes under **Effects After Installation** section will be removed except the files installed from `install_dependencies.sh`.
### Parameters Setting for ROS2
Settings may be varient in different sensors, but there are some common parameters need to be changed:
1. Device node name (under `generic_prop` tag)
2. Device ID (under `generic_prop` tag)
3. Topic name (may be one or more)
4. Publish interval (Need to be float, e.g. not `1` but `1.0`)
Modify the settings under `$HOME/jetson_sensors/common.yaml` and reboot device.
![](https://hackmd.io/_uploads/Hy4Efgk1a.png)
---
### One Line Command
:::success
The `install.sh` now supported parser installation. (2023/07/25)
:::
The package installation, updating and removal functions can be done by adding some arguments while running `install.sh`.
#### **Overall arguments**
```bash!
. install.sh [[-i|--install] <package_name>] [--interface <network_interface>] [--ip [<static_ip>|dhcp]] [-rm|--remove] [-u|--update] [-p|--preserve]
```
- Command explanation
- **`-i|--install`**: install specific package from codePack to ROS2 workspace.
- **`-rm|--remove`**: remove installed packages and environment settings.
- **`-u|--update`**: update codePack without install packages.
- **`-p|--preserve`**: preserve `common.yaml` file during installation.
- **`--interface`**: determine the network interface during installation.
- **`--ip`**: determine the network ip during installation.
- Variable explanation
- **package_name**: real package name under codePack. If variable set to `auto`, the process will automatically detect current installed module settings, then install the packages.
- **network_interface**: the network interface to detect network or internet connection, e.g. `eth0` or `wlan0`.
- **static_ip**: the format should be like `ip/mask`, e.g. `192.168.1.10/16`.
:::info
- **For Commands**
The three commands `-i`, `-u` and `-rm` can be work independently. The priority order of the three commands from high to low are: `-rm` > `-u` > `-i`. That is, if three commands exists at the same time, the process will be:
1. Remove installed packages, ROS2 workspace and environment settings.
2. Update codePack without install any packages.
3. Install packages from codePack to ROS2 workspace.
The flag `-p` tells the installer to keep old `common.yaml` file. If `-p` set but `-i` not set, the `-p` will be ignored. If `-p` set but the `common.yaml` file not found, the preservation will be ignored.
The `--interface` determines the network interface for network detection or internet detection while installed program startup. The `--interface` will be ignored if `-i` not set. The `--interface` is not necessary and will be set to default `eth0`.
The `--ip` currently not support and will always set to `dhcp`. The `--ip` is not necessary and will be set to default `dhcp`.
:::
:::warning
- **For Variables**
The default value of the variables describes as following:
- `package_name`: `NONE`
- `network_interface`: `eth0`
- `static_ip`: `NONE`
The `package_name` is necessary if `-i` set. The valid name of `package_name` were shown under codePack. If the package had installed before, set `package_name` to `auto` is valid for process to auto detect the package name.
If `package_name` set to `auto`, the process will ignored `--interface` and `--ip` settings.
The `network_interface` is necessary if `--interface` set. The `network_interface` do not have any valid check mechanism, be careful of the mistyping.
The `static_ip` is necessary if `--ip` not set to `dhcp`. The `static_ip` currently not support.
:::
#### **Examples**
- Install package
```bash!
. install.sh -i <package_name> [--interface <network_interface>] [--ip [<static_ip> | dhcp]]
```
- Update codePack
```bash!
. install.sh -u
```
- Update codePack then install package
```bash!
. install.sh -i <package_name> [--interface <network_interface>] [--ip [<static_ip> | dhcp]] -u
```
- Update current package while preserve `common.yaml`
```bash!
. install.sh -u -i auto -p
```
- Remove current package
```bash
. install.sh -rm
```
- Remove current package, update codePack and install package
```bash!
. install.sh -rm -u -i <package_name> [--interface <network_interface>] [--ip [<static_ip> | dhcp]]
```