I have worked as a software developer in several companies where work was distributed among multiple teams, which worked on different (though sometimes related) projects.

Because of this, there is usually little communication between the teams, since it is not strictly necessary for day-to-day work. Still, I always felt that more communication would be helpful: 

* to identify common problems
* to learn from others
* to better understand the company's business outside your own project
* ...and just to improve the atmosphere between the teams

How can I go about fostering communication even where it's not strictly necessary for a project? Does it make sense to organize team events (talks, common lunches, ...)? Or is that too formal? What might work?