# Onboarding

## General Resources

{% hint style="info" %}
Feel free to update this document with any other resources you find helpful!
{% endhint %}

1. [2023 Competition Handbook](https://robonation.org/app/uploads/sites/3/2023/02/2023-RoboBoat_Team-Handbook_v4.1.pdf) - Read section 2.4 (pages 12-19). This outlines the tasks from 2023. Tasks 1-4 will likely remain the same for 2024, which is what we are starting with.&#x20;
2. [Our team website](https://www.icebergasv.ca/) - Feel free to browse and learn more about the team.&#x20;
3. [Hardware Overview](/general/hardware-overview.md) - The important sensors, computers, and controllers that work together to create an ASV
4. [Software Overview](/general/software-overview.md) - High-Level overview of how the software works
5. [Software Workflow](/general/onboarding/software-workflow.md) - How we code and track our progress as a team.&#x20;

## Set up your Environment

{% hint style="warning" %}
If any of these instructions and resources do not work, are outdated, or are difficult to follow let Grace know so we can update them!
{% endhint %}

### Git

If you are new to Git, here are some resources to get started:

* [Learn the Basics of Git in Under 10 Minutes](https://www.freecodecamp.org/news/learn-the-basics-of-git-in-under-10-minutes-da548267cc91/)
* [Git Cheat Sheet](https://rogerdudler.github.io/git-guide/files/git_cheat_sheet.pdf)

#### Setup Instructions

1. [Install](https://www.digitalocean.com/community/tutorials/how-to-install-git-on-ubuntu-18-04-quickstart)
2. [Generating a new SSH key and adding it to the ssh-agent](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent)
3. [Adding a new SSH key to your GitHub account](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account)

### Ubuntu 18.04

This is the operating system on our boat's computer. To limit dependency and versioning issues, we are all developing with Ubuntu 18.04. You have several options to get Ubuntu 18.04:

1. [Use a virtual machine](/general/onboarding/installing-ubuntu-18.04-on-virtualbox.md) - Recommended. Most of us use VirtualBox.&#x20;
2. Dual Boot - Some of us have had success with this, and some of us haven't. Instructions will depend on whether you are currently running Windows, Mac, or a Linux distribution.
3. [Install Ubuntu 18.04](https://ubuntu.com/tutorials/install-ubuntu-desktop-1804#1-overview) only - may have the least amount of problems with this, but Ubuntu 18.04 is nearing end of life, so it is only recommended if you have a separate computer just for ROS development.&#x20;

### ROS Melodic

ROS stands for Robotic Operating System. All of our software is based on this framework. Melodic is the version that runs on Ubuntu 18.04.&#x20;

[Installation Instructions](http://wiki.ros.org/melodic/Installation/Ubuntu)

**NOTE**: In the end of installation instructions (in section 1.6.1), the guide asks you to run `rosdep update`, however it won't actually update dependencies as needed since ROS Melodic has reached its EOL (end-of-life). You will have to use `rosdep update --include-eol-distros`instead to get updates for Melodic.

### Gazebo 11

Gazebo is a physics simulator for ROS. This provides a visual representation of the boat and helps us test our code. The default version of Gazebo for Melodic is version 9, but we are using version 11. See [Installing Gazebo 11](/general/onboarding/installing-gazebo-11.md).&#x20;

## C++ Resources

We write most of our code in C++, so if that's new to you or you are looking for a refresher, take a look at these resources.&#x20;

1. [Beginning C++ Online Programming Course](https://www.udemy.com/course/beginning-c-plus-plus-programming/) - Contact Grace for shared account credentials. See section 2 for setup, sections 4-6 and 8-9 if you are new to programming, and sections 7, 10-13, and 17 for more C++ specifics. Don't feel like you need to go through every section; do as much or as little as you want.&#x20;
2. [C++ for Robotics](https://app.theconstructsim.com/courses/59) - A Construct course. Contact Grace for shared account credentials.&#x20;

#### Style Guides

We follow the [ROS C++ Style Guide](http://wiki.ros.org/CppStyleGuide) and [ROS Naming Conventions](http://wiki.ros.org/ROS/Patterns/Conventions). If something is not covered, refer to the [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html). For documentation guidelines see [ROS Documentation Style Guide](http://wiki.ros.org/StyleGuide).

## ROS Resouces

ROS stands for Robotic Operating System. All of our software is based on this framework. ROS can be used with Python and C++, but most of our codebase is written in C++.&#x20;

1. [Creating a Catkin Workspace](https://iceberg-asv.gitbook.io/general/)
2. [Creating a ROS Package](/general/how-to-write-a-ros-package/package-setup.md)
3. [The Construct](https://app.theconstructsim.com/login/) - ROS courses. Don't feel the need to do all the exercises; do as much or as little as you want. Even just reading through the notes will be helpful. Recommended courses are listed below:
   1. [ROS Basics in 5 Days (C++)](https://app.theconstructsim.com/courses/56) - If you are going to do any of these, do this one.&#x20;
   2. [Linux for Robotics](https://app.theconstructsim.com/courses/40) - recommended if you are new to Linux
   3. [Mastering Gazebo Simulator](https://app.theconstructsim.com/courses/78)
   4. [ROS Navigation in 5 Days](https://app.theconstructsim.com/courses/57)
4. [ROS Wiki Tutorials](http://wiki.ros.org/ROS/Tutorials) - Recommended Tutorials are listed below.
   * [Navigating the ROS Filesystem](http://wiki.ros.org/ROS/Tutorials/NavigatingTheFilesystem)
   * [Understanding ROS Nodes](http://wiki.ros.org/ROS/Tutorials/UnderstandingNodes)
   * [Understanding ROS Topics](http://wiki.ros.org/ROS/Tutorials/UnderstandingTopics)
   * [Understanding ROS Services and Parameters](http://wiki.ros.org/ROS/Tutorials/UnderstandingServicesParams)
   * [Using rqt\_console and roslaunch](http://wiki.ros.org/ROS/Tutorials/UsingRqtconsoleRoslaunch)
   * [Creating a ROS msg and srv](http://wiki.ros.org/ROS/Tutorials/CreatingMsgAndSrv)
   * [Writing a Simple Publisher and Subscriber (C++)](http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber%28c%2B%2B%29)
5. [ROS Logging](/general/how-to-write-a-ros-package/ros-logging.md)
6. [Node Handles and Parameters](/general/how-to-write-a-ros-package/node-handles-parameters-and-topics.md)<br>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://iceberg-asv.gitbook.io/general/onboarding.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
