# Raspberry Pi 4B Setup

This guide outlines the process of setting up a Raspberry Pi onboard companion computer without the need for a mouse or keyboard, using Ubuntu 20.04 Server Image.

#### Flashing OS on the Board

1. **Install rpi-imager**
   * Run `sudo apt install rpi-imager` to install the Raspberry Pi Imager.
   * Insert the microSD card into your computer.
2. **Choose OS and Storage**
   * Open Raspberry Pi Imager and select "Choose OS".
   * Navigate to the Ubuntu 20.04 Server image.
   * Select your microSD card under "Choose Storage".
3. **Configure Settings**
   * Click on the settings icon.
   * Enable "Enable SSH".
   * Set a username and password (e.g., "pi").
   * Configure wireless LAN to connect to your Wi-Fi network.
4. **Write OS to microSD**
   * Click "Write" to write the OS to the microSD card.
5. **Boot the Board**
   * Insert the microSD card into the board.
   * Check the LED status to confirm booting from the card.

#### Setting up Ubuntu Server Image for ARIITK

1. **Basic Linux Setup**

   ```bash
   sudo apt-get update
   sudo apt-get upgrade
   timedatectl set-local-rtc 1 --adjust-system-clock
   sudo apt-get install git
   ```
2. **ROS Setup**

   ```bash
   # Setup sources.list
   sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

   # Setup keys
   sudo apt install curl
   curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -

   # Installation
   sudo apt update
   sudo apt install ros-noetic-base

   # Initialize rosdep
   sudo apt install python3-rosdep
   sudo rosdep init
   rosdep update

   # Setup environment
   echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
   source ~/.bashrc

   # Fulfill dependencies
   sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
   ```
3. **MAVROS Setup**

   <pre class="language-bash"><code class="lang-bash"># install some dependencies
   sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool build-essential

   # install MAVROS
   sudo apt-get install ros-noetic-mavros ros-noetic-mavros-extras

   cd ~/

   wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh
   sudo chmod a+x install_geographiclib_datasets.sh
   sudo ./install_geographiclib_datasets.sh

   # Install catkin tools
   sudo apt-get install python3-catkin-tools

   # Updating MAVProxy and pymavlink (new versions released now and then)
   sudo pip install --upgrade pymavlink MAVProxy

   #Setup MAVROS to begin communication
   cd ~/

   # Setup MAVROS workspace
   mkdir -p ~/ardupilot_ws/src
   cd ~/ardupilot_ws
   catkin init

   # Create launch file for MAVROS
   cd src
   mkdir launch
   cd launch
   roscp mavros apm.launch apm.launch
   sudo gedit apm.launch #opens a text editor, follow the next command (you can also do it using any other editor of your choice, for eg. by using 'code .' commmand)

   #To proxy to a Ground Control Station like QGC or Mission Planner on ground we just need to modify the first line to &#x3C;arg name="fcu_url" default="udp://:{ground-port}@{ground-hostname}" />. save you file and launch it with-
   <strong>cd ~/ardupilot_ws/src/launch
   </strong>roslaunch apm.launch

   </code></pre>
4. **QGC Setup**

   To configure QGroundControl for communication with MAVROS:

   1. **Open QGroundControl**
      * Launch QGroundControl on your ground station device.
   2. **Configure UDP Settings**
      * Navigate to 'Application Settings'.
      * Go to the 'Comm Links' tab.
      * Click 'Add' in the options menu.
      * Select 'Type' as 'UDP'.
      * Enter the{ground-port} in "Port" and {ground-hostname} in "Server Addresses (optional)"
   3. **Connect**
      * Click "OK" to save the settings.
      * Click on the "Connect" tab to establish the connection from side menu

   Ensure that your onboard companion computer and ground station are connected to the same LAN setup via a router for proper communication.

**Ensure both the board and the ground station are connected to the same LAN setup for the proxy to work.**


---

# 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://wiki.ariitk.in/wiki/hardware-integration/setting-up-offboard-mission/setting-up-companion-computer/raspberry-pi-4b-setup.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.
