For any large mesh, using a proper routing protocol is a good idea; the default behavior of ethernet it to construct a spanning tree and prune any links that would result in a cycle, which leads to suboptimal routing if you have more than two routers.
There's been a lot of interesting research in wireless routing. One of the more interesting ideas [1] is to use the probability of packet loss as part of the link cost metric, to discourage routers from always using the path with the fewest number of hops, which might be very unreliable.
It's been about a decade since I looked at any of this stuff, so I don't know what the state of the art is these days.
[1] https://pdos.csail.mit.edu/papers/grid:mobicom03/paper.pdf
http://www.metamesh.org <- the org http://www.metamesh.tech <- the tech & store http://www.pittmesh.net <- the network
[0] https://tools.ietf.org/wg/homenet/
[1] https://tools.ietf.org/html/rfc7788
DD-WRT/tomato/others do have mesh features but it depends on the radio chipset and other things.
You can just buy a 802.11ac repeater for $40.
Use OpenWRT Chaos Calmer, that is the latest stable released and quite good documented at openwrt.org wiki.
This is something that should work fine: https://wiki.openwrt.org/doc/howto/mesh.batman
There was a split and now most of the former OpenWRT devs build LEDE - but they don't have a release yet, however if you need support for newer routers or it's there. It's pretty close to the Linux kernel and most fixes (and also breakage) are timely there. http://www.lede-project.org
for routing: There is olsrdv1 and the new and shiny OLSRv2 that uses IPv6 link-local addresses and has a new metric for optimizing links that takes a lot of stuff into account like packet loss, throughput and so on. https://olsrd.org
There is also babel where lot's of stuff is happening - there is experimental layer3 roaming https://github.com/jech/babeld https://github.com/tcatm/l3roamd
I'm not sure if that's true but I think batman is the best solution for smaller meshes (<50?) in bigger meshes layer2 overhead is a problem.
There are a lot of active communities related to mesh networking:
There is a yearly conference where they benchmark their mesh implementations against each other. Pretty interesting stuff: http://battlemesh.org/
It's really plug'n'play yet if you do it on your own and don't use a mesh firmware i.e. https://libre-mesh.org
https://internetfreedomfestival.org/wiki/index.php/Deploy_an...
Or the software used in a lot of places for freifunk.net meshes in Germany: https://github.com/freifunk-gluon
I'm sure I've forgotten something but these are projects that care about meshes.