2012-02-28 6 views
0

Je dois écrire un programme qui effectue 2 tâches en même temps pour une meilleure efficacité & réponse élevée. La première tâche est, par exemple, d'obtenir des données de vision d'une caméra & le traiter.programmation parallèle pour le contrôle du robot

La deuxième tâche consiste à recevoir des données traitées à partir de la première tâche & en utilisant ces données (stratégie de contrôle du robot). Cependant, alors que la tâche de contrôle du robot est en cours, la réception des données de la caméra devrait toujours fonctionner.

Existe-t-il une solution pour un tel type de programmation en C++/C# ?? J'apprends TBB, est-ce le bon choix? Cependant, je suis en train de lire des choses comme "la parallélisation en boucle", je vais dans la bonne direction ??

Ce lien renvoie à un style très commun dans la programmation de contrôle où l'ordinateur est utilisé comme unité centrale pour se connecter à des appareils électroniques (capteurs) & actionneurs et tous ces dispositifs sont traités simultanément

Répondre

2

Non, votre exemple de boucle la mise en parallèle utilise la programmation parallèle pour accélérer le résultat d'un calcul pour un ensemble de données.

Ce dont vous avez besoin est multitâche. Vous n'avez mentionné aucune architecture cible. En supposant que ce sera un système embarqué, comme un microprocesseur, vous avez plusieurs options. Il y a des micro-OS embarqués comme VXworks et uC-OS qui vous permettent de faire exactement ce que vous demandez. Ceux-ci vous permettent de configurer plusieurs "tâches" qui s'exécutent pratiquement simultanément. Bien sûr, la vraie simultanéité est impossible avec un seul processeur, mais le planificateur de ces systèmes d'exploitation est conçu pour être très déterministe, pour les systèmes en quasi-temps réel comme vous le décrivez.

+0

oui, pour être plus précis. J'utilise un PC de bureau Core i7, win7. J'essaie d'obtenir des informations de retour d'une caméra et de contrôler le robot avec ce PC, VS2008 et OpenCV 2.1. Comment puis-je gérer cela? si c'est multitâche, quel outil utiliser sur mon architecture? –

0

Ça me semble bon! TBB OK, C# a des classes utiles de pool de threads etc. Juste une chose, si vous n'avez rien fait de pareil auparavant, tout dépend des données, pas du code. Si vous concevez le flux de données correctement, le code s'écrira lui-même (OK, pas vraiment :).

+0

oui. J'ai examiné le livre TBB. TBB est également utilisé pour la programmation de jeux, la division des rendus, les modules de tâches physiques et leur parallélisation. Ensuite, je suppose que cela s'applique aussi à mon problème. C'est plus sur la façon de diviser la grande tâche en petites unités de tâches parallèles. Pourtant, cela prend beaucoup de temps pour apprendre. : | –

Questions connexes