Dump Trucks following GPS waypoints at varying speeds
Hi ROS people
I am looking at using ROS for making dump trucks drive a predefined (recorded) route (GPS/GNSS).
The general idea is that an operator will manually drive the truck from A to B - while we record the route (and speed) using GNSS. Later - the truck should drive the route itself. At some positions the truck will need to apply brakes and at other positions it will need to apply gas.
Our company has solved most of the hardware part of this challenge - the dump trucks are already remote controlled. I can easily control all aspects of the truck (steering, throttle, breaks, handbrake, gears, raising the bed etc.) by sending UDP packages to it. Some of the dump trucks are articulated (e.g. Volvo A30) while other dump trucks have Ackerman steering (e.g.Caterpillar 775).
Articulated Dump Truck
We are probably going to use 2 x UBlox ZED-F9P on each dump truck - in order to get the Pose. A local base station will be set up in order to provide RTCM corrections.
The trucks will only be used in a closed area without people - but we will still equip them with Lidar in order to detect obstacles when driving the route. If an object is detected in the way the truck will stop - and a supervisor will manually remote control the dump truck around the obstacle - or simply press "RESUME" when the obstacle is gone/cleared.
I am experienced with C++, but relatively new to ROS.
So - my question is: What ROS Packages / strategies would you recommend that I use as the building blocks for the initial recording and also for the navigation?
For Recording:
Subscribe to GNSS messages and log these into a file when driving the truck
/// Latitude | Longitude | Heading | Speed
42.424124 | 42.24234 | 253.5223 | 30
41.424125 | 42.24222 | 253.2211 | 29
For Playback (following the path)
- Write my own simple controller - simple math to control heading and speed. Subscribe to Lidar messagges - and stop when a obstacle is detected in the way. Seems like the simplest/easiest approach?
- Use navigation/move_base (and Ackermann) - where I implement the pure pursuit algorithm as a local planner plugin? This will give me localization/maps - but not sure I really need this...
- Use teb_local_planner ?
- Use move_base_flex in order to have a pre-defined global path ?
- Not using ROS at all - just stick to good old math & C++
- ...?
Would love to hear some thoughts from people with more ROS experience ๐
A pic of our remote control setup
I have a feeling this may be more akin to autonomous/intelligent vehicles than what the nav stack is typically used for (ie: AGVs in indoor-ish settings with known maps and semi-structured environments).
Perhaps Autoware would be better suited. It's still ROS (ROS 2 actually for the new versions), but focused on the typical self-driving car scenario. Be sure to visit the Discourse category as well, and be aware that Autoware is in a transition phase (from ROS 1 to ROS 2).
There are other projects similar to Autoware. In fact, it's an entire scene.
That's not to say nav stack cannot be used for these kinds of things: especially when adding a pure pursuit controller it starts to become much more feasible, but I would still recommend reaching out to the Autoware community as I feel it has many building blocks you could use.
Perhaps @Geoff ...(more)