Aller au contenu


Photo
- - - - -

Naissance de mon robot autonome IA


34 réponses à ce sujet

#21 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 208 messages
  • Gender:Male

Posté 19 septembre 2026 - 10:25

N'hésite pas à mettre les liens des tutoriels ou des articles que tu suis ou ceux dont tu t'inspires ;)

Tu as raison:

 

j'utilise 2 API Python

 

Picamera2 C’est l’API officielle qui permet à Python de commander la caméra Raspberry Pi IMX500

Flask : Flask fournit l’API web

 

j'utilise flask parce que j'ai lu que c'était plus performant que le serveur intégré mais en fait je n'en sais rien. Ca marche c'est le principal

 

Présentation fonctionnement caméra: https://www.raspberr...a_software.html

Apprendre à configurer un serveur: https://randomnerdtu...erver-picamera2

Utilisation de Flask : https://www.youtube....h?v=NOAY1aaVPAw

 

Et j'ai utilisé Chat GPT pour les trous dans la raquette et pour la cohérence globale. C'est nickel.



#22 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 208 messages
  • Gender:Male

Posté 21 septembre 2026 - 04:24

Voilà une petite vidéo (je voulais tester la diffusion en mp4), qui valide le serveur Web du Pi , la diffusion en streaming de l'image de caméra et le déplacement parfaitement rectiligne du robot !

 

Sur le dessus un nouveau voyant vert qui indique l'état du Pi, j'ai mis en place une procédure de sécurité pour l'éteindre proprement avec le petit bouton rouge rajouté lui aussi.

 

Un début de menu déroulant est créé sur l'oled pour le choix de la puissance.

 

Tout va bien , je poursuis pas-à-pas avec... la marche arrière  :ouioui:

 

Il y a un bruit étrange dans la vidéo que je ne perçois pas en live !!! j'ai l'impression que c'est une roue qui frotte un peu !

 

 

20260921_165439.mp4   23,86 Mo



#23 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 208 messages
  • Gender:Male

Posté 24 septembre 2026 - 09:52

Bon j'ai craqué, j'ai refait complètement mon robot pour rendre accessible l'intégralité de ses composants. j'avais fait une grosse erreur de séparer physiquement l'étage du bas avec la puissance et l'étage au-dessus avec le Pi5 et le Pico. Résultat, impossible d'intervenir sur l'étage du bas pour changer un composant, mesurer une tension ou rajouter un élément.

Je ne comprends pas comment j'ai pu faire cette erreur alors que je suis rompu à l'optimisation avec des mini sumos beaucoup plus compacts. ca fait longtemps que j'ai adopté le carter unique qui recouvre la totalité du robot.

 

Donc là même principe. Le Pi et le Pico sont bien au 2ème niveau mais à l'intérieur d'un seul carter, comme on le voit sur la photo. C'est très encombré mais tout est accessible, y compris le changement de moteur qui n'était pas possible auparavant. j'en ai profité pour rajouter une liaison à la batterie de l'INA 226 pour mesurer la tension et un petit voltmètre numérique pour l'afficher.  Le Lidar et le Pan/Tilt qui restent solidaires du carter ont des connecteurs rapides type JST.

C'est un sacré job de tout refaire et surtout à partir d'un robot qui fonctionnait parfaitement, mais sur le long terme c'était nécessaire. Erreur de débutant à ne pas reproduire !

 

20260924_224341.jpg



#24 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 12 512 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 24 septembre 2026 - 10:02

Personnellement j'aurais gardé la raspberry pi sur le haut et la pico en bas...  

Avec une séparation qui fait uniquement la connectivité série entre l'arduino et la pi, et l'alimentation et rien d'autre, 
Le haut et le bas pouvant être testé séparément ( Algo lidar , caméra etc ... ) sur le pi avec la brique du haut. 
Déplacement encodeur etc ... Sur la brique du bas. 
 


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  

 

 

 


#25 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 208 messages
  • Gender:Male

Posté 26 septembre 2026 - 08:40

Personnellement j'aurais gardé la raspberry pi sur le haut et la pico en bas...  

Avec une séparation qui fait uniquement la connectivité série entre l'arduino et la pi, et l'alimentation et rien d'autre, 
Le haut et le bas pouvant être testé séparément ( Algo lidar , caméra etc ... ) sur le pi avec la brique du haut. 
Déplacement encodeur etc ... Sur la brique du bas. 
 

