mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2026-05-02 20:01:22 +00:00
Rewrite the GPS setup guide
Mostly trying to avoid the number of asides, to make it a bit more straightforward. I'm not entirely sure I succeeded. Fixes #1681, closes #1542.
This commit is contained in:
@@ -9,85 +9,68 @@ SPDX-License-Identifier: MPL-2.0
|
||||
-->
|
||||
|
||||
# Setting up GPS
|
||||
The [`gps`] API allows computers and turtles to find their current position using wireless modems.
|
||||
The [`gps`] API allows a computer to find its current position using a [wireless modem][`modem`]. This works by
|
||||
communicating with other computers (called *GPS hosts*) that already know their position, finding the distance to those
|
||||
computers (with [`modem_message`]), and using that to derive its position from theirs (with a process known as
|
||||
[trilateration](https://en.wikipedia.org/wiki/Trilateration).
|
||||
|
||||
In order to use GPS, you'll need to set up multiple *GPS hosts*. These are computers running the special `gps host`
|
||||
program, which tell other computers the host's position. Several hosts running together are known as a *GPS
|
||||
constellation*.
|
||||
In order for this to work, we need our GPS hosts set up in a specific pattern, each one differing in position on at
|
||||
least one axis. This guide takes you through the process of setting up a *constellation* of GPS hosts, and using them to
|
||||
determine a computer's position.
|
||||
|
||||
In order to give the best results, a GPS constellation needs at least four computers. More than four GPS hosts per
|
||||
constellation is redundant, but it does not cause problems.
|
||||
## Prerequisites
|
||||
You will need:
|
||||
|
||||
## Building a GPS constellation
|
||||
<img alt="An example GPS constellation." src="../images/gps-constellation-example.png" class="big-image" />
|
||||
- Four computers.
|
||||
- Four Ender Modems. Normal Wireless Modems maybe be used, but the range of the GPS constellation will be severely
|
||||
limited.
|
||||
|
||||
We are going to build our GPS constellation as shown in the image above. You will need 4 computers and either 4 wireless
|
||||
modems or 4 ender modems. Try not to mix ender and wireless modems together as you might get some odd behavior when your
|
||||
requesting computers are out of range.
|
||||
Additionally, you will need another computer and a wireless modem, in order to test GPS works!
|
||||
|
||||
> [Ender modems vs wireless modems][!TIP]
|
||||
> Ender modems have a very large range, which makes them very useful for setting up GPS hosts. If you do this then you
|
||||
> will likely only need one GPS constellation for the whole dimension (such as the Overworld or Nether).
|
||||
>
|
||||
> If you do use wireless modems then you may find that you need multiple GPS constellations to cover your needs.
|
||||
>
|
||||
> A computer needs a wireless or ender modem and to be in range of a GPS constellation that is in the same dimension as
|
||||
> it to use the GPS API. The reason for this is that ComputerCraft mimics real-life GPS by making use of the distance
|
||||
> parameter of [modem messages][`modem_message`] and some maths.
|
||||
## Picking an area
|
||||
First, choose a place to build your GPS constellation. This should be a 10x10x10 cube, though you can make this smaller
|
||||
if needed. The larger a constellation is, the more accurate it is over large distances, but even a 5x5x5 constellation
|
||||
should serve a several thousand block radius.
|
||||
|
||||
Locate where you want to place your GPS constellation. You will need an area at least 6 blocks high, 6 blocks wide, and
|
||||
6 blocks deep (6x6x6). If you are using wireless modems then you may want to build your constellation as high as you can
|
||||
because high altitude boosts modem message range and thus the radius that your constellation covers.
|
||||
Every computer must be loaded in order for other computers to use GPS, so it is recommended to build your GPS
|
||||
constellation in a single chunk that will always be loaded. You may want to choose an area in an already chunk-loaded
|
||||
part of your base, or in the [spawn chunks][spawn chunks]. You can use <kbd>F3+G</kbd> to view the chunk boundaries if
|
||||
needed.
|
||||
|
||||
The GPS constellation will only work when it is in a loaded chunk. If you want your constellation to always be
|
||||
accessible, you may want to permanently load the chunk using a vanilla or modded chunk loader. Make sure that your 6x6x6
|
||||
area fits in a single chunk to reduce the number of chunks that need to be kept loaded.
|
||||
[spawn chunks]: https://minecraft.wiki/w/Spawn_chunk "Spawn Chunk — Minecraft Wiki"
|
||||
|
||||
Let's get started building the constellation! Place your first computer in one of the corners of your 6x6x6. Remember
|
||||
which computer this is as other computers need to be placed relative to it. Place the second computer 4 blocks above the
|
||||
first. Go back to your first computer and place your third computer 5 blocks in front of your first computer, leaving 4
|
||||
blocks of air between them. Finally for the fourth computer, go back to your first computer and place it 5 blocks right
|
||||
of your first computer, leaving 4 blocks of air between them.
|
||||
This is the example area we will be building our constellation in:
|
||||
|
||||
With all four computers placed within the 6x6x6, place one modem on top of each computer. You should have 4 modems and 4
|
||||
computers all within your 6x6x6 where each modem is attached to a computer and each computer has a modem.
|
||||
<img alt="An empty 10x10x10 area, with the axis marked with smooth stone." src="../images/gps-constellation-area.png" class="big-image" />
|
||||
|
||||
Currently your GPS constellation will not work, that's because each host is not aware that it's a GPS host. We will fix
|
||||
this in the next section.
|
||||
## Building the constellation
|
||||
|
||||
1. Place down your first computer in a corner of your area, and put a modem on top.
|
||||
2. Head to the two adjacent corners of your area, place down another two computers and put a modem on top of each.
|
||||
3. Pillar up above the first computer to the top of your cube, and place the final computer. Place a modem on the
|
||||
computer.
|
||||
|
||||
You should now have something like this:
|
||||
|
||||
<img alt="The same area as before, but with a computer in each corner." src="../images/gps-constellation-built.png" class="big-image" />
|
||||
|
||||
## Configuring the constellation
|
||||
Now that the structure of your constellation is built, we need to configure each host in it.
|
||||
|
||||
Go back to the first computer that you placed and create a startup file, by running `edit startup`.
|
||||
1. Press <kbd>F3</kbd> to open Minecraft's debug screen.
|
||||
2. Go back to the first computer and look at it. On the right of the screen about halfway down you should see an entry
|
||||
labelled `Targeted Block`, the numbers correspond to the position of the block that you are looking at. Write these
|
||||
numbers down.
|
||||
3. Open the computer's UI, and run `edit startup.lua`.
|
||||
4. Type the following code into the file, replacing `x`, `y`, and `z` with the coordinates you just wrote down.
|
||||
|
||||
Type the following code into the file:
|
||||
```lua
|
||||
shell.run("gps", "host", x, y, z)
|
||||
```
|
||||
```lua
|
||||
shell.run("gps", "host", x, y, z)
|
||||
```
|
||||
5. Save the file, and then reboot the computer (hold <kbd>Ctrl+R</kbd> or run the `reboot` program) to run the startup
|
||||
program.
|
||||
|
||||
Escape from the computer GUI and then press <kbd>F3</kbd> to open Minecraft's debug screen and then look at the computer
|
||||
(without opening the GUI). On the right of the screen about halfway down you should see an entry labeled `Targeted
|
||||
Block`, the numbers correspond to the position of the block that you are looking at. Replace `x` with the first number,
|
||||
`y` with the second number, and `z` with the third number.
|
||||
|
||||
For example, if I had a computer at x = 59, y = 5, z = -150, then my <kbd>F3</kbd> debug screen entry would be `Target
|
||||
Block: 59, 5, -150` and I would change my startup file to this `shell.run("gps", "host", 59, 5, -150)`.
|
||||
|
||||
To hide Minecraft's debug screen, press <kbd>F3</kbd> again.
|
||||
|
||||
Create similar startup files for the other computers in your constellation, making sure to input the each computer's own
|
||||
coordinates.
|
||||
|
||||
> [Modem messages come from the computer's position, not the modem's][!WARNING]
|
||||
> Wireless modems transmit from the block that they are attached to *not* the block space that they occupy, the
|
||||
> coordinates that you input into your GPS host should be the position of the computer and not the position of the modem.
|
||||
Repeat this process for the other three computers.
|
||||
|
||||
Congratulations, your constellation is now fully set up! You can test it by placing another computer close by, placing a
|
||||
wireless modem on it, and running the `gps locate` program (or calling the [`gps.locate`] function).
|
||||
|
||||
> [Why use Minecraft's coordinates?][!INFO]
|
||||
> CC doesn't care if you use Minecraft's coordinate system, so long as all of the GPS hosts with overlapping ranges use
|
||||
> the same reference point (requesting computers will get confused if hosts have different reference points). However,
|
||||
> using MC's coordinate system does provide a nice standard to adopt server-wide. It also is consistent with how command
|
||||
> computers get their location, they use MC's command system to get their block which returns that in MC's coordinate
|
||||
> system.
|
||||
|
||||
BIN
doc/images/gps-constellation-area.png
Normal file
BIN
doc/images/gps-constellation-area.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 346 KiB |
BIN
doc/images/gps-constellation-built.png
Normal file
BIN
doc/images/gps-constellation-built.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 335 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 331 KiB |
@@ -5,29 +5,14 @@
|
||||
--[[- Use [modems][`modem`] to locate the position of the current turtle or
|
||||
computers.
|
||||
|
||||
It broadcasts a PING message over [`rednet`] and wait for responses. In order for
|
||||
this system to work, there must be at least 4 computers used as gps hosts which
|
||||
will respond and allow trilateration. Three of these hosts should be in a plane,
|
||||
and the fourth should be either above or below the other three. The three in a
|
||||
plane should not be in a line with each other. You can set up hosts using the
|
||||
gps program.
|
||||
|
||||
> [!NOTE]
|
||||
> When entering in the coordinates for the host you need to put in the `x`, `y`,
|
||||
> and `z` coordinates of the block that the modem is connected to, not the modem.
|
||||
> All modem distances are measured from the block that the modem is placed on.
|
||||
|
||||
Also note that you may choose which axes x, y, or z refers to - so long as your
|
||||
systems have the same definition as any GPS servers that're in range, it works
|
||||
just the same. For example, you might build a GPS cluster according to [this
|
||||
tutorial][1], using z to account for height, or you might use y to account for
|
||||
height in the way that Minecraft's debug screen displays.
|
||||
|
||||
[1]: https://ccf.squiddev.cc/forums2/index.php?/topic/3088-how-to-guide-gps-global-position-system/
|
||||
This works by communicating with other computers (called GPS hosts) that already
|
||||
know their position, finding the distance to those computers (with
|
||||
[`modem_message`]), and using that to derive its position from theirs (with a
|
||||
process known as [trilateration](https://en.wikipedia.org/wiki/Trilateration).
|
||||
|
||||
@module gps
|
||||
@since 1.31
|
||||
@see gps_setup For more detailed instructions on setting up GPS
|
||||
@see gps_setup
|
||||
]]
|
||||
|
||||
local expect = dofile("rom/modules/main/cc/expect.lua").expect
|
||||
|
||||
Reference in New Issue
Block a user