Ubuntu, just like any other linux distibution, supports any hardware, that is supported by supplied kernel (kernel itself + kernel modules). Most distibutions use "hardware-wide" kernels, that are compiled with support for a wide amount of hardware, to make kernel compatible with as many PCs as possible.
This means that (from hardware point of view) OS, installed with default kernel, will be able to launch on any PC, that can handle this OS default installation (so, as mentioned above, 32-bit PC won't launch 64-bit kernel of ubuntu64)
If you have problems with some of your PCs, you can allways alter your kernel configuration and recompile it with support of unsupported-by-default hardware, but also note that you will have to keep basic settings (supported architecture, instructions sets and so on) on the level of weakest PC (just like 32/64 example - if you want one stick for 10 x64 PCs and 1 x32 PC, you have to use x32 on all 11 PCs) or create several boot points mapping to different kernels.
After start, you should take in mind, that you may have to reconfigure your network settings (as long as ethernet devices naming varies depending on hardware and because you will have another MAC address - so your network's DHCP and NAT policies will be raised here)
Additional hardware, that is not handled by kernel itself - like proprietary GPU drivers or drivers that use proprietary firmware (for example oldish usb scanners) will require configuration because it is not configured on-the-fly during boot process by default.
Also note, that beside of hardware support, there is also some logic-related stuff like host naming (if you will launch 20 clones in one network you will have a network of same-named pcs), dhcp leasing (20 launches of 1 clone on 20 pcs will take 20 leases instead of one with different IPs, so if you are on dhcp, you will have to alter your NAT rules on your router) and so on.