Addressable simple serial bus for medium distances using PIC microcontrollers?
CAN is definitely the way to go.  There are plenty of PICs that have a CAN peripheral built in.  The electrical interface and up to the packet layer, including checksum generation and checking, is all built into the hardware.  The hardware also handles collision detection and transmission retry.  At 20 meters you should be able to run the CAN bus at 1 Mbit/s, but if speed isn't a priority you can run it quite safely at 500 kbits/s.

RS-485 is very old school and makes you do a lot more yourself in firmware.  The RS-485 spec only tells you the signalling levels and leaves the rest to you.  You can use the UART hardware to at least send and receive whole bytes, but you still need external hardware to explicitly switch each node between transmit and receive, and then firmware that knows when to switch.  CAN may seem intimidating when you first read about the peripheral in the datasheet, but after writing all the protocol layers for a robust multi-node communication interface you will have spent a lot more effort than using CAN.  With CAN, you send and receive whole packets that contain either a 11 or 29 bit ID and up to 8 data bytes.  The hardware takes care of sending and receiving these at the packet level, and you don't have to worry about who is sending when, master versus slave, etc.

Don't listen to people who got stuck in the 1990s and are still using RS-485.  There is a better way, and it's been around for a while.  You should consider that many major protocols that were RS-485 back in the pleistocene now have newer versions that use CAN.  These include automotive and shipboard communication busses.