Tu as raison mais il aurait fallu que je l'anticipe dès le départ. Là je n'ai plus de place au niveau 0 pour mettre le Pico ce qui aurait été optimal pour longueurs de câblage.. Mais il faut relativiser, en enlevant la séparation physique entre les deux étages, le pico n'est qu'à 30mm au-dessus ce qui limite tout de même les longueurs. Là je suis avec un robot totalement accessible ce qui est plus confortable en prévision de problèmes ou d'extensions ultérieures.



#26 Mike118

Mike118

    Staff Robot Maker

  • Administrateur
  • PipPipPipPipPip
  • 12 512 messages
  • Gender:Male
  • Location:Anglet
  • Interests:Robotique, Entrepreneuriat, Innovation, Programmation, Résolution de problème, Recherche de solutions, Mécanique, Electronique, Créer, Concevoir

Posté 26 septembre 2026 - 11:37

En zoomant sur ta photo je viens de voir que tu utilises une véroboard dans ton robot non ?
Peut être que l'outil veroboard maker est un outil qui pourrait t'être utile à l'avenir =)
Il y a pas mal de composants que tu peux directement monter sur des veroboards plutôt que de tout avoir avec des borniers :) 
En plus de faire moins de fils ça prend moins de place :) 
En tout cas bravo pour ton robot :)


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  

 

 

 


#27 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 208 messages
  • Gender:Male

Posté 27 septembre 2026 - 02:29

En zoomant sur ta photo je viens de voir que tu utilises une véroboard dans ton robot non ?
Peut être que l'outil veroboard maker est un outil qui pourrait t'être utile à l'avenir =)
Il y a pas mal de composants que tu peux directement monter sur des veroboards plutôt que de tout avoir avec des borniers :) 
En plus de faire moins de fils ça prend moins de place :) 
En tout cas bravo pour ton robot :)

Bah je savais pas que ça s'appelait une Véroboard, mais effectivement. Je vais voir cet outil pour la prochaine fois s'il peut m'aider.

Parmi tous mes essais de connection, je suis passé par plein de choses différentes dans mon apprentissage, mais j'aime bien les borniers. Effectivement pour ce robot j'ai encadré le pico de borniers et déporté des borniers libres GND et +3.3V sur le côté.

 

J'ai 6 semaines d'avance sur mon planning !!!  j'ai passé beaucoup plus de temps prévu et de toutes façons j'ai été pessimiste dans mon apprentissage. J'ai franchi les 4 premières étapes: La construction et le câblage, la programmation des affichages et des sécurités, les essais de locomotion et d'odométrie, la liaison Pi5 / Pico /Caméra.

Prochaine étape, totalement inconnue, le LIDAR et son utilisation pour éviter les obstacles.

 

Je viens de voir qu'il n'y pas de SDK python pour le lidar  :nonnon:

Je vais voir avec une IA pour développer pas à pas une library python, j'espère que c'est possible. 



#28 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 208 messages
  • Gender:Male

Posté 29 septembre 2026 - 09:32

Je viens de passer du temps sur le lidar C1 qui me faisait un peu peur. C'est @Mike118 qui me l'a conseillé , ce n'était pas prévu dans mon projet et je ne le regrette pas !

 

En fait c'est relativement facile à mettre en oeuvre et le principe est très simple, tout du moins dans l'utilisation que je veux en faire, c'est à dire détecter et éviter les obstacles sur 360° :

 

Il est connecté au Pi5 en UART à une vitesse de 460800 bauds. Il produit environ 5000 mesures par seconde sur 10 tours. Ces mesures sont codées sur 5 octets. Il a fallu que je me remémore les conversions hexadécimale/binaire/décimale mais ça va.

 

Début du tour et qualité mesure : octet 0  - Angle octets 1 et 2 - distance octets 3 et 4.

 

Etant donnée la vitesse on a une vue sur 360° tous les 100 ms ce qui compte tenu de la vitesse du robot est largement suffisant. L'idée est de faire le traitement dans le Pi5 et de transmettre au pico des informations de synthèse simple; En l'occurrence une information sur la présence et la distance d'un obstacle dans 4 zones, calculées à partir des minimums de distance dans chaque zone.

 

Tout cela est très simple. Ce qui l'est un peu moins pour moi c'est de gérer les erreurs éventuelles dans une des mesures qui peut tout décaler, et de gérer les transmissions au pico, mais ça chat GPT sait le faire, c'est du basique pour un connaisseur. La réception est codée pour accumuler les octets dans un tampon jusqu'à un caractère de fin de ligne. Cette correction évite qu'un message LIDAR soit découpé en deux lectures. Il faut aussi éviter que les différentes infos qui passe par l'UART (Lidar, mais aussi sécurité PI, caméra..) ne se mélangent. Il faut donc les mettre en attente dans un tampon que le Pico consulte quand il en a besoin. Tout cela est nouveau pour moi mais pas très compliqué.

 

