Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs: add installation steps of tools for developers #24

Merged
merged 19 commits into from
Mar 11, 2022
Merged
Show file tree
Hide file tree
Changes from 10 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@

# JetBrains IDEs
/.idea/

# VS Code
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
!.vscode/*.code-snippets
kenji-miyake marked this conversation as resolved.
Show resolved Hide resolved

# Local History for Visual Studio Code
.history/

# Built Visual Studio Code Extensions
*.vsix
2 changes: 1 addition & 1 deletion docs/installation/autoware/.pages
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
nav:
- index.md
- local-installation.md
- docker-installation.md
- source-installation.md
130 changes: 128 additions & 2 deletions docs/installation/autoware/docker-installation.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,131 @@
# Docker installation

!!! warning
!!! info

Under Construction
Since this page explains Docker-specific information, it is recommended to see [Source installation](./source-installation.md) as well if you need detailed information.

## Prerequisites

- [Git](https://git-scm.com/)

## How to set up a development environment

1. Clone `autowarefoundation/autoware` and move to the directory.

```bash
git clone https://github.com/autowarefoundation/autoware.git
```

2. Install the dependencies.

```bash
./setup-dev-env.sh docker
```

## How to set up a workspace

1. Launch a Docker container

```bash
rocker --nvidia --x11 --user --volume $HOME/autoware -- ghcr.io/autowarefoundation/autoware-universe:latest
```

See [here](https://github.com/autowarefoundation/autoware/tree/main/docker/README.md) for more advanced usage.

After that, move to the workspace in the container:

```bash
cd autoware
```

2. Create the `src` directory and clone repositories into it.

```bash
mkdir src
vcs import src < autoware.repos
```

3. Build the workspace.

```bash
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release
```

## How to update a workspace

1. Update the Docker image.

```bash
docker pull ghcr.io/autowarefoundation/autoware-universe:latest
rocker --nvidia --x11 --user --volume $HOME/autoware -- ghcr.io/autowarefoundation/autoware-universe:latest
```

2. Update the `.repos` file.

```bash
cd autoware
git pull
```

3. Update the repositories.

```bash
vcs import src < autoware.repos
vcs pull
```

4. Build the workspace.

```bash
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release
```

## Troubleshooting

Here are solutions for a few specific errors:

### cuda error: forward compatibility was attempted on non supported hw

When starting Docker with GPU support enabled for NVIDIA graphics, you may sometimes receive the following error:

```bash
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"process_linux.go:432: running prestart hook 0 caused \\\"error running hook: exit status 1, stdout: , stderr: nvidia-container-cli: initialization error: cuda error: forward compatibility was attempted on non supported hw\\\\n\\\"\"": unknown.
ERROR: Command return non-zero exit code (see above): 125
```

This usually indicates that a new NVIDIA graphics driver has been installed (usually via `apt`) but the system has not yet been restarted. A similar message may appear if the graphics driver is not available, for example because of resuming after suspend.

To fix this, restart your system after installing the new NVIDIA driver.

## Tips

### Non-native arm64 System

This section describes a process to run `arm64` systems on `amd64` systems using [`qemu-user-static`](https://github.com/multiarch/qemu-user-static).

Initially, your system is usually incompatible with `arm64` systems.
To check that:

```sh-session
$ docker run --rm -t arm64v8/ubuntu uname -m
WARNING: The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64) and no specific platform was requested
standard_init_linux.go:228: exec user process caused: exec format error
```

Installing `qemu-user-static` enables us to run `arm64` images on `amd64` systems.

```sh-session
$ sudo apt-get install qemu-user-static
$ docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
$ docker run --rm -t arm64v8/ubuntu uname -m
WARNING: The requested image's platform (linux/arm64/v8) does not match the detected host platform (linux/amd64) and no specific platform was requested
aarch64
```

To run specify `arm64` architecture for Autoware's Docker images, add the suffix `-arm64`.

```sh-session
$ docker run --rm -it ghcr.io/autowarefoundation/autoware-universe:latest-arm64
WARNING: The requested image's platform (linux/arm64) does not match the detected host platform (linux/amd64) and no specific platform was requested
root@5b71391ad50f:/autoware#
```
17 changes: 15 additions & 2 deletions docs/installation/autoware/index.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
# Installation of Autoware

!!! warning
There are two ways to set up Autoware. Choose one according to your preference.

Under Construction
## 1. Docker installation

Docker can ensure that all developers in a project have a common, consistent development environment.
It is recommended for beginners, light users, people who do not use Ubuntu.

See [here](autoware/docker-installation.md) for the detailed steps.

## 2. Source installation

Source installation is for the cases where more granular control of the installation environment is needed.
It is recommended for skilled users or people who want to customize the environment.
Note that some problems may occur depending on your local environment.

See [here](autoware/source-installation.md) for the detailed steps.
5 changes: 0 additions & 5 deletions docs/installation/autoware/local-installation.md

This file was deleted.

105 changes: 105 additions & 0 deletions docs/installation/autoware/source-installation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
# Source installation

## Prerequisites

- [Ubuntu 20.04](https://releases.ubuntu.com/20.04/)
- [Git](https://git-scm.com/)
- [Registering SSH keys to GitHub](https://github.com/settings/keys) is preferable.

```bash
sudo apt-get -y update
sudo apt-get -y install git
```

## How to set up a development environment

1. Clone `autowarefoundation/autoware` and move to the directory.

```bash
git clone https://github.com/autowarefoundation/autoware.git
cd autoware
```

2. Install the dependencies.

We use [Ansible](https://www.ansible.com/) to simplify the steps.
Please see the Ansible playbooks and roles if you want to know exactly what packages are installed.

> Note: Before installing NVIDIA libraries, confirm and agree with the licenses.

xmfcx marked this conversation as resolved.
Show resolved Hide resolved
- [CUDA](https://docs.nvidia.com/cuda/eula/index.html)
- [cuDNN](https://docs.nvidia.com/deeplearning/cudnn/sla/index.html)
- [TensorRT](https://docs.nvidia.com/deeplearning/tensorrt/sla/index.html)

```bash
./setup-dev-env.sh
```

## How to set up a workspace

1. Create the `src` directory and clone repositories into it.

Autoware uses [vcstool](https://github.com/dirk-thomas/vcstool) to construct workspaces.

```bash
cd autoware
mkdir src
vcs import src < autoware.repos
```

2. Install dependent ROS packages.

Autoware requires some ROS 2 packages in addition to the core components.
The tool `rosdep` allows an automatic search and installation of such dependencies.

```bash
source /opt/ros/galactic/setup.bash
rosdep install --from-paths src --ignore-src --rosdistro $ROS_DISTRO
```

3. Build the workspace.

Autoware uses [colcon](https://colcon.readthedocs.io/en/released/index.html) to build workspaces.
Refer to the documentation for more advanced options.

```bash
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release
```

## How to update a workspace

1. Update the `.repos` file.

```bash
cd autoware
git pull
```

2. Update the repositories.

```bash
vcs import src < autoware.repos
vcs pull
```

For Git users:

- `vcs import` is similar to `git checkout`.
- Note that it doesn't pull from the remote.
- `vcs pull` is similar to `git pull`.
- Note that it doesn't switch branches.

Refer to the [official documentation](https://github.com/dirk-thomas/vcstool) for more information.

3. Install dependent ROS packages.

```bash
source /opt/ros/galactic/setup.bash
rosdep install --from-paths src --ignore-src --rosdistro $ROS_DISTRO
```

4. Build the workspace.

```bash
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release
```
35 changes: 32 additions & 3 deletions docs/installation/index.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,36 @@
# Installation

!!! warning
## Target platforms

Under Construction
Autoware targets the platforms listed below. It may change in future versions of Autoware.

## Supported platforms
The Autoware Foundation provides no support on other platforms than those listed below.

### Architecture

- amd64
- arm64

### ROS version

- ROS 2 Galactic (**active development**)
- ROS 2 Humble (**will be supported in 2022**)

Refer to [REP-2000](https://www.ros.org/reps/rep-2000.html) for the system dependencies.

## Installation steps of Autoware

See [here](autoware) for how to install Autoware.

## Installation steps of tools for users

Some other tools are required depending on the evaluation you want to do.
For example, if you run E2E simulation, you need to install a simulator for that.

See [here](tools-for-users) for how to install the tools.

## Installation steps of tools for developers

There are also tools and settings for developers, such as Shells or IDEs.

See [here](tools-for-developers) for how to install the tools.
50 changes: 48 additions & 2 deletions docs/installation/tools-for-developers/index.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,51 @@
# Installation of tools for developers

!!! warning
## ROS 2 settings

Under Construction
### Colorizing logger output

By default, ROS 2 logger doesn't colorize the output.
To colorize it, write the following in your `.bashrc`:

```bash
export RCUTILS_COLORIZED_OUTPUT=1
xmfcx marked this conversation as resolved.
Show resolved Hide resolved
```

### Customizing the format of logger output

By default, ROS 2 logger doesn't output detailed information such as file name, function name, or line number.
To customize it, write the following in your `.bashrc`:

```bash
export RCUTILS_CONSOLE_OUTPUT_FORMAT="[{severity} {time}] [{name}]: {message} ({function_name}() at {file_name}:{line_number})"
```

See [here](https://docs.ros.org/en/rolling/Tutorials/Logging-and-logger-configuration.html#console-output-formatting) for more options.

### Enabling localhost-only communication

By default, ROS 2 communicates using multi-cast, which may unnecessarily increase the network traffic.
To avoid it, write the following in your `.bashrc`:

```bash
export ROS_LOCALHOST_ONLY=1
```

### Setting up `ROS_DOMAIN_ID`

ROS 2 nodes on the same domain can freely discover and send messages to each
other, while ROS 2 nodes on different domains cannot. All ROS 2 nodes use
domain ID 0 by default. To avoid interference between different groups of
computers running ROS 2 on the same network, a different domain ID should
be set for each group.

See [here](https://docs.ros.org/en/foxy/Concepts/About-Domain-ID.html#the-ros-domain-id)
for more information.
xmfcx marked this conversation as resolved.
Show resolved Hide resolved

To set it, write the following in your `.bashrc`:

```bash
# Replace X with the Domain ID you want to use
# Domain ID should be a number in range [0, 101] (inclusive)
export ROS_DOMAIN_ID=X
```