Gaborone’s proximity to Johannesburg (280km away) makes it a decent entry/exit point for self-drivers travelling between Botswana and South Africa. The most direct route is through Pioneer Gate, which connects Lobatse (Botswana) and Zeerust (South Africa).
Formalities on the Botswana side of the border are fairly straightforward: you’ll be asked for your car’s details and your vehicle may be searched for fresh meat and dairy products. On the South African side, travellers entering and departing are rarely held up for long, although if your hire vehicle is registered in South Africa, make sure you have the paper from the rental company granting permission to take the car outside the country. If travelling this route, allow longer than you expect as the succession of townships on the South African side of the border can slow you down considerably.
Other convenient border crossings:
Tlokweng Gate (Kopfontein; 6am to midnight) Another busy crossing that can work for Johannesburg and is good for Madikwe Game Reserve.
Ramotswa (Swartkopfontein; 7am to 7pm) Less frequented crossing that can also be used for Zeerust and Johannesburg.
Sikwane (Derdepoort; 6am to 7pm) For Madikwe Game Reserve.
Ramatlabama (6am to 10pm) Connects Gaborone and Johannesburg via Mafikeng.
Please note that minibuses to Johannesburg drop you off in a pretty unsafe area near Park Station; try to have onward transport arranged immediately upon arrival.
Domestic buses leave from the main bus terminal. To reach Maun or Kasane, you’ll need to change in Francistown. Buses operate according to roughly fixed schedules and minibuses leave when full.