Skip to content

Commit

Permalink
Concepts (#220)
Browse files Browse the repository at this point in the history
* Filter Service Concept

* GPS Service Concept

* Add more info to GPS service

* Add support@farm-ng.com to ssh instructions

* Fix email/broken links

* Update website/sidebars.js

Co-authored-by: Kyle Coble <53625197+Hackerman342@users.noreply.github.com>

* Organize concepts by level of complexity

Co-authored-by: Kyle Coble <53625197+Hackerman342@users.noreply.github.com>

* Add requirement of RTK base connection

* Add protobuff defs to Concepts

* Note for pvt messages not requiring wifi

* Oak service + placeholder for can service

* Clarified there might be multiple oak services

* Typo fixes (1)

Co-authored-by: Patrick Mihelich <484900+mihelich@users.noreply.github.com>

* Typo fixes (2)

Co-authored-by: Patrick Mihelich <484900+mihelich@users.noreply.github.com>

* Typo fixes (3)

Co-authored-by: Patrick Mihelich <484900+mihelich@users.noreply.github.com>

---------

Co-authored-by: Kyle Coble <53625197+Hackerman342@users.noreply.github.com>
Co-authored-by: Patrick Mihelich <484900+mihelich@users.noreply.github.com>
  • Loading branch information
3 people authored Oct 20, 2023
1 parent d8b3951 commit c5f8ccf
Show file tree
Hide file tree
Showing 6 changed files with 291 additions and 1 deletion.
8 changes: 8 additions & 0 deletions website/docs/concepts/canbus_service/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
id: canbus-overview
title: CANBUS
---

# Canbus Service Overview

(Coming soon!)
99 changes: 99 additions & 0 deletions website/docs/concepts/filter_service/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
---
id: filter-overview
title: Filter
---

# Filter Service Overview

The Filter service is the state estimation core of the Amiga, crucial for understanding the robot's
position, orientation, and movement within its environment.
Utilizing an **Unscented Kalman Filter**, it seamlessly fuses data from various sources like wheel odometry,
GPS, and the IMU to provide a consistent and accurate representation of the robot's current state.

The primary goal of the Filter service is to abstract the complexity involved in state estimation,
providing users with clear, reliable information about the robot's pose, heading, and movement trajectory.
This allows users to interact with and direct the Amiga effectively, without getting immersed in the
technical depths of data fusion or sensor calibration.

In essence, the Filter does the intricate work of synthesizing sensor data, enabling users to
confidently interpret and utilize the Amiga's spatial information without needing extensive expertise
in robotics or state estimation.

## Subscriptions

The `Filter` is a client from the following services:

- Canbus (for wheel odometry)
- GPS
- Oak0 (for IMU data)

For the Filter service to function correctly, these services must be operational and communicating
relevant sensor data.
Since the Filter relies on GPS data, the Amiga must have a GPS connected to an RTK base station.

## Convergence Requirements

For the state estimation to be considered valid and the results to be reliable, certain criteria
need to be met, including:

- The robot is connected to Wi-Fi, ensuring communication continuity.
- The GPS service is receiving messages, with `accuracyNorth` and `accuracyEast` values smaller
than 0.01, indicating high precision.
- The oak0 service is active and transmitting IMU data.

Upon startup or recalibration, the robot needs to be moved slightly to allow the filter to converge
(indicated by `has_converged` = true).

:::info Remember
State estimation is a dynamic process, and environmental factors or sensor issues can affect convergence.
Regular calibration and adherence to the recommended workflows are essential for maintaining accurate
state estimation.
:::

## API

Users can interact with the filter service using these commands through an EventClient of
the filter service:

- `/calibrate`: Triggers the calibration process, adjusting the IMU orientation relative to the robot
and calculating gyroscope biases.
- `/get_state`: Retrieves a protobuf message of type FilterState, containing the robot’s pose,
heading (in radians), convergence status, and pose uncertainty.
- `/get_track`: Returns the current track of the robot, essentially the path that the robot has traveled.
- `/clear_track`: Clears the current track, useful when initiating a new tracking sequence or
recalibrating the system.

## Filter Service in Practice

When planning to record a new track, the recommended workflow is as follows:

- Start with `/clear_track`. This will clear the current track on memory and allow the user to
"start fresh"
- User drives the robot to generate the desired track
- Once satisfied, the user stops the robot
- Get the track with the API `/get_track`.

:::tip TIP
For a comprehensive understanding of the list of variables available in the filter state messages,
make sure to check its [protobuf definition](https://github.com/farm-ng/farm-ng-amiga/blob/main-v2/protos/farm_ng/filter/filter.proto).
:::

## Features

The Filter service, while sophisticated, is designed with user-friendliness in mind.
It not only provides essential information on the robot's current state but also empowers users to:

1. **Track Creation and Retrieval**:
The system automatically logs the robot's path, creating tracks that can be reviewed and utilized for
future tasks. This feature is invaluable for repeated navigation tasks or analyzing the robot's
coverage over a workspace.

2. **Real-time State Estimation**:
By continuously synthesizing data from multiple sensors, the Filter offers real-time insights into
the robot's position, orientation, and trajectory.
This is crucial for tasks that require precise navigation or environment mapping.

3. **Calibration on Demand**:
Environmental changes or operational demands may necessitate recalibration.
The /calibrate command simplifies this, enabling users to quickly recalibrate the IMU, ensuring
continued accuracy in state estimation.
97 changes: 97 additions & 0 deletions website/docs/concepts/gps_service/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
---
id: gps-overview
title: GPS
---

# GPS Service Overview

The GPS service is an integral component of the Amiga's navigation system, utilizing a
high-precision Ublox module to determine the robot's exact position on Earth.
This service is indispensable for tasks that require geo-location, from simple
navigation to complex tasks like field mapping or precision agriculture.

The primary role of the GPS service is to continuously capture and broadcast detailed
positional data, which other components and services within the Amiga's system can utilize.
It simplifies the intricacies of satellite-based positioning, offering users straightforward
access to precise, real-time location data.

In short, the GPS service continuously decodes and transmits location data, allowing users
and systems to tap into accurate geospatial information without dealing with the
complexities of GPS data interpretation.

## Standalone Operation

Unlike other services, the GPS service operates independently and is not a client of any other services.
Its sole responsibility is to interpret and publish the data received from the GPS module.

## Message Types

Clients can subscribe to the GPS service to receive messages, which are typically of type `pvt` or `relposned`.
These messages contain rich data sets that include the robot's current geospatial coordinates,
velocity, time, and other relevant GPS data.

:::info INFO
There are two types of GPS messages: **PVT** and **RELPOSNED**.

**PVT** (Position, Velocity, and Time) messages provide the all-in-one solution: position, velocity,
and time.
It contains details like longitude, latitude, altitude, speed, and UTC time.

**RELPOSNED** (Relative Positioning) messages provide relative position information in a
North, East, Down (N-E-D) frame. It's mainly used for applications requiring relative positioning
between two receivers, often as a part of Real Time Kinematics (RTK) solutions.
It shows the difference in position between a "moving" receiver and a "fixed" reference receiver.
:::

:::tip TIP
For a comprehensive understanding of the list of variables available in each GPS message,
make sure to check their [protobuf definitions](https://github.com/farm-ng/farm-ng-amiga/blob/main-v2/protos/farm_ng/gps/gps.proto).
:::

## Requirements

For the GPS service to function optimally, certain conditions must be met:

- The robot must have an active Wi-Fi connection, ensuring real-time data communication.
- **NOTE**: The robot needs to be connected to Wi-Fi for `relposned` messages.
However, an internet connection is not required for `pvt` messages.
- Users need to input credentials for connecting to an RTK base station, enhancing the GPS accuracy.
The required credentials include:
- NTRIP ID: The server address of the base station.
- NTRIP PORT: The port used by the NTRIP server.
- NTRIP MOUNTPOINT: Specific mount point on the NTRIP server.
- USER: Username for accessing the base station.
- PASSWORD: Corresponding password for the above username.

:::info NTRIP (Network Transport of RTCM via Internet Protocol)
NTRIP is a protocol for streaming differential GPS (DGPS) data over the internet, enabling RTK
corrections in areas with cellular coverage.
Connecting to an NTRIP service enhances the GPS accuracy, crucial for tasks requiring precision navigation.
:::

:::tip Pro Tip for California Users
If you're operating in California, consider [**signing up**](https://www.surveymonkey.com/survey-taken?sm=8oRYqrBI74rDSaBAdtcV5GY0_2FRs585_2FD4c_2BTVJDw_2Be9msUlD1XrZDpZ1Rvu0DLWBo8bsPAjLG8jj8DbutXMqryiezNdZiuVvgEb0osp55QY_3D)
for a free CRTN
(California Real Time Network) account.
Managed by UC San Diego, [CRTN](http://sopac-csrc.ucsd.edu/index.php/crtn/) provides access
to multiple base stations across the state, offering enhanced GPS accuracy.
Other states or regions may have similar services available.
Always check local resources for the best positioning support in your area.
:::

## Utilizing GPS Data

The GPS data, while technical, is immensely valuable.
With high-precision location information, users can:

1. **Enhance Navigation**:
Use the precise geospatial data in navigation tasks, allowing the Amiga to traverse pre-defined
routes with minimal deviation.

2. **Inform Decision-Making**:
Analyze the GPS data to make informed decisions about resource allocation, route optimization,
and task planning.

3. **Improve Operational Efficiency**:
Leverage the accuracy of real-time GPS data to enhance the reliability and efficiency of automated tasks,
reducing the need for human intervention and potential for error.
76 changes: 76 additions & 0 deletions website/docs/concepts/oak_service/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
---
id: oak-overview
title: OAK
---

# Oak Service Overview

The OAK service is a versatile component in the Amiga ecosystem, providing valuable data streams
from the onboard OAK-D device, which includes stereo vision capabilities and an Inertial Measurement
Unit (IMU).
This service doesn't serve a singular purpose; instead, it offers a range of data that can be
instrumental for various user-defined applications, from navigation and mapping to object detection
and data collection.

The OAK service is autonomous, not relying on other services to function.
However, its data, especially the IMU information, plays a significant role in the Amiga's autonomous
navigation capabilities, as it's fused with GPS and wheel odometry data in the Filter service
(using an Unscented Kalman Filter).

# Multiple Instances

Depending on the number of OAK devices connected to the Amiga, there might be multiple instances
of the OAK service running concurrently.
For example, with two OAK cameras, there will be an oak0 service and an oak1 service.
Each instance is responsible for managing the data streams from its respective OAK-D device.

## Standalone Operation

Unlike other services, each Oak service operates independently and is not a client of any other services.

## Message Types

Clients can subscribe to the OAK service to access the messages it publishes.
These messages can include various data types such as:

- Stereo vision (right and left)
- RGB data
- Accelerometer data
- Gyroscope data

The specifics of these messages, including their data structures and formats, are defined in the
service's [protobuf definitions](https://github.com/farm-ng/farm-ng-amiga/blob/main-v2/protos/farm_ng/oak/oak.proto),
which users can refer to for detailed information.

## Requirements

For the Oak service to function, there's only a single requirement:
the oak camera(s) need to be powered via the POE Switch.

## API

The OAK service offers a few API endpoints that allow users to interact with and configure the
OAK-D device's settings:

- `/calibration`: Retrieves the calibration of the device, specifically the intrinsic parameters of
the cameras.
This is typically a one-time requirement unless the device undergoes significant changes or maintenance.

- `/camera_settings/rgb`: Allows users to configure the RGB camera settings.
If no settings are specified in the request, the service will return the current settings.

- `/camera_settings/mono`: Similar to the RGB settings endpoint, this allows users to configure
the mono camera settings or retrieve them if no new configurations are specified.

While the specifics of these configurations are found in the protobuf definitions, they offer users
the ability to customize the camera performance as per their application requirements,
potentially adjusting parameters like exposure, focus, and white balance.

## Practical Applications

One of the key applications of the OAK service within the Amiga system is contributing to the robot's
autonomous navigation.
The gyroscope data from the OAK service's IMU is crucial for the robot's state estimation,
as it's fused with other data sources in the Filter service.
This fusion helps in achieving accurate positioning and orientation, enabling the Amiga
to navigate effectively and autonomously.
8 changes: 7 additions & 1 deletion website/docs/ssh/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,11 @@ The only requirement is to **be connected to the same network of your Amiga**.

### Sign up for a farm-ng-user account

#### 1. Request SSH access to our Fleet Customer Support via email (coming up soon)
#### 1. Request SSH access to our Fleet Customer Support via email

Email [support@farm-ng.com](mailto:support@farm-ng.com) to request SSH access.
Make sure to include your name, email, and robot information on the email
to expedite the process.

#### 2. You will receive a confirmation email with a link for sign-up along with instructions

Expand Down Expand Up @@ -105,6 +109,8 @@ cat ~/.ssh/id_rsa.pub # Copy it with Shift + Ctrl + C

They will grant you access to your robot.

As a reminder, our email is [support@farm-ng.com](mailto:support@farm-ng.com)

Congratulations, you're done setting up your account!

:::info INFO
Expand Down
4 changes: 4 additions & 0 deletions website/sidebars.js
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,10 @@ const sidebars = {
"concepts/concepts-index",
{
"Service Overviews": [
"concepts/canbus_service/canbus-overview",
"concepts/oak_service/oak-overview",
"concepts/gps_service/gps-overview",
"concepts/filter_service/filter-overview",
"concepts/controller_service/controller-overview",
],
},
Expand Down

0 comments on commit c5f8ccf

Please sign in to comment.