Je suis étonné par la précision et la régularité de ce Lidar C1, c'est tout à fait génial. Je pense que mon robot pourra circuler de façon autonome très rapidement. Evidemment je ne parle pas de cartographier la zone de déplacement (pas encore  :ouioui: ). Les essais robot à l'arrêt semblent nickel.

 

La logique de déplacement simple que j'ai retenue est "Devant libre > avancer - Obstacle devant et un côté libre > tourner du côté libre - Avant et côtés bloqués > reculer  - 4 zones boquées > s'arrêter. Il faudra que je règle les angles des différentes zones pour passer un peu de partout.

 

En résumé: le pi démarre le balayage, décode les les points, recalcule 4 distances pour chaque zone et les transmet au pico qui gère les déplacements. Du coup ma bibliothèque python pour lidar C1 est prête et mon avance sur mon planning s'accentue, je passe deux fois plus de temps que prévu et c'est pour l'instant deux fois plus facile que prévu... :awesome:

 

Avant de programmer le pico, je dois gérer les obstacles que le lidar ne voit pas (trop bas) et que le parechoc ne voit pas non plus. Je vais utiliser le patinage des roues et la mesure du lidar qui ne bougera pas alors que les roues tournent. 



#29 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 208 messages
  • Gender:Male

Posté 02 octobre 2026 - 01:58

Voici les premiers pas autonomes de mon robot autonome. Il gère les obstacles avec le lidar, son pare-choc et le patinage des roues. C'est très encourageant, il est plus efficace que mon robot aspirateur que je retrouve coincé dans cette forêt de pieds de chaises.

 

Plus de précisions plus tard. A noter que j'ai rajouté une option dans le menu: vidéo en live ou vidéo enregistrée...

 

Je l'ai laissé 1h en liberté, sans problème, la sécurité batterie l'a arrêté correctement.

 

 

J'ai donné aussi un nom à mon robot : ORBA.

 

Aujourd'hui avant d'attaquer la caméra IA, Orba sait actuellement :

  • être commandé manuellement
  • se déplacer avec précision
  • naviguer continuellement de façon autonome 
  • éviter les obstacles 
  • réagir au pare-chocs 
  • détecter le patinage 
  • reculer et effectuer un demi-tour 
  • se dégager seul de situations complexes 
  • allumer ses phares dans l’obscurité 
  • surveiller sa batterie et sa consommation 
  • afficher son état 
  • arrêter proprement le Raspberry Pi 
  • transmettre une image en direct 
  • enregistrer son trajet 
  • diffuser des messages audio


#30 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 208 messages
  • Gender:Male

Posté 03 octobre 2026 - 02:15

