Aller au contenu


Photo

ROS MOVEIT Arduino Motor stepper

ROS MOVEIT Arduino Motor stepper

  • Veuillez vous connecter pour répondre
30 réponses à ce sujet

#1 DJAlexOfficiel

DJAlexOfficiel

    Membre

  • Membres
  • 20 messages

Posté 28 novembre 2022 - 08:49

Bonjour,

 

J'aimerai crée un bras robot avec des motor stepper avec un arduino, j'aimerai utiliser ros moveit avec l'arduino mais je n'arrive pas a associer les deux en même temps.

 

Quelqu'un aurais une idée ou de la doc ?

 

Merci de votre aide 



#2 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 9 963 messages
  • Gender:Male
  • Location:Anglet

Posté 29 novembre 2022 - 02:26

Si tu parles de ROS ( genre ROS robot operating system ) ça tourne sur un " ordinateur " ( genre pc / nuc / voir ordinateur monocarte genre raspberry pi / jetson nano etc... )  du coup il te faut : 

A ) Savoir installer ROS sur ton " ordinateur " et découvrir les base de MoveIt...
B ) Fabriquer ton bras robot pilotable avec un arduino 
C ) Connecter ton ordinateur avec ton arduino avec un Node ROS pour transmettre les informations de positions. 

Tu peux commencer par A ou B, mais il te faudra avoir fait A et B avant de te mettre sur C ...  Bien entendu les étapes A B et C vont se découper en plusieurs sous étapes ...

Tu veux commencer par quoi ? A ou B ? 
 


Si mon commentaire vous a plus laissez nous un avis  !  :thank_you:

Nouveau sur Robot Maker ? 

Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope  aux articles,  à la boutique  et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être ! 
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!

 

Les réalisations de Mike118  

 

 

 


#3 DJAlexOfficiel

DJAlexOfficiel

    Membre

  • Membres
  • 20 messages

Posté 29 novembre 2022 - 07:54

Si tu parles de ROS ( genre ROS robot operating system ) ça tourne sur un " ordinateur " ( genre pc / nuc / voir ordinateur monocarte genre raspberry pi / jetson nano etc... )  du coup il te faut : 

A ) Savoir installer ROS sur ton " ordinateur " et découvrir les base de MoveIt...
B ) Fabriquer ton bras robot pilotable avec un arduino 
C ) Connecter ton ordinateur avec ton arduino avec un Node ROS pour transmettre les informations de positions. 

Tu peux commencer par A ou B, mais il te faudra avoir fait A et B avant de te mettre sur C ...  Bien entendu les étapes A B et C vont se découper en plusieurs sous étapes ...

Tu veux commencer par quoi ? A ou B ? 
 

 

Pour A : Alors oui je s'avais que ros se metais sur ubuntu j'avais l'idée de mettre sur raspberry ceci est en cours d'installation.

 

Pour B : Pour ce qui est du robot avant de construire entierrement le robot, je souhaite faire des test juste sur des moteur en volant pour tester correcement les soft donc j'ai un arduino méga avec un driver TB6600 avec un moteur stepper Nema 17. 

 

Pour C : j'aimerai savoir comment on code l'arduino pour communiquer avec ros c'est mon plus gros problème.

 

Merci



#4 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 766 messages
  • Gender:Male

Posté 29 novembre 2022 - 08:26

Ce sujet m'intéresse beaucoup.

Personnellement, si je devais me lancer dans ROS, je commencerais par essayer d'activer un simple moteur ou un servo avec un Arduino, puis j'extrapolerais pour un bras robot.

 

Questions :

- Est-il nécessaire de passer par la case Raspberry Pi, si le robot est commandé par un Arduino ?

- Ne peut-on pas, plus simplement, mettre Ubuntu sur son PC et commander l'Arduino avec son PC ?



#5 DJAlexOfficiel

DJAlexOfficiel

    Membre

  • Membres
  • 20 messages

Posté 29 novembre 2022 - 08:59

