From b5a5bce9c57a8fb949126ca12de62282c682932a Mon Sep 17 00:00:00 2001 From: mantelt Date: Sat, 22 Jun 2024 09:43:48 +0200 Subject: [PATCH] Some changes and fixes to documentation for RSS2024 Co-authored-by: Fu Zhengyu Co-authored-by: Per Frivik <94360401+PerFrivik@users.noreply.github.com> --- docs/images/simple_twist_mission.png | Bin 0 -> 132934 bytes docs/installation/local-installation.md | 2 +- docs/installation/rss-workspace.md | 150 +++++++++++------- docs/installation/smb-docker.md | 129 +++++++++------ docs/physical-robot/tasks/exploration.md | 2 +- docs/physical-robot/tasks/object-detection.md | 2 +- docs/rss/index.md | 14 +- docs/rss/lectures.md | 2 +- docs/rss/preparations.md | 27 ++++ ...rtefact_detection_tutorial_preparations.md | 0 .../index.md | 2 +- .../path_planning_tutorial_preparations.md | 0 .../slam_tutorial.md | 0 .../state_estimation_tutorial_preparations.md | 4 +- ...tory_optimization_tutorial_preparations.md | 0 docs/rss/tutorials/index.md | 2 +- docs/simulation/index.md | 1 + docs/simulation/tasks/exploration.md | 2 +- docs/simulation/tasks/mission-planning.md | 32 +++- docs/simulation/tasks/object-detection.md | 8 +- docs/simulation/tasks/visualisation.md | 2 +- 21 files changed, 246 insertions(+), 135 deletions(-) create mode 100644 docs/images/simple_twist_mission.png create mode 100644 docs/rss/preparations.md rename docs/rss/{preparations => tutorial_preparations}/artefact_detection_tutorial_preparations.md (100%) rename docs/rss/{preparations => tutorial_preparations}/index.md (95%) rename docs/rss/{preparations => tutorial_preparations}/path_planning_tutorial_preparations.md (100%) rename docs/rss/{preparations => tutorial_preparations}/slam_tutorial.md (100%) rename docs/rss/{preparations => tutorial_preparations}/state_estimation_tutorial_preparations.md (93%) rename docs/rss/{preparations => tutorial_preparations}/trajectory_optimization_tutorial_preparations.md (100%) diff --git a/docs/images/simple_twist_mission.png b/docs/images/simple_twist_mission.png new file mode 100644 index 0000000000000000000000000000000000000000..6fe494bbd58f8e93eadffe91e389945c9d6b4ba8 GIT binary patch literal 132934 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 literal 0 HcmV?d00001 diff --git a/docs/installation/local-installation.md b/docs/installation/local-installation.md index c1ea564..38415d9 100644 --- a/docs/installation/local-installation.md +++ b/docs/installation/local-installation.md @@ -2,7 +2,7 @@ layout: default title: Local Installation parent: Installation -nav_order: 2 +nav_order: 3 has_toc: false --- diff --git a/docs/installation/rss-workspace.md b/docs/installation/rss-workspace.md index 829d624..76845bc 100644 --- a/docs/installation/rss-workspace.md +++ b/docs/installation/rss-workspace.md @@ -22,7 +22,9 @@ nav_order: 1 {: .important } Please [create an issue](https://github.com/ETHZ-RobotX/rss_workspace/issues) for any missing library, package, driver, error, or any kind of unclear instruction related to the RSS Workspace. -The **RSS Workspace** is built to provide an out-of-the-box working environment for simulation tasks and connecting with the SMB Physical Robot. It leverages [Docker](https://www.docker.com/), [VSCode Dev Containers](https://code.visualstudio.com/docs/remote/containers) to provide a consistent and reproducible development environment across different platforms. +The **RSS Workspace** is a all-in-one development environment for the Super Mega Bot (SMB). It contains all the necessary packages, tools, and configurations to develop, simulate, and test the SMB project. + +Under the hood, the workspace uses [Docker](https://www.docker.com/) and [VSCode Dev Containers](https://code.visualstudio.com/docs/remote/containers) to provide a consistent development environment across different platforms. This has been tested on the following platforms: - βœ… Ubuntu 22.04/20.04 AMD64 @@ -38,16 +40,19 @@ For other Linux distros, the steps should be similar to Ubuntu and work for both ### Git Make sure you have installed Git on your system. ([Instructions](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)) -### VSCode -Ensure you have a working VSCode setup and that it is up to date to avoid any issues. +### VSCode + Dev Containers Extension +- Ensure you have a working VSCode setup and that it is up to date to avoid any issues. +- Install the [Remote - Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) in VSCode. -[How to set up VSCode?](https://code.visualstudio.com/learn/get-started/basics) +### **(Optional)** Install Real VNC Viewer +- Required if you want to run GUI application with VNC. +- Install Real VNC Viewer by following [the official website](https://www.realvnc.com/en/connect/download/viewer) -### Install other requirements -Follow the [preparation steps](https://github.com/ETHZ-RobotX/rss_workspace#preparation) to install the necessary requirements for the RSS Workspace. +### **(Optional)** SSH-agent +- To use SSH (for pushing commits to GitHub and connecting robots over SSH) inside container without copying your private ssh-key, you need to setup ssh-agent locally and add your ssh key to the ssh-agent. See the **preparation step 2** [here](https://github.com/ETHZ-RobotX/rss_workspace#preparation) for more details. ### **(Optional)** Fork the repository -If you want to customize your workspace and save your changes, you can fork the repository to your GitHub account and clone the forked repository. +- If you want to customize your workspace and save your changes, you can fork the repository to your GitHub account and clone the forked repository. --- @@ -55,8 +60,16 @@ If you want to customize your workspace and save your changes, you can fork the ### **Method 1**: Clone the workspace to your local file system and open it in VScode. -{: .note } -The Dev Containers extension uses "bind mounts" to source code in your local filesystem by default. While this is the simplest option, on macOS and Windows, you may encounter slower disk performance when using `catkin build` or other disk-intensive operations. If you encounter this issue, consider using Method 2. +{: .warning} +> For **macOS** and **Windows** users, we recommend using **Method 2** to avoid performance issues. +> +>
+> +> Click here for more details! +> +> +> The Dev Containers extension uses "bind mounts" to source code in your local filesystem by default. While this is the simplest option, on macOS and Windows, you may encounter slower disk performance when using `catkin build` or other disk-intensive operations. If you encounter this issue, consider using Method 2. +>
##### Clone the workspace @@ -75,20 +88,35 @@ Press `Ctrl+Shift+P` or `F1` to open the command palette, type `Reopen in Contai [![Open in Dev Containers](https://img.shields.io/static/v1?label=Dev%20Containers&message=Open&color=blue&logo=visualstudiocode)](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/ETHZ-RobotX/rss_workspace) -#### **TL;DR**: +**TL;DR**: Click the badge above or [here](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/ETHZ-RobotX/rss_workspace) to open the workspace in a Dev Container. If the link does not work, follow the detailed steps below. -{: .note} -This method will clone the workspace to a docker volume. File data will be chunked and managed by Docker. Though, the chunked data are stored in the local file system, you cannot access them directly. This may be useful if you want to keep your local file system clean or if you encounter performance issues when using the workspace on macOS or Windows. To know more about the docker volume, please refer to the [Docker documentation](https://docs.docker.com/storage/volumes/). +
+ + Click here for detailed steps! + + + 1. Copy the following link or the forked repository link to the clipboard `https://github.com/ETHZ-RobotX/rss_workspace.git`. + + 2. Open the Command Palette in VScode by pressing `F1`. -#### **Detailed Steps:** + 3. Search for _"clone"_ and select **Dev Containers: Clone Repository in Container Volume**. + + 4. Paste the copied link into the box and press enter. + + 5. The dev container will set up properly. (This might take some time as it pulls base docker images and builds locally. You can click `Starting Dev Container (show log)` at the bottom right to see the progress.) +
+ +{: .important} +> You won't be able to access the workspace files directly in the local file system. The workspace files are stored in the docker volume. +> +>
+> +> Click here for more details! +> +> This method will clone the workspace to a docker volume. File data will be chunked and managed by Docker. Though, the chunked data are stored in the local file system, you cannot access them directly. This may be useful if you want to keep your local file system clean or if you encounter performance issues when using the workspace on macOS or Windows. To know more about the docker volume, please refer to the [Docker documentation](https://docs.docker.com/storage/volumes/). +>
-In VSCode, -1. Open the Command Palette by pressing `F1`. -2. Copy the following link or the forked repository link to the clipboard `https://github.com/ETHZ-RobotX/rss_workspace.git`. -3. Search for _"clone"_ and select **Dev Containers: Clone Repository in Container Volume**. -4. Paste the copied link into the box and press enter. -5. The dev container will set up properly. (This might take some time as it pulls base docker images and builds locally. You can click `Starting Dev Container (show log)` at the bottom right to see the progress.) --- @@ -172,50 +200,43 @@ This works out of the box in Linux; when a GUI is launched, the window pops up. {: .important} Works on Linux, Windows, and Mac -Modify the [line](https://github.com/ETHZ-RobotX/rss_workspace/blob/5db953b27bb6c1ca603944d1345371c666ad93af/.devcontainer/devcontainer.json#L20) in the `.devcontainer/devcontainer.json` to - +1. Modify the [line #20](https://github.com/ETHZ-RobotX/rss_workspace/blob/372af7b42366f53c7fa6f94b59a8d87f0e9c2255/.devcontainer/devcontainer.json#L20) in the `.devcontainer/devcontainer.json` to ```json "DISPLAY": ":1" ``` -and rebuild the workspace by opening the command palette (`Ctrl+Shift+P`) and selecting `Remote-Containers: Rebuild Container`. +and **optionally** modify the [line #9](https://github.com/ETHZ-RobotX/rss_workspace/blob/372af7b42366f53c7fa6f94b59a8d87f0e9c2255/.devcontainer/devcontainer.json#L9) in the same file to set the resolution of the VNC viewer. -**How to open the VNC viewer?** -Open the following link [(http://localhost:6080/)](http://localhost:6080/) in the browser to connect with the VNC environment. Click the connect button to open the viewer. (password: `robotx`) +2. Rebuild the workspace by opening the command palette (`Ctrl+Shift+P`) and selecting `Remote-Containers: Rebuild Container`. -Check whether everything is working by opening RViz: +**Use VNC Viewer to connect to the desktop environment of the workspace.** -```bash -# In VSCode terminal (Terminal->New Terminal) -# wssetup # Source the workspace setup file if not sourced -roslaunch smb_gazebo sim.launch -``` +1. Open the RealVNC Viewer. +2. File -> New Connection. +3. Add `localhost:5901` as the VNC Server. The default password is `robotx`. +4. Click Ok. +5. Click and open the new connection. +6. Ignore the unencrypted connection issue. -### Using VNC Viewer +Now you can see the desktop environment inside the VNC Viewer. You may need to adjust the picture quality settings in the VNC Viewer settings to get the best experience. -{: .important} -Works on Linux, Windows, and Mac - -1. Install the Real VNC Viewer following the steps on the [RealVNC website](https://www.realvnc.com/en/connect/download/viewer/). -2. Open the RealVNC Viewer. -3. File -> New Connection. -4. Add `localhost:5901` as the VNC Server. -5. Click Ok. -6. Click and open the new connection. -7. Ignore the unencrypted connection issue. +### Try a GUI application -Now you can see the GUI desktop similar to noVNC. +You can try to run the smb gazebo simulation inside the workspace to see if the GUI application works. -Check whether everything is working by opening RViz: +You can run the following command to start the simulation: ```bash -# In VSCode terminal (Terminal->New Terminal) -# wssetup # Source the workspace setup file if not sourced +cd /workspaces/rss_workspace +catkin build smb_gazebo # Build the package if not built +source devel/setup.zsh # Source the workspace setup file if not sourced roslaunch smb_gazebo sim.launch ``` ---- +If everything goes well, you should see the Gazebo simulation running and the GUI on your screen or VNC viewer. +--- +{: #customizing-the-workspace} ## 🎨 Customizing the Workspace {: .important} @@ -224,6 +245,8 @@ To save your customization, you should fork the repository and clone the forked {: .note} You can take a look of the following files and get an idea of what aliases/tools are pre-configured to make your life easier. +To further customize the workspace, you can: + * Add additional packages and productivity tools (e.g., `autojump`, `htop`, etc.) in the `.devcontainer/Dockerfile`. * Add additional features and vscode extensions in the `.devcontainer/devcontainer.json`. * Add additional shell aliases and functions in the `.devcontainer/setup_alias.sh`. @@ -232,27 +255,42 @@ You can take a look of the following files and get an idea of what aliases/tools --- +{: #tips-and-tricks} ## πŸ’‘ Tips & Tricks ### [Tmux](https://github.com/tmux/tmux/wiki) -#### _Use tmux in the workspace and remote access the physical robot via SSH_ +#### **Use tmux in the workspace and remote access the physical robot via SSH** Tmux is a terminal multiplexer; it allows you to create several "pseudo terminals" from a single terminal. It decouples the terminal from the main program (SSH at the remote), protecting it from being closed accidentally when connection is lost. It is particularly useful when remote accessing the physical robot via SSH, as it allows you to keep the program running even when the connection is lost and provides a multi-pane terminal interface for better organization. -#### _Tmux mouse mode_ +#### **Tmux mouse mode** We enable tmux mouse mode by default. You can use the mouse to switch between panes and scroll up and down in the terminal. -#### _Tmux panes synchronization_ +#### **Tmux panes synchronization** You can toggle pane synchronization mode by pressing `Ctrl+b` and `Ctrl+s`. It is useful when you want to type the same command in multiple panes. ### GUI -#### _GUI Screen is oversized?_ -On the left menu, -Go to settings -> scaling mode -> try with local scaling/remote resizing +#### **GUI Screen does not fit your screen in VNC?** +You can try, +- Hover over the top of the window to see the menu bar, click on the first icon from the left (the full-screen icon) to enter full-screen mode. +- Hover over the top of the window to see the menu bar, click on the second icon from the left (the scaling icon) to scale the screen to fit the viewer. +- Or adjust the default VNC resolution. See [VNC default resolution is too small?](#vnc_resolution_adjustment) for more details. + + +#### **Resize windows spawn inside VNC** +We use [fluxbox](http://fluxbox.org/) as the window manager in the VNC environment. It is more lightweight compared to the GNOME desktop environment. + +To resize the windows, you can drag the window from the bottom left or right corner. If the window is too big to fit the screen, you can hold the `Alt` key and drag the window to move it around. If you just want to fit the window into the screen size, you can Right-click on the window title bar -> Maximize, this will fit the window into the screen size. + +{: #vnc_resolution_adjustment} +#### **VNC default resolution is too small?** +Modify build arguments `VNC_RESOLUTION` in the `.devcontainer/devcontainer.json` file and rebuild the workspace. + +### Shell -#### _Windows spawn oversized?_ -Right-click on the window title bar -> Maximize (this will fit the window into the screen size) +#### **reverse-i-search** +It is common to enter a command that you have used before. You can use `Ctrl+r` to search for the command in the history. We integrate `fzf` with the shell by default to provide a more interactive reverse-i-search experience. -#### _VNC default resolution is too small?_ -Modify build arguments `VNC_RESOLUTION` in the `.devcontainer/devcontainer.json` file and rebuild the workspace. \ No newline at end of file +#### **`Tab` completion in zsh** +We use `zsh` as the default shell. You can use `Tab` to auto-complete the command, file, directory name or even ros launch file parameters. When you press `Tab` twice, it will show you all the possible completions, and you can select the one you want by continuously pressing `Tab` until the cursor is on the desired completion. \ No newline at end of file diff --git a/docs/installation/smb-docker.md b/docs/installation/smb-docker.md index dd10658..00a4ef7 100644 --- a/docs/installation/smb-docker.md +++ b/docs/installation/smb-docker.md @@ -2,100 +2,129 @@ layout: default title: SMB Docker parent: Installation -nav_order: 3 +nav_order: 2 has_toc: false --- # 🐳 SMB Docker {:.no_toc} -To use the SMB Docker, basic knowledge of Docker is needed. Please check [the official website](https://docs.docker.com) to learn how to build, save, reconnect, etc. -{: .note} - -* Table of contents +
+ + Table of contents + + {: .text-delta } +1. TOC {:toc} +
+ +--- -## Setting up Docker +# Using Docker for the SuperMegaBot Software +{:.no_toc} -### 🐧 Linux +## Pre-requisites +1. Install Docker by following [the official website](https://docs.docker.com/get-docker/) -1. Install Docker by following [the official website](https://docs.docker.com/engine/install/) -2. Clone the [repo](https://github.com/ETHZ-RobotX/smb_docker/) into a directory on your host computer -3. Run the bash file to create the container +2. (Required if you want to run GUI application with VNC) Install Real VNC Viewer by following [the official website](https://www.realvnc.com/en/connect/download/viewer) -```bash -# Go to the directory where you downloaded the repo to -cd +3. Clone this repository to your local machine -# Activate Container -./create_container.bash -``` +--- +## Running the Docker container -This will automatically set up your system to later run the docker and download the pre-compiled image from Docker Hub. Once downloaded, the script starts a container called `smb_container` that can be used to run the SMB software (see [reconnecting to the docker container](#-re-connecting-to-the-docker-container)). +There are two ways to run the Docker container. Choosing which one to use depends on how you want to use the GUI application. -### πŸͺŸ Windows +If you have a Linux machine and want to display the GUI application on your screen directly, you can use X11 forwarding. If you are using Windows or Mac, you should use VNC to access the GUI application. -1. Install Docker Desktop by using [the official website](https://docs.docker.com/desktop/windows/install/) -2. Install VcXsrv [here](https://sourceforge.net/projects/vcxsrv/) -3. Launch VcXsrv and configure the settings as shown in the pictures: +### Running the container with X11 forwarding enabled - ![setup 1](../../images/docker_setup_1.png){: width="600px"} +{: .important } +> It only works on Linux. If you are using Windows or Mac, please refer to the next section. - ![setup 2](../../images/docker_setup_2.png){: width="600px"} +Run the following command to start the Docker container with X11 forwarding: - ![setup 3](../../images/docker_setup_3.png){: width="600px"} +```bash +docker compose -f compose-x11.yaml up +``` -4. Open PowerShell and run +If everything goes well, you should see instructions in the terminal on how to attach to the container. You should keep the `docker compose` running and open a new terminal to attach to the container with the following command: ```bash -# Run docker -docker run -it --env="DISPLAY=host.docker.internal:0.0" --volume=smb_volume:/home/catkin_ws/src --net=host --name smb_container ethzrobotx/smb_docker bash +docker exec -it smb_container_x11 zsh ``` +{: .note} +> If you are using a different shell, you can replace `zsh` with `bash`, `tmux`, etc. + +If you open a GUI application in the container, it should be displayed on your screen. -5. To exit the container, type `exit` in the terminal. +Once you are finished, you can stop the container by pressing `Ctrl+C` in the terminal where you ran `docker compose up`. + +(Optional) You can remove the container by running the following command: + +```bash +docker compose -f compose-x11.yaml down +``` -## πŸ–₯️ Setup Visual Studio Code for Use with Docker Container +### Running the container with VNC enabled -Visual Studio Code is a powerful integrated development environment that even allows accessing code inside a Docker container. -Usage of Visual Studio is not necessary. {: .note} +> This method works on all platforms. -1. Open Visual Studio Code and install the **dev - containers** extension. -2. Click on the extension on the bottom left corner and attach to the previously created container. -3. When the new window opens, install the **C/C++** and **Python** extensions from Microsoft inside the container. This is needed in order to get autocompletion. -4. The catkin workspace is located in /home/catkin_ws +Run the following command to start the Docker container with VNC: -## πŸ”„ (Re-)Connecting to the Docker Container +```bash +docker compose up +``` -Once you have set up the smb_container, you can create a terminal (bash shell) by running +You can attach to the container with the following command: ```bash -docker exec -it smb_container bash +docker exec -it smb_container zsh ``` +{: .note} +> If you are using a different shell, you can replace `zsh` with `bash`, `tmux`, etc. -There is no need to run the script create_container.sh anymore. +If you open a GUI application in the container, you can access it by connecting to `localhost:5901` with a VNC client. The password is `robotx`. -If you closed all running instances of bash in the `smb_container`, you might need to start it again by running +Once you are finished, you can stop the container by pressing `Ctrl+C` in the terminal where you ran `docker compose up`. -```bash -# start docker container -docker start smb_container +(Optional) You can remove the container by running the following command: -# create a terminal (bash) in the container: -docker exec -it smb_container bash +```bash +docker compose down ``` +--- + +## Open multiple terminals inside the container + +When working with ROS, you may need to open multiple terminals to run different commands. You can copy and paste the `docker exec ...` command to multiple terminals and run to open multiple terminals inside the container. As long as the `docker compose up` command is running, you can attach to the same container multiple times. It won't create a new container. -The latter command can be repeated multiple times to create several terminals in the same container. +Alternatively, you can use `tmux` to manage multiple terminals in one terminal. For details on how to use `tmux`, please refer to the [official documentation](https://github.com/tmux/tmux/wiki). -## πŸ•ΉοΈ How to Use the Simulation in the Docker Container +--- + +## Try a GUI application + +The default catkin workspace is `/workspaces/rss_workspace`. + +You can try to run the smb gazebo simulation inside the container to see if the GUI application works. -If you want to run the simulation, you can follow the [how to run SMB software](../tasks) and run the commands given there in a terminal in the smb_container. I.e. +You can run the following command to start the simulation: ```bash -# create a terminal (bash) in the container: -docker exec -it smb_container bash +cd /workspaces/rss_workspace +catkin build smb_gazebo +source devel/setup.zsh +roslaunch smb_gazebo sim.launch ``` + +If everything goes well, you should see the Gazebo simulation running and the GUI on your screen or VNC viewer. + +{: .note} +We highly recommend to read the [`Customizing the Workspace`](./rss-workspace.md#customizing-the-workspace) and [`Tips & Tricks`](./rss-workspace.md#tips-and-tricks) sections in the [RSS workspace](./rss-workspace.md) to learn how to customize your docker environment and boost your coding productivity. + diff --git a/docs/physical-robot/tasks/exploration.md b/docs/physical-robot/tasks/exploration.md index 4c80a0c..9311b6e 100644 --- a/docs/physical-robot/tasks/exploration.md +++ b/docs/physical-robot/tasks/exploration.md @@ -25,7 +25,7 @@ roslaunch smb smb.launch Launch the slam: ```bash # In a new terminal on SMB -roslaunch roslaunch smb_msf_graph smb_msf_graph.launch +roslaunch smb_msf_graph smb_msf_graph.launch ``` Launch the local planner and path follower: diff --git a/docs/physical-robot/tasks/object-detection.md b/docs/physical-robot/tasks/object-detection.md index ce3fcf3..b4d69aa 100644 --- a/docs/physical-robot/tasks/object-detection.md +++ b/docs/physical-robot/tasks/object-detection.md @@ -20,7 +20,7 @@ Next, launch the object detection locally with these parameters for the real rob - `model_path=""`: Don't set this parameter if you want to use the pre-installed model. If you have a downloaded model, specify its path. - `model="yolov5l6"`: Selects the pre-installed YOLOv5 model. -- `object_detection_classes="[0,1,2,10]"`: Populate this list with the IDs of objects added to the Gazebo scene. If you leave this empty, it will try to detect all the objects. To see what numbers correspond to what items, check out the [Artefact Detection Tutorial](../../rss/preparations/artefact_detection_tutorial_preparations.md) page and look for the **YOLOv5 Supported Object Classes** section. `[0, 1, 2, 10]` correspond to person, bicycle, car, and fire hydrant. +- `object_detection_classes="[0,1,2,10]"`: Populate this list with the IDs of objects added to the real scene. If you leave this empty, it will try to detect the following objects `[0,24, 25, 28, 32, 39, 41, 45, 46, 47, 56]` from the dataset. To see what numbers correspond to what items, check out the [Artefact Detection Tutorial](../../rss/preparations/artefact_detection_tutorial_preparations.md) page and look for the **YOLOv5 Supported Object Classes** section. The example `[0, 1, 2, 10]` corresponds to person, bicycle, car, and fire hydrant. To launch the detection pipeline locally, run: diff --git a/docs/rss/index.md b/docs/rss/index.md index a356922..dc0917f 100644 --- a/docs/rss/index.md +++ b/docs/rss/index.md @@ -3,21 +3,9 @@ layout: default title: Robotics Summer School nav_order: 5 has_children: true -has_toc: false +has_toc: true --- # Robotics Summer School On this page, we provide all the relevant information for the lectures and tutorials of the [ETHZ Robotics Summer School](https://robotics-summerschool.ethz.ch/). - -## Preparations for Tutorials - -Please follow the instructions given [here](preparations/) to prepare for the tutorials. - - -## Tutorials -The tutorials of the Robotics Summer School are made available [here](tutorials/) shortly before the tutorial takes place. - - -## Lectures -The slides of the lecture of the Robotics Summer School are made available [here](lectures.md) shortly before or after the lectures takes place. diff --git a/docs/rss/lectures.md b/docs/rss/lectures.md index a8746fa..7cc95e1 100644 --- a/docs/rss/lectures.md +++ b/docs/rss/lectures.md @@ -4,7 +4,7 @@ title: Lectures parent: Robotics Summer School has_children: false has_toc: false -nav_order: 3 +nav_order: 4 nav_exclude: false --- diff --git a/docs/rss/preparations.md b/docs/rss/preparations.md new file mode 100644 index 0000000..6c647de --- /dev/null +++ b/docs/rss/preparations.md @@ -0,0 +1,27 @@ +--- +layout: default +title: Preparations for the Robotics Summer School +parent: Robotics Summer School +has_toc: true +nav_order: 1 +--- + +# Preparations for the Robotics Summer School + +In order to be prepared for the Robotics Summer School, please follow the steps below: + +1. **Set up the simulation environment on your computer**
+Follow the steps outlined in [the installation guide](../installation/) to setup the SMB software stack and the simulation environment. + +2. **Get familiar with the simulation environment**
+Use the [Mission Planner](../simulation/tasks/mission-planning.md) to create a simple twist mission that drives the robot through the small passage in the default simulation environment (`WaA.world`).
Use [this Google form](https://forms.gle/StKLWEq9gztQDs758) to share your results with us. +![simple twist mission](../images/simple_twist_mission.png){: width="600px"} + +3. **Prepare for the tutorials**
+Please go through all [tutorial preparations](tutorial_preparations) steps. + +{: .important} +Please make sure to download all required **rosbags** and **docker images** for the tutorials before the start of the Robotics Summer School as the internet connection might be slow during the event. + + + diff --git a/docs/rss/preparations/artefact_detection_tutorial_preparations.md b/docs/rss/tutorial_preparations/artefact_detection_tutorial_preparations.md similarity index 100% rename from docs/rss/preparations/artefact_detection_tutorial_preparations.md rename to docs/rss/tutorial_preparations/artefact_detection_tutorial_preparations.md diff --git a/docs/rss/preparations/index.md b/docs/rss/tutorial_preparations/index.md similarity index 95% rename from docs/rss/preparations/index.md rename to docs/rss/tutorial_preparations/index.md index 0ddaca6..24555a0 100644 --- a/docs/rss/preparations/index.md +++ b/docs/rss/tutorial_preparations/index.md @@ -4,7 +4,7 @@ title: Tutorial Preparations parent: Robotics Summer School has_children: true has_toc: true -nav_order: 1 +nav_order: 2 --- # Preparations for Tutorials of Robotics Summer School diff --git a/docs/rss/preparations/path_planning_tutorial_preparations.md b/docs/rss/tutorial_preparations/path_planning_tutorial_preparations.md similarity index 100% rename from docs/rss/preparations/path_planning_tutorial_preparations.md rename to docs/rss/tutorial_preparations/path_planning_tutorial_preparations.md diff --git a/docs/rss/preparations/slam_tutorial.md b/docs/rss/tutorial_preparations/slam_tutorial.md similarity index 100% rename from docs/rss/preparations/slam_tutorial.md rename to docs/rss/tutorial_preparations/slam_tutorial.md diff --git a/docs/rss/preparations/state_estimation_tutorial_preparations.md b/docs/rss/tutorial_preparations/state_estimation_tutorial_preparations.md similarity index 93% rename from docs/rss/preparations/state_estimation_tutorial_preparations.md rename to docs/rss/tutorial_preparations/state_estimation_tutorial_preparations.md index 2485c4d..8609d4a 100644 --- a/docs/rss/preparations/state_estimation_tutorial_preparations.md +++ b/docs/rss/tutorial_preparations/state_estimation_tutorial_preparations.md @@ -47,7 +47,7 @@ To build `smb_msf_graph` run ```bash catkin build smb_msf_graph ``` -This will compile all dependencies present in the workspace, including [open3d_slam](#). +This will compile all dependencies present in the workspace, including open3d_slam. --- @@ -70,7 +70,7 @@ sudo apt-get install terminator ``` {: .note} -If you are using [rss_workspace](../../simulation/setting-up/rss-workspace.md), js_rviz_plugins is already installed. +If you are using [rss_workspace](../../installation/rss-workspace.md), js_rviz_plugins is already installed. * jsk_rviz_plugins, for visualizing TF-paths in RVIZ. diff --git a/docs/rss/preparations/trajectory_optimization_tutorial_preparations.md b/docs/rss/tutorial_preparations/trajectory_optimization_tutorial_preparations.md similarity index 100% rename from docs/rss/preparations/trajectory_optimization_tutorial_preparations.md rename to docs/rss/tutorial_preparations/trajectory_optimization_tutorial_preparations.md diff --git a/docs/rss/tutorials/index.md b/docs/rss/tutorials/index.md index d704c10..2d57a2c 100644 --- a/docs/rss/tutorials/index.md +++ b/docs/rss/tutorials/index.md @@ -4,7 +4,7 @@ title: Tutorials parent: Robotics Summer School has_children: true has_toc: false -nav_order: 2 +nav_order: 3 # nav_exclude: true --- diff --git a/docs/simulation/index.md b/docs/simulation/index.md index eacf87d..4ae159c 100644 --- a/docs/simulation/index.md +++ b/docs/simulation/index.md @@ -27,3 +27,4 @@ In this section, the core tasks of navigation and exploration are explained, alo - [🧭 Navigation](tasks/navigation.md) - [πŸ—ΊοΈ Mission Planning](tasks/mission-planning.md) - [πŸ” Exploration](tasks/exploration.md) +- [πŸ•΅οΈβ€β™‚οΈ Object Detection](tasks/object-detection.md) diff --git a/docs/simulation/tasks/exploration.md b/docs/simulation/tasks/exploration.md index 641eed5..4022cb9 100644 --- a/docs/simulation/tasks/exploration.md +++ b/docs/simulation/tasks/exploration.md @@ -32,7 +32,7 @@ roslaunch smb_gazebo sim.launch Launch the slam: ```bash # In the host PC -roslaunch roslaunch smb_msf_graph smb_msf_graph.launch +roslaunch smb_msf_graph smb_msf_graph.launch use_sim_time:=true ``` Launch the local planner and path follower: diff --git a/docs/simulation/tasks/mission-planning.md b/docs/simulation/tasks/mission-planning.md index 9de5a1f..f3ebae5 100644 --- a/docs/simulation/tasks/mission-planning.md +++ b/docs/simulation/tasks/mission-planning.md @@ -43,18 +43,42 @@ After having recorded all your missions, stop the node with `Ctrl-C`. All your r The `mission_planner.py` executes the previously defined mission plan. -Start the simulation and the path planner. As soon as the path planner is ready to receive goals, start the `mission_planner` with +Start the simulation and the path planner. +```bash +# launch the FAR planner +roslaunch smb_navigation navigate2d_cmu.launch use_msf:=true global_frame:=world_graph_msf state_estimation_topic:=/transformed_odom +``` + +As soon as the path planner is ready to receive goals, start the `mission_planner` with ```bash # launch the mission planner -# if graph_msf is used -roslaunch smb_mission_planner mission_planner.launch reference_frame:=world_graph_msf mission_file_name:=mission.yaml +roslaunch smb_mission_planner mission_planner.launch reference_frame:=world_graph_msf mission_file_name:=test_mission.yaml ``` The robot will now try to reach the specified waypoints of each mission one by one, as defined in the `yaml` file. In the command line window of the `mission_planner` you can find information on where and in which mission you currently are. +In order to make the above command run, you need to add few twist mission in the test_mission.yaml (since the provided mission_planner.py expect first to execute a FARWaypointMission and then a TwistMission). For this you can copy the twist mission from mission.yaml +``` +twist_mission: + twist_1: + lin_vel: 1 + ang_vel: 1 + time: 5 + twist_2: + lin_vel: 1 + ang_vel: 1 + time: 5 + twist_3: + lin_vel: 1 + ang_vel: 1 + time: 5 +``` +and append it to the test_mission.yaml you just created. + + Example mission yaml file: [`mission.yaml`](https://github.com/ETHZ-RobotX/smb_mission_planner/blob/master/configs/missions/mission.yaml) -Please note that you need to edit the `mission_planner.py` as required to make it work, you can also refer to the [`navigation_mission.py`](https://github.com/ETHZ-RobotX/smb_mission_planner/blob/master/src/smb_mission_planner/mission_planner.py) for an example implementation. +Please note that you need to edit the `mission_planner.py` as required to make it work, you can also refer to the [`mission_planner.py`](https://github.com/ETHZ-RobotX/smb_mission_planner/blob/master/src/smb_mission_planner/mission_planner.py) for an example implementation. {: .note} diff --git a/docs/simulation/tasks/object-detection.md b/docs/simulation/tasks/object-detection.md index 4c0532e..fa944bc 100644 --- a/docs/simulation/tasks/object-detection.md +++ b/docs/simulation/tasks/object-detection.md @@ -20,13 +20,17 @@ Next, launch the object detection locally with these parameters for simulation: - `gpu="off"`: Runs detection on the CPU. - `model_path=""`: Don't set this parameter if you want to use the pre-installed model. If you have a downloaded model, specify its path. - `model="yolov5l6"`: Selects the pre-installed YOLOv5 model. -- `object_detection_classes="[0,1,2,10]"`: Populate this list with the IDs of objects added to the Gazebo scene. If you leave this empty, it will try to detect all the objects. To see what numbers correspond to what items, check out the [Artefact Detection Tutorial](../..//rss/preparations/artefact_detection_tutorial_preparations.md) page and look for the **YOLOv5 Supported Object Classes** section. `[0, 1, 2, 10]` correspond to person, bicycle, car, and fire hydrant. +- `object_detection_classes="[0,1,2,10]"`: Populate this list with the IDs of objects added to the Gazebo scene. If you leave this empty, it will try to detect all objects in the dataset for the simulation. To see what numbers correspond to what items, check out the [Artefact Detection Tutorial](../..//rss/preparations/artefact_detection_tutorial_preparations.md) page and look for the **YOLOv5 Supported Object Classes** section. The example `[0, 1, 2, 10]` corresponds to person, bicycle, car, and fire hydrant. + +``` +Note: The `object_detection_classes` parameter is only effective on the real robot or for non-docker users. Docker users use ONNX for detection instead of Torch, as this makes the Docker image smaller. Consequently, all objects will be detected and one cannot select what objects to detect. +``` To launch the detection pipeline locally, run: ```bash # In the host PC -roslaunch object_detection object_detection.launch gpu:=off model:=yolov5l6 object_detection_classes="[0,1,2,10]" +roslaunch object_detection object_detection.launch gpu:=off model:=yolov5l6 ``` For more information, please check out the [Artefact Detection Tutorial](../../rss/preparations/artefact_detection_tutorial_preparations.md). diff --git a/docs/simulation/tasks/visualisation.md b/docs/simulation/tasks/visualisation.md index 0400708..93779e4 100644 --- a/docs/simulation/tasks/visualisation.md +++ b/docs/simulation/tasks/visualisation.md @@ -69,4 +69,4 @@ Now you have two possibilities to drive with the robot. ``` The joystick mode might not work properly if you are using the **RSS Workspace** or **SMB Docker** image on Windows and MacOS environments. - {: .smb-warning} + {: .warning }