Par rapport à mon planning initial je laisse tomber la cartographie (inutile pour l'instant) et j'attaque la reconnaissance d'image avec la caméra Pi2 Sony IMX500.

Je suis largement en avance sur ce planning, il faut dire que le premier mois j'ai passé près de 6h par jour ! mais ça me va bien, je n'aime pas les longs projets qui trainent.

 

J'ai jeté un coup d'oeil à certains  modèles fournis officiellement par Raspberry. Ceux que j'ai regardés donnent en général une très bonne performance pour la reconnaissance des êtres humains mais très moyenne pour les objets. Je vais partir sur YOLO 11n, qui semble connu et commun, même si il me déclare un ballon jaune avec des hexagones noirs comme un baseball glove..

 

Mon objectif est de trouver la souris de la photo (une ancienne réalisation) d'abord positionnée fixe, puis mobile (elle circule de façon autonome) pour la coincer. Pour cela je devrai apprendre cette souris de façon détaillée.

 

Mon idée derrière est que peut-être je développerai plus tard un quadrupède intelligent... une sorte de Jagbot avec un gros QI !

 

 

souris_0002.jpg

 

L'idée est de prendre des photos à l'aide de la caméra directement du robot pour garder son angle de vue et sa mise au point.



#31 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 208 messages
  • Gender:Male

Posté 04 octobre 2026 - 03:50

Première étape fastidieuse, prendre une centaine de photos de la souris sous tous les angles, toutes les distances , tous les environnements. Probablement que cet essai ne sera pas le meilleur et qu'il faudra optimiser cet apprentissage. Je prends aussi des photos de l'environnement sans souris. Dans tous les cas les photos sont prises avec la caméra du robot pour avoir le même point de vue.

 

Ensuite il faut annoter chaque photo, c'est à dire indiquer graphiquement sur chaque photo la position de la souris. Je fais cela dans Roboflow version gratuite, le traitement de 125 photos passe dans cette version free à priori.

 

Mes premières photos sont ratées, seules 46 ont été annotées , et l'annotation manuelle montre que mes photos sont beaucoup trop éloignées; Au-delà de 2m il semble que la reconnaissance soit difficile.

 

Je me relance dans la prise des photos...

 

Et je recommence la démarche dans Roboflow mais sans utiliser son IA, en faisant les annotations manuelles des 125 photos...

 

Mais avec Roboflow je suis arrivé à une impasse à la fin sur la version gratuite...

 

J'essaie alors ultralytics... avec le même jeu des dernières photos...

 

L'explication du principe est clair ici: https://docs.ultralytics.com/guides/data-collection-and-annotation



#32 Coyotte

Coyotte

    Nouveau membre

  • Membres
  • 25 messages
  • Gender:Male
  • Location:Liège
  • Interests:Informatique, musique, électronique, lecture, cuisine, robotique, modélisme...

Posté 05 octobre 2026 - 11:26

Bonjour,
Je viens de lire tout le sujet... Mâtin, quel talent !

Comme l'on dit sur d'autres forums : Je prends une chaise, quelques cacahuètes et je m'installe confortablement pour suivre la suite  :-)


Coyotte


... the alien anthropologists admitted they were still perplexed.
But on eliminating every other reason for our sad demise, they logged the only explanation left :
This species has amused itself to death...
                                                                                                                                    (R. Waters)


#33 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 208 messages
  • Gender:Male

Posté 05 octobre 2026 - 12:43

Bonjour,
Je viens de lire tout le sujet... Mâtin, quel talent !

Comme l'on dit sur d'autres forums : Je prends une chaise, quelques cacahuètes et je m'installe confortablement pour suivre la suite  :-)


Coyotte

Merci c'est sympa, mais le talent je sais pas, j'apprends , je teste, je bosse... et j'avance.

 

Là je suis un peu dans le dur. Faire l'apprentissage d'une image pour être reconnaissable par la suite, demande de l'expérience. Il faut que les images soient suffisamment significatives mais aussi différentes, dans tous les environnements, les conditions d'éclairage... Laà j'en suis à ma 3ème série de photos que je traite sur Ultralytics en entourant à chaque fois l'objet à reconnaître. il faut aussi prendre des photos de l'environnement vide.

 

Ultralytics semble être la bonne plateforme. J'ai tout fait manuellement pour une meilleure efficacité et une bonne compréhension mais il y a des IA sur tous ces sites apparemment. Cette plateforme est payante mais des crédits alloués à l'inscription suffisent à faire le job.

 

Mes images sont traitées mais il y a une bizarrerie , c'est que si je teste mes images, la souris n'est reconnue qu'avec un niveau de confiance de 0.01, ce qui est très bas. Plus le seuil est bas plus la probabilité de détecter est forte, mais plus la probabilité de faux positif est forte aussi, ce que n'est pas le cas dans le test sur mes images sans souris. Bizarre, à voir.

 

Quand je teste, ça donne ça:

 

image ecarn ultralytics.jpg

 

Les étapes sont celles-ci:

 

1 Collecter environ 100 à 150 photos.

2 Dessiner un rectangle autour de la souris sur chaque photo.

3 Entraîner YOLO11n avec la classe souris.

4 Tester le modèle sur des photos qu’il n’a jamais vues.

5 Convertir le résultat pour l’IMX500.

6 Installer le nouveau modèle sur Orba.

 

Je vais valider la 4 malgré ce taux de confiance et aller à l'étape 5, qui semble être très technique et complexe. Si c'est le cas l'IA fera le job, aucun intérêt pour moi de perdre du temps sur une conversion.

 

En fait cette plateforme Ultralytics est top , la conversion vers ma caméra est prévue avec le modèle YOLO-11n

 

ecran export.jpg

 

ecran2.jpg

 

 

 

 

Edit: après essai ce problème de taux confiance vient de la taille d'image entraînée vs la taille réelle. En corrigeant on obtient des valeurs de photos avec souris de 10% à 80% mais surtout zéro faux positif même à taux de confiance de 5% ! ca veut dire pour l'instant que ma détection devrait être très fiable; Ce taux de confiance sera un paramètre à régler dans le programme sur le Pi5.



#34 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 208 messages
  • Gender:Male

Posté 07 octobre 2026 - 06:36

J’étais resté sur une note optimiste… sans envisager la galère qui m’attendait !

 

Sur la plateforme Ultralytics , l’apprentissage se passe très bien. Je suis même monté à 300 photos de ma souris dans toutes les conditions de position, distance et éclairage pour obtenir un modèle très performant dépassant souvent les 80% de fiabilité.

 

Le gros problème a été l’exportation vers la camera IA , ce qui ne fonctionne pas malgré l’option disponible dans Ultralytics !

 

Après de nombreuses tentatives j’ai laissé la main à chat GPT, qui pendant près de deux jours a pondu des centaines de lignes de code, a fait des tentatives dans tous les sens, pour finalement échouer aussi.

 

Mes recherches sur le web montre qu’effectivement il y a un gros bug. En résumé ma caméra IA est tout à fait adaptée si on utilise les modèles intégrés comme les personnes, chat, chien, oiseau, cheval, voiture, camion, bus, vélo, moto, bouteille, tasse, verre, fourchette, couteau, cuillère, chaise, canapé, lit, table, télévision, ordinateur portable, téléphone portable, clavier, souris d'ordinateur, livre, horloge, sac à dos, etc. Elle est en particulier très performante pour les gestes humains.

 

Mais pas pour un modèle spécifique !!!

 

Je me suis donc rabattu sur un autre moteur, Openvino, permettant d’exporter mon modèle entrainé directement sur le Pi5.

 

Et là c’est simple et ça marche nickel, mais c’est le Pi5 qui travaille, la caméra prend juste des images standard. Une caméra 3 fois moins chère aurait suffit et du coup le CPU de la Pi5 va être sollicité, à voir !

 

Je continue, mais en résumé il ne faut pas acheter cette caméra pour faire du spécifique. La caméra Huskylens qui a aussi une IA embarquée aurait été plus performante, puisque le mode apprentissage fonctionne en local, mais avec une définition beaucoup moins élevée.

 

En résumé j’ai donc :

 

  • Pris les photos de l'objet à reconnaître : angles, distances, éclairages et arrière-plans différents.
  • Importé les photos dans Ultralytics Platform et dessiné les rectangles autour de la souris à reconnaître
  • Entraîné YOLO11n dans Ultralytics,  300 images en  960 × 960.
  • Vérifié les performances du modèle obtenu dans Ultralytics et conservé le meilleur modèle.
  • Exporté depuis Ultralytics via OpenVINO
  • Téléchargé le modèle OpenVINO puis copié son dossier sur le Raspberry Pi 5.
  • Installé sur le PI5 OpenVINO dans un environnement Python ayant accès à la caméra IA.

Et par conséquent la caméra capture simplement les images. Elle ne réalise ici aucun traitement IA. OpenVINO exécute YOLO11n sur le CPU du Raspberry Pi 5.

 

Le programme d'Orba, mon robot,  récupère finalement quelque chose de très simple : souris détectée ou non + niveau de confiance + position dans l'image.

 

Mon premier objectif reste la détection de la souris fixe par Orba.

 

Mais je rajoute un objectif ultérieur, détecter la souris en mouvement, la suivre et la capturer !  Cela suppose aussi que je vais devoir installer un dispositif de capture sur Orba.



#35 pmdd

pmdd

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 1 208 messages
  • Gender:Male

Posté hier, 17:03

C'est quand même très très compliqué...

 

* En voulant apprendre un objet hors objets de la camera IA, j'ai énormément compliqué les choses

* En voulant non seulement reconnaitre l'objet , mais aussi filmer sur mon smartphone en live et enregistrer en MP4, c'est carrément la galère pour faire les trois opérations conjointement par la même caméra.

* Puis en voulant visualiser la position du rectangle de reconnaissance de la souris sur la vidéo en live sur mon smartphone !!!

 

Le résultat est top. Pour l'instant je n'ai pas développé la fonction recherche, mais la reconnaissance et toutes les options vidéo fonctionnent, heureusement grâce à l'aide de Chat GPT. Impossible de faire autrement et malgré cela ça été un gros boulot fastidieux.

 

Si j'étais parti sur une caméra Huskylens, tout le travail était fait: la possibilité d'apprentissage d'un objet spécifique, l'écran vidéo en live avec les rectangles de reconnaissance ! Le projet était largement abordable. En fait c'est comme s'il avait fallu développer une library spécifique ce qui n'est ni de ma compétence, ni dans mes centres d'intérêt.

 

Maintenant, ça sera plus intéressant, développer un algorithme de recherche et de capture de la souris.

 

Voici pour l'instant ce que je visualise sur mon téléphone, envoyé en live par le robot:

 

 

detect_souris.mp4   8,98 Mo





Répondre à ce sujet



  


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

0 members, 1 guests, 0 anonymous users