There are buses.
In fact there are several options.
However it's all documented in the multitude of previous threads on this subject.
There is a bus from Gaberone to Francistown, and a bus from Francistown to Maun. Sometimes there is a bus from Gaberone to Maun. There is a bus from Johannesburg to Windhoek, and a bus from Windhoek to Maun. You can take the train into Zimbabwe and a bus down into Botswana. There are lots of options. But figure on just over USD 100 for the cheapest, 150 for some options, and as much as 500 to fly.