Reuben, good day to you. I have solved problems like yours with the QGIS tool PointstoPaths (note the plural Paths). This is an extraordinarily useful tool. Sadly, it is only available at QGIS v. 2.X. If you don't have v. 2.X installed, download the latest version at:
For my Windows 10 machine, I use the install file QGIS-OSGeo4W-2.18.28-2-Setup-x86_64.exe
Once installed, add the PointstoPaths plugin.
You will need two layers, your road layer and your GPS points. As with all GIS analysis procedures, please make sure that they have been projected to the same Coordinate Reference System, and that they contain no geometry errors.
Run PointstoPaths, using the GPS point layer. The Point Group Field will identify each unique animal. In my screenshot below, that field is animal_no.
The Point Order field will be your GPS date/time field. I have had best success setting that field to text, 19-characters long. Within that field, the values look like 2020-05-02 18:56:25 That date/time format is entered in Date Format as %Y-%m-%d %H:%M:%S. Note the blank between date and time.
Important: You must check the Line per Vertex checkbox! It is this option that gives PointstoPaths its unique capability.
PointstoPaths will now output a line shapefile. Each segment in this shapefile will have two fields, begin and end. Not surprisingly, begin and end contain the beginning and ending GPS date/time values that sequentially comprise each segment. These two fields are what make PointstoPaths so special, because each segment can now be related back to the two points that created it.
Now, use the QGIS Select by Location tool to select which output line segments intersect with the roads. Voila! The resulting selection will detail which animals crossed a road, along with the beginning and ending time of each crossing.
I only wish that PointstoPaths were upgraded to 3.x!
Note that the output field names begin and end are reserved ESRI words. To avoid downstream problems, I rename them to something else.