Ce sujet m'intéresse beaucoup.
Personnellement, si je devais me lancer dans ROS, je commencerais par essayer d'activer un simple moteur ou un servo avec un Arduino, puis j'extrapolerais pour un bras robot.
 
Questions :
- Est-il nécessaire de passer par la case Raspberry Pi, si le robot est commandé par un Arduino ?
- Ne peut-on pas, plus simplement, mettre Ubuntu sur son PC et commander l'Arduino avec son PC ?


Mdrrr pas de soucis on va travailler a deux.

-Alors pour moi le rapsberry il y a Ros et l'arduino c'est l'endroit qui gère les moteur stepper avec les driver

-Alors on pourrais utiliser un ordinateur sous Ubuntu pour le contrôler ce n'ai pas obligé de l'utiliser avec un raspberry. Je veux utilisé un raspberry comme ça le soft et dessus et tu peu y accéder à distance grâce à vnc.

#6 Oracid

Oracid

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 6 766 messages
  • Gender:Male

Posté 29 novembre 2022 - 11:37

Mdrrr pas de soucis on va travailler a deux.

-Alors pour moi le rapsberry il y a Ros et l'arduino c'est l'endroit qui gère les moteur stepper avec les driver

-Alors on pourrais utiliser un ordinateur sous Ubuntu pour le contrôler ce n'ai pas obligé de l'utiliser avec un raspberry. Je veux utilisé un raspberry comme ça le soft et dessus et tu peu y accéder à distance grâce à vnc.

J'ai cherché ce que voulait dire "Mdrr" . . . Ah, ah !

 

Oui, chacun peut travailler sur son projet, bien sûr, tout en partageant ses interrogations et ses connaissances sur ROS.

Actuellement, je travaille sur un projet d'UGV (Rover), https://www.robot-maker.com/forum/topic/13733-ugv-a-base-delements-de-trottinette-ou-dhoverboard/?p=117149 et j'aimerais bien, le moment venu, m'initier à ROS. Pour l'instant, je n'en suis pas là, mais ton message a éveillé ma curiosité et mon intérêt.

 

- Donc, si je comprends bien, ton Arduino s'occupe de la partie de bas niveau en commandant les drivers.  Et ton Raspberry Pi contient ROS et communique avec l'Arduino.

 

- Avec ton PC et VNC, tu accèdes au Raspberry Pi. Mais, donc là, ton PC ne sert à rien d'un point de vue strictement ROS. Avec ton PC, tu pourrais tout aussi bien utiliser SSH, pour un résultat identique. Je me trompe ?



#7 DJAlexOfficiel

DJAlexOfficiel

    Membre

  • Membres
  • 20 messages

Posté 29 novembre 2022 - 12:38

J'ai cherché ce que voulait dire "Mdrr" . . . Ah, ah !

 

Oui, chacun peut travailler sur son projet, bien sûr, tout en partageant ses interrogations et ses connaissances sur ROS.

Actuellement, je travaille sur un projet d'UGV (Rover), https://www.robot-maker.com/forum/topic/13733-ugv-a-base-delements-de-trottinette-ou-dhoverboard/?p=117149 et j'aimerais bien, le moment venu, m'initier à ROS. Pour l'instant, je n'en suis pas là, mais ton message a éveillé ma curiosité et mon intérêt.

 

- Donc, si je comprends bien, ton Arduino s'occupe de la partie de bas niveau en commandant les drivers.  Et ton Raspberry Pi contient ROS et communique avec l'Arduino.

 

- Avec ton PC et VNC, tu accèdes au Raspberry Pi. Mais, donc là, ton PC ne sert à rien d'un point de vue strictement ROS. Avec ton PC, tu pourrais tout aussi bien utiliser SSH, pour un résultat identique. Je me trompe ?

Oui je pourrais aussi le faire en ssh



#8 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 260 messages
  • Gender:Male

Posté 29 novembre 2022 - 07:07

Pour ce qui est de B, je connais deux options :

