So, I got a new robot vacuum. A Xiaomi Roborock 2 S50.
I had an old Roomba before, bought used for cheap to test out the whole robot vac thing. The way it worked was you pressed the big round start button on top to turn it on, ideally before you left for work in the morning. It then trundled along and changed direction whenever it bumped into something. When the battery was getting low it started looking for the charger, but still not with any kind of brains. The charger had an infrared beacon on top and when (or if) the bot eventually managed to get within range, it docked to charge and turned itself off. Sometimes I would find it dead on the floor because it didn't make it home in time. I honestly don't know how good or bad the battery life was because one battery cycle equals one vacuuming cycle and that's that.
The Xiaomi on the other hand is LIDAR guided and connected to the internet and stuff. I'm fully aware they're a Chinese company and the amount of system permissions the iOS app asks for on first launch is mildly frightening. BUT, intelligent navigation is so much better than the dumb Roomba. It builds a floor plan of my flat and cleans everything methodically. If it runs out of battery it goes back to charge and continues on where it left off until the entire floor plan is finished, but it seems my flat is too small for it to use more than a third of the battery even with the vac set to full power "turbo" mode.
It's a lot better at actually picking up dust and dirt than the Roomba ever was. It's also a lot less rough on the furniture - for example, the Roomba always opened the bump-to-open doors and drawers on my IKEA TV bench. The Roborock doesn't.
And having the app is excellent because I never remembered to actually turn the Roomba on when I left for work. I can remotely start the Roborock at at any point during the day.
It's never been stuck on anything and I've never had to carry it back to put it on the charger. I'll probably move the charging station under the bed to get it out of sight because why not? When it needs emptying I'll just use the app to summon it