Faits : A. Par ordonnance pénale du 28 août 2014, X._ a été reconnu coupable d'infraction à la LEtr pour séjour illégal et condamné à une peine de 60 jours-amende à 30 fr. le jour. Saisi d'une opposition contre l'ordonnance précitée, le ministère public l'a maintenue et a transmis la cause au Tribunal de police. Le défenseur d'office de X._ a donné son accord au Tribunal de police en charge de l'affaire pour que le mandat de comparution adressé à son client soit notifié en son étude. Le 5 février 2015, le Tribunal de police a convoqué une audience pour le 21 avril 2015. Les convocations du prévenu et du défenseur ont été toutes deux adressées à l'étude de ce dernier. Ces plis ont été régulièrement notifiés le lendemain. Le 21 avril 2015, ni le prévenu ni son défenseur n'ont comparu à l'audience. B. Par ordonnance du 21 avril 2015, le Tribunal de police a constaté le retrait de l'opposition formée par X._ à l'ordonnance du 28 août 2014 en application de l'art. 356 al. 4 CPP. Dans un courrier du 22 avril 2015, le défenseur d'office a présenté au tribunal ses "plus plates excuses", en expliquant que leur absence était liée à un "problème de réorganisation interne de l'Étude" et que le prévenu "n'avait pas été informé de la tenue de la dite audience". C. Par arrêt du 28 mai 2015, la Chambre pénale de recours de la Cour de justice de la République et canton de Genève a rejeté le recours de X._ formé contre l'ordonnance du 21 avril 2015. Elle a considéré qu'il n'y avait pas matière à restitution de délai au sens de l'art. 94 CPP, la faute de l'avocat étant imputable au recourant. D. X._ interjette un recours en matière pénale au Tribunal fédéral contre cet arrêt. Il conclut, sous suite de frais et dépens, à son annulation et au renvoi de la cause à l'autorité inférieure. Il requiert en outre l'assistance judiciaire. E. Invités à se déterminer sur le recours, le Ministère public a conclu à son rejet et la Chambre pénale de recours de la Cour de justice s'est référée à son arrêt sans présenter d'observations. Le recourant a répliqué.