This is basically a skeletonization problem.
Calculate the shortest distance from every interior point to the edge of the polygon. The maximum of this set of values is the radius of the largest circle that will fit in the polygon and any interior point which has this maximum value is a valid center for that circle. There may be more than one center and more than one valid circle. In fact, for any polygon except a perfect circle, there may be one or more connected lines (the "skeleton") along which an infinite number of points lie that are at this maximum distance. Since there are infinite interior points, a grid or regularly-spaced point array of the the appropriate precision, say 0.5 feet or 0.5 meters, will yield a precise approximation.
The pure vector approach would be to create a regular rectangular or triangular array of points and then calculate the distances from all of those points interior to the polygon to its edge. Find the points with the largest distances (rounded to the same precision as the mesh). Use these points to draw your circles (a buffer of the distance).
You could also use a hybrid raster/vector approach. First, convert the polygon and its edge to raster grids, Second, calculate the minimum euclidean distance from each polygon cell to the edge raster cells. Third, get the maximum of the minimum distances. Fourth, convert the maximum cells back to points and use them to draw your circles.
The approach described above is essentially the one used by the Girth metric from ShapeMetrics mentioned in an other answer. From the the girth for each polygon a negative buffer of the polygon to the girth minus the precision desired will yield the polygon eroded by the girth and the contained centroid of the eroded polygon is an ideal location for the circle.