1) si tu utilises ROS1, tu peux utiliser rosserial-arduino (cf https://maker.pro/ar...ting-system-ros ) : l'arduino se comporte alors "comme" un noeud ROS (nb : il faut lancer un noeud ros sur l'ordi pour "relier" l'arduino au réseau ROS. A noter que c'est assez lourd coté arduino (ie tu ne pourra pas publier/souscrire à beaucoup de topics différents, ni recevoir/envoyer des messages à haute fréquence). Je ne sais pas si un équivalent existe en ROS2.

 

2) Tu peux utiliser l'approche "classique" pour communiquer entre l'arduino et ton ordinateur via la liaison série via USB. Tu écris un programme coté ordinateur (ici un noeud ROS en C++ ou en python) qui écrit et lit sur la liaison série. Coté arduino, tu lis et tu écris sur la même liaison série : de cette manière, tu échange des messages comme tu veux (c'est toi qui définit le format des trames).

Quelques exemples de trames :

- chaine de caractère de commande (terminé par \n) : tu écris en clair ce que tu veux,avec éventuellement des nombres en texte. C'est intuitif, mais pas très optimisé

- envoi d'un nombre fixe d'octets (par exemple 6 octets si tu as 6 positions entre 0 et 255). Pour plus de robustesse, on peut ajouter un octet de début de trame toujours le même (par exemple 42) et/ou une checksum qui permet de vérifier que la commande est valide

- envoit d'un nombre variable d'octets : j'utilise en général le format suivant : octet_de_démarrage; longueur_le_la_trame=N; N octets d'information utile; xor de tous les autres octets


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#9 DJAlexOfficiel

DJAlexOfficiel

    Membre

  • Membres
  • 20 messages

Posté 29 novembre 2022 - 09:19

Pour ce qui est de B, je connais deux options :

1) si tu utilises ROS1, tu peux utiliser rosserial-arduino (cf https://maker.pro/ar...ting-system-ros ) : l'arduino se comporte alors "comme" un noeud ROS (nb : il faut lancer un noeud ros sur l'ordi pour "relier" l'arduino au réseau ROS. A noter que c'est assez lourd coté arduino (ie tu ne pourra pas publier/souscrire à beaucoup de topics différents, ni recevoir/envoyer des messages à haute fréquence). Je ne sais pas si un équivalent existe en ROS2.

 

2) Tu peux utiliser l'approche "classique" pour communiquer entre l'arduino et ton ordinateur via la liaison série via USB. Tu écris un programme coté ordinateur (ici un noeud ROS en C++ ou en python) qui écrit et lit sur la liaison série. Coté arduino, tu lis et tu écris sur la même liaison série : de cette manière, tu échange des messages comme tu veux (c'est toi qui définit le format des trames).

Quelques exemples de trames :

- chaine de caractère de commande (terminé par \n) : tu écris en clair ce que tu veux,avec éventuellement des nombres en texte. C'est intuitif, mais pas très optimisé

- envoi d'un nombre fixe d'octets (par exemple 6 octets si tu as 6 positions entre 0 et 255). Pour plus de robustesse, on peut ajouter un octet de début de trame toujours le même (par exemple 42) et/ou une checksum qui permet de vérifier que la commande est valide

- envoit d'un nombre variable d'octets : j'utilise en général le format suivant : octet_de_démarrage; longueur_le_la_trame=N; N octets d'information utile; xor de tous les autres octets

 

Pour la 2ème solution : dans ton programme cotée ordi le problème faut récupere les information de l'app ros moveit pour les envoyer a ton arduino via le port série.

 

J'aimerai des explante de code pour comprendre ou de l'aide pour le commencement car la niveau code je sais pas par ou commencer 



#10 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 260 messages
  • Gender:Male

Posté 29 novembre 2022 - 10:07

Dans les deux cas, la première étape vas être de regarder quels topics moveit publie et souscrit (ie nom du topic + type de message + signification du message).

 

Ensuite, soit tu souscrits à ces topics via rosserial arduino, soit depuis un topic sur l'ordinateur (dans un noeud ros "mon_driver_arduino").

 

Dans le premier cas (ros-serial), il ne reste plus qu'à traiter les messages et à agir en conséquence (et renvoyé les éventuels feedbacks attendu par moveit)

 

Dans le second cas, je te suggère de commencer à afficher les messages que tu reçois, et à envoyer des messages rempli "au pif" en retour depuis mon_driver_arduino (ie le noeud ros sur l'ordi). Une fois que ça c'est fait, tu transmets ces données à l'arduino. Et enfin, tu traites les messages reçus (et génère les feedbacks) sur l'arduino.

 

 

Pour ce qui est de movit lui même, je ne m'en suis pas encore servi, donc je ne pourrais pas t'aider


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#11 DJAlexOfficiel

DJAlexOfficiel

    Membre

  • Membres
  • 20 messages

Posté 30 novembre 2022 - 12:55

Dans les deux cas, la première étape vas être de regarder quels topics moveit publie et souscrit (ie nom du topic + type de message + signification du message).
 
Ensuite, soit tu souscrits à ces topics via rosserial arduino, soit depuis un topic sur l'ordinateur (dans un noeud ros "mon_driver_arduino").
 
Dans le premier cas (ros-serial), il ne reste plus qu'à traiter les messages et à agir en conséquence (et renvoyé les éventuels feedbacks attendu par moveit)
 
Dans le second cas, je te suggère de commencer à afficher les messages que tu reçois, et à envoyer des messages rempli "au pif" en retour depuis mon_driver_arduino (ie le noeud ros sur l'ordi). Une fois que ça c'est fait, tu transmets ces données à l'arduino. Et enfin, tu traites les messages reçus (et génère les feedbacks) sur l'arduino.
 
 
Pour ce qui est de movit lui même, je ne m'en suis pas encore servi, donc je ne pourrais pas t'aider


Avez vous de la Doc pour coder les 2 partie arduino et pc pour l'envoie de donnée ?

#12 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 260 messages
  • Gender:Male

Posté 30 novembre 2022 - 01:56

J'ai rien sous la main, mais si tu cherches communication raspberry pi arduino sur internet, tu devrais trouver plein de tutos (nb : tu as le choix, soit tu passes par la liaison série via le cable USB (ce que je te conseille), soit tu passes par l'I2C (je te le déconseille, l'arduino a tendence à freezer en slave I2C dès que le protocole n'est pas parfaitement respecté (par exemple à cause de bruit dus à des cables trop longs)


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#13 DJAlexOfficiel

DJAlexOfficiel

    Membre

  • Membres
  • 20 messages

Posté 11 décembre 2022 - 12:26

J'ai rien sous la main, mais si tu cherches communication raspberry pi arduino sur internet, tu devrais trouver plein de tutos (nb : tu as le choix, soit tu passes par la liaison série via le cable USB (ce que je te conseille), soit tu passes par l'I2C (je te le déconseille, l'arduino a tendence à freezer en slave I2C dès que le protocole n'est pas parfaitement respecté (par exemple à cause de bruit dus à des cables trop longs)

 

Je reviens après 1 semaine de recherche et d'essaye. Alors j'ai crée un robot juste pour le visuel et crée un fichier URDF grace a Moveit assistance, une fois cela fais je l'ai lancé dans RVIZ je peu bougé le robot avec chaque joint. Maintenant je suis a la récherche de lié cest joints avec rosserial et un arduino 



#14 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 260 messages
  • Gender:Male

Posté 11 décembre 2022 - 01:34

Bonjour,

est-ce que tu as déjà identifié quel(s) sont les topics correspondants à ces joints, et quel est leur type?

 

Si oui, alors cette info serait utile. Si non, je commencerais par là (refaire ta manip avec Rviz, et faire du ros2 topic list, plus des echo/info pour plus de précision)


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#15 DJAlexOfficiel

DJAlexOfficiel

    Membre

  • Membres
  • 20 messages

Posté 11 décembre 2022 - 02:04

Bonjour,

est-ce que tu as déjà identifié quel(s) sont les topics correspondants à ces joints, et quel est leur type?

 

Si oui, alors cette info serait utile. Si non, je commencerais par là (refaire ta manip avec Rviz, et faire du ros2 topic list, plus des echo/info pour plus de précision)

 

Voici la liste des topic :

 

/attached_collision_object
/collision_object
/execute_trajectory/cancel
/execute_trajectory/feedback
/execute_trajectory/goal
/execute_trajectory/result
/execute_trajectory/status
/joint_states
/move_group/cancel
/move_group/display_contacts
/move_group/display_cost_sources
/move_group/display_grasp_markers
/move_group/display_planned_path
/move_group/fake_controller_joint_states
/move_group/feedback
/move_group/goal
/move_group/monitored_planning_scene
/move_group/motion_plan_request
/move_group/plan_execution/parameter_descriptions
/move_group/plan_execution/parameter_updates
/move_group/planning_pipelines/ompl/ompl/parameter_descriptions
/move_group/planning_pipelines/ompl/ompl/parameter_updates
/move_group/planning_scene_monitor/parameter_descriptions
/move_group/planning_scene_monitor/parameter_updates
/move_group/result
/move_group/sense_for_plan/parameter_descriptions
/move_group/sense_for_plan/parameter_updates
/move_group/status
/move_group/trajectory_execution/parameter_descriptions
/move_group/trajectory_execution/parameter_updates
/pickup/cancel
/pickup/feedback
/pickup/goal
/pickup/result
/pickup/status
/place/cancel
/place/feedback
/place/goal
/place/result
/place/status
/planning_scene
/planning_scene_world
/recognized_object_array
/rosout
/rosout_agg
/rviz_alex_12988_8838006419567977141/motionplanning_planning_scene_monitor/parameter_descriptions
/rviz_alex_12988_8838006419567977141/motionplanning_planning_scene_monitor/parameter_updates
/rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/feedback
/rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/update
/rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/update_full
/sequence_move_group/cancel
/sequence_move_group/feedback
/sequence_move_group/goal
/sequence_move_group/result
/sequence_move_group/status
/tf
/tf_static
/trajectory_execution_event
 
j'ai regarder le topic /joint_states et j'ai la position des joints 

 

Et comment on insere une image ?



#16 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 260 messages
  • Gender:Male

Posté 11 décembre 2022 - 02:40

Pour mettre des images (ou d'autres contenus), tu as les explications ici : https://www.robot-ma...obot-Maker.html

 

Il y a bien plus de topics que je m'y attendais. Donc soit il faut que tu te penches sur la doc pour trouver quels sont les topics pertinents (ie ceux qui disent au moteur quoi faire, et ceux qui donnent les retors de position), soit tu regardes en détail qui publie quoi sur quel topic, et tu essayes de deviner.


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#17 DJAlexOfficiel

DJAlexOfficiel

    Membre

  • Membres
  • 20 messages

Posté 11 décembre 2022 - 03:12

Pour mettre des images (ou d'autres contenus), tu as les explications ici : https://www.robot-ma...obot-Maker.html
 
Il y a bien plus de topics que je m'y attendais. Donc soit il faut que tu te penches sur la doc pour trouver quels sont les topics pertinents (ie ceux qui disent au moteur quoi faire, et ceux qui donnent les retors de position), soit tu regardes en détail qui publie quoi sur quel topic, et tu essayes de deviner.


Je vais regarder cela mais pour la communication Arduino Ros je vais le faire avec le câble USB mais je sais que sur Arduino faut récupérer le topic mais il faut lancer un programme du côté ros ?

#18 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 260 messages
  • Gender:Male

Posté 11 décembre 2022 - 11:20

Oui, il te faut forcément un programme coté ROS pour faire l'interface.

En ROS1, la solution facile était d'utiliser rosserial arduino coté ordi, ce qui permettait de servir d'interface à un pseudo "noeud ROS" tournant sur l'arduino.

Malheureusement, avec de rapides recherches, j'ai l'impression que rosserial a été abandonné au profit de micro-ROS, qui a le gros inconvéniant de nécessiter un micro-controleur moyen de gamme (donc les arduinos classiques type Uno/Nano/Méga ne marcheront pas) : il te faudra soit passer par un micro-controleur plus haut de gamme (il y en a qui sont appellé arduin XXX, mais qui sont bien loin des arduinos originels), soit changer complètement d'approche.

N'hésites pas à faire quelques recherches de ton coté, tu trouvera peut-être des solutions que je n'ai pas vu avec une recherche rapide.

Une solution "bourine" serait d'utiliser ROS bridge pour faire tourner en même temps ROS1 et ROS2, et ainsi pourvoir utiliser rosserial Arduino en ROS1 avec le reste du code en ROS2 : ça devrait marché, mais c'est l'usine à gaz : ce n'est pas l'option que je choisirais personnellement.

 

Sinon, il reste la solution la plus versatile (mais qui demande un petit peu plus de boulot), qui consiste à écrire 2 programmes toi même :

- un programme arduino, qui communique avec l'ordinateur en liaison série (et qui est complètement indépendant de ROS)

- un noeud ROS (coté ordinateur), qui écoute les topics ROS et retransmet les informations pertinentes via la liaison série, et vice versa. Ce programme peut simplement être une passerelle (ie transformer les messages ros en octets envoyés sur la liaison série, et vice versa), ou intégrer en plus d'autres fonctionnalités (par exemple, si l'arduino renvoit les mesures d'un lidar, le noeud ros peut, en plus, publier par exemple la distance de l'obstacle le plus proche.

 

 

Cette dernière approche, si elle demande plus de boulot, à néanmoins quelques avantages :

- elle marchera sans problèmes (tu ne dépends pas de librairies exotiques)

- la partie arduino est complètement indépendante de ROS(2) : si tu veux te passer de ROS (pour utilise d'autres technos, par exemple des sockets), alors il n'y aura que de légères modifications à faire du coté du "noeud ROS"

- tu utilises beaucoup moins de données sur la liaison série : tu peux donc faire circuler beaucoup plus de charge utile (ou réduire la fréquence de la communication pour réduire le risque d'erreurs de communication)

- elle est beaucoup moins gourmande en ressources coté arduino (coté arduino, le fait de simuler un noeud ROS est très lourd, et quelques topics suffisent à utiliser toute la mémoire)


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.


#19 DJAlexOfficiel

DJAlexOfficiel

    Membre

  • Membres
  • 20 messages

Posté 12 décembre 2022 - 11:02

Oui, il te faut forcément un programme coté ROS pour faire l'interface.
En ROS1, la solution facile était d'utiliser rosserial arduino coté ordi, ce qui permettait de servir d'interface à un pseudo "noeud ROS" tournant sur l'arduino.
Malheureusement, avec de rapides recherches, j'ai l'impression que rosserial a été abandonné au profit de micro-ROS, qui a le gros inconvéniant de nécessiter un micro-controleur moyen de gamme (donc les arduinos classiques type Uno/Nano/Méga ne marcheront pas) : il te faudra soit passer par un micro-controleur plus haut de gamme (il y en a qui sont appellé arduin XXX, mais qui sont bien loin des arduinos originels), soit changer complètement d'approche.
N'hésites pas à faire quelques recherches de ton coté, tu trouvera peut-être des solutions que je n'ai pas vu avec une recherche rapide.
Une solution "bourine" serait d'utiliser ROS bridge pour faire tourner en même temps ROS1 et ROS2, et ainsi pourvoir utiliser rosserial Arduino en ROS1 avec le reste du code en ROS2 : ça devrait marché, mais c'est l'usine à gaz : ce n'est pas l'option que je choisirais personnellement.
 
Sinon, il reste la solution la plus versatile (mais qui demande un petit peu plus de boulot), qui consiste à écrire 2 programmes toi même :
- un programme arduino, qui communique avec l'ordinateur en liaison série (et qui est complètement indépendant de ROS)
- un noeud ROS (coté ordinateur), qui écoute les topics ROS et retransmet les informations pertinentes via la liaison série, et vice versa. Ce programme peut simplement être une passerelle (ie transformer les messages ros en octets envoyés sur la liaison série, et vice versa), ou intégrer en plus d'autres fonctionnalités (par exemple, si l'arduino renvoit les mesures d'un lidar, le noeud ros peut, en plus, publier par exemple la distance de l'obstacle le plus proche.
 
 
Cette dernière approche, si elle demande plus de boulot, à néanmoins quelques avantages :
- elle marchera sans problèmes (tu ne dépends pas de librairies exotiques)
- la partie arduino est complètement indépendante de ROS(2) : si tu veux te passer de ROS (pour utilise d'autres technos, par exemple des sockets), alors il n'y aura que de légères modifications à faire du coté du "noeud ROS"
- tu utilises beaucoup moins de données sur la liaison série : tu peux donc faire circuler beaucoup plus de charge utile (ou réduire la fréquence de la communication pour réduire le risque d'erreurs de communication)
- elle est beaucoup moins gourmande en ressources coté arduino (coté arduino, le fait de simuler un noeud ROS est très lourd, et quelques topics suffisent à utiliser toute la mémoire)


Je vais pencher pour la deuxième solution vous me conseiller de coder en quel language côté Ubuntu ?

#20 Sandro

Sandro

    Pilier du forum

  • Modérateur
  • PipPipPipPipPip
  • 1 260 messages
  • Gender:Male

Posté 12 décembre 2022 - 12:11

Je vais pencher pour la deuxième solution vous me conseiller de coder en quel language côté Ubuntu ?

Au choix, python3 ou C++ (les deux principaux langages supportés par ROS2, je ne te conseilles pas d'utiliser les autres langages supportés qu'à moitier par ROS sans une bonne raison).

 

Pour choisir entre python3 ou C++, c'est purement une question de gout :

- si tu maitrise l'un mieux que l'autre, alors choisit celui que tu maitrises le mieux

- C++, c'est en gros ce que tu as déjà sur Arduino (avec quelques fonctionnalités du C++ qui manquent sur Arduino, et quelques fonctions propres à l'arduino (delay, digitalWrite, ...) qui ne sont pas dispo en C++ coté Ubuntu)

- python est un peu plus facile à apprendre si on part de 0

- python est faiblement typé (ie tu ne dois pas déclarer les types explicitements) : ça permet d'écrire le code plus vite, mais augmente le risque d'erreurs

- python nécessite souvent moins de lignes de code pour arriver au même résultat

- C++ est plus performant (mais je penses pas que ton noeud ROS soit l'élément limitant)

- C++ permet un peu plus la manipulation au niveau des octets/bits, ce qui peut être pratique pour la communication série, mais si tu débutes, alors tu risque de ne pas exploiter ces fonctionnalités

- le fait d'utiliser du C++ à la fois coté arduino et coté Ubuntu facilite le fait de faire les mêmes manipulations des deux cotés de la liaison série

- les bibliothèques de liaison série sont probablement un peu plus simple en python

 

Donc pas d'avis tranché sur la question. Prends le language que tu maitrises le mieux et/ou qui t'intéresse le plus.
 


Aidez-nous à vous aider : partagez toutes les informations pertinentes : description précise du problème, contexte, schéma de câblage, liens vers la documentation des composants, votre code (ou encore mieux un code minimal reproduisant le bug), ...

Vous recevrez ainsi plus de réponses, et elles seront plus pertinentes.






Aussi étiqueté avec au moins un de ces mots-clés : ROS, MOVEIT, Arduino, Motor, stepper

0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users