Suppose I have a rhombus based penrose tiling like the following:
Is there some coordinate system that allows me to easily uniquely refer to a specific tile, and also from the coordinates efficiently calculate the coordinates of the tiles that border it?
I also need to be able to easily tell what tile is on the "opposite side" edge of a tile with respect to a different tile that also borders it.
Basically my end goal is, if I have some instruction like "Straight, Straight, Left, Straight, Right" and follow them on the grid to calculate if I ever cross my own path and when.

I think I found a functional system. First we give each tile a letter, A to E:
Now we can refer to any position by specifying which tile it is, then the tile of the parent, then the tile of the parents parent etc.
However, we can't actually store infinite coordinates, so we follow a pattern. I choose the pattern
CEDBAArepeating forever but many other combinations will work. Now if I have a coordinate likeAit actually meansAEDBAACEDBAACEDBAA...where I only override the beginning of the basic shared pattern with the new coordinate.Calculating what moving in a specific direction would look like
Now all we need is rules to cover how to traverse the grid. Each tile has 4 sides, North, East, South, and West, where north is represented by the left indentation. Now all we need to define for each side of every tile type where you would end up if you go that way. Some examples:
There are 20 such rules plus 10 more for what happens if you enter one of the large tiles from a specific edge, half edge, or quarter edge. You can find the full list of rules here
When leaving the parent tile, repeat the process for the parent's parent, and the parent's parent parent, until you reach an instruction that allows you to enter a tile, at which point you use the matching rule for what happens when entering a tile from a specific edge until you reach a physical, first level tile again.
In some rare cases entering a tile form a specific angle connects directly back outwards. For example entering the thin rhomb from the south (bottom right) immediately connects back out to the right half of the top. This rhomb is guaranteed to be filled by a thick rhomb from the tile that connects to the east edge. In this case the algorithm will transition from a inwards motion to an outwards motion again.
Some resources that where incredibly helpful working this out: https://tilings.math.uni-bielefeld.de/substitution/penrose-rhomb/ and https://en.wikipedia.org/wiki/Penrose_tiling