What's the minimum transaction with bitcoin - local wallet to local wallet. Can I send for example $20 in bitcoins to another person?
You can send any number of bitcoins to anyone, even 1 satoshi (see exceptions below), which is 0.00000001 BTC (about 0.00001031 USD)
However for such small amounts you may not want to include a transaction fee.
There is no minimum transaction fee. However if you send a transaction without any fee you can expect a significant delay in it getting into the blockchain and therefore getting it confirmed. I have tried this recently and it took around 18 hours to get the first confirmation for my transaction. Others have mentioned even higher delays (up to 2 days) in some cases.
It is currently the norm to include a fee of 0.0001 to 0.0005 (approximately 10 to 50 US cents at current exchange rates), resulting in a fairly speedy entry into the blockchain (meaning on average 10 to 20 minutes wait for the first confirmation).
Please note it doesn't make a difference if the transaction happens on the same LAN or even between 2 of your own addresses in the same wallet. If it needs to go on the blockchain the fee should be included unless you are prepared to wait.
So in practice, the smallest amount you want to send is one that makes sense taking into account that fee.
In some circumstances, some bitcoin clients will not even allow you to send a transaction without a fee. This is when your transaction size (in bytes, not the BTC amount being transferred) is over a certain limit. In those cases the client will notify you and ask you to confirm the sending of the fee or cancel the transaction. You can bypass this limit with other clients, but for the same reasons explained above is not something I would recommend.
Finally, to take your example of $20 USD, at current BTC/USD exchange rate of $1034.52 you would simply send 0.01933264 BTC + 0.0001 fee.
Exceptions: As @CoinEnablers mentioned in the comments below, in order to fight transaction spam, some measures have been recently introduced to limit very small transactions (so called "dust" transactions). As far as I'm aware these are not changes to the protocol, but simply new default configurations on both clients and miners' software, that makes it fairly hard to get very small amounts accepted. Currently I believe the minimum value accepted by default is set at 5460 satoshi.
Currently, as of Bitcoin Core 0.14.1 the minimum for outputs is:
5460 Satoshi 54.6 μBTC 0.0546 mBTC 0.00005460 BTC 5460/100000000 BTC
The current minimum output to be relaid is 547sat.
According to this test, 546 is dust output.
This value gets updated over time with new releases and is only a default configuration thing. A block containing 1sat outputs is still valid, so miners can mine smaller outputs but by default they don't.