Repository navigation
Essai T1 du 5 novembre : couples mesurés, contact et serrage en géométrie, alerte d'arrêt prolongé - #28
Merged
Conversation
Essai GPU T1 du 5 novembre 2026 : juge (vérité simulation) à 10 « contacts manqués » sur 10 mains, alors que l'OS les avait estimés : chaque prise était passée au serrage après le « recalage au toucher », ce qui exige les deux contacts confirmés. L'app réinitialise la prise dans le pas même de son échec (reinitialiser() remet contacts_estimes à zéro) ; le juge, lu après l'app dans la boucle du banc, ne voyait plus rien. - JugeContacts.pas(t, fermeture, estimes) garde chaque contact estimé dès qu'il paraît ; fin() le préfère à ce qu'elle reçoit. Sans `estimes`, comportement inchangé. - Banc T1 : la boucle passe manip.contacts_estimes à chaque pas. - test_banc_t1_verite.py §4 : estimations effacées avant la fin de la prise : « vrai contact » sur les deux mains (avant : « CONTACT MANQUÉ »). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Kd65oQX59GQ8FeKBTHrWbn
…rage Essai GPU T1 du 5 novembre 2026 : 5 prises, 0 triée, toutes « serrage insuffisant (-2.9 à -3.4 N à la main au plus serré, 5 au moins) », alors que le juge mesurait 6 à 9.5 N par main. Pourquoi la force ne suivait pas : les couples lus n'étaient que le bruit du banc. Sur les 1108 lignes du CSV, chaque articulation lit une constante de quelques dixièmes de N·m plus 0.3 N·m d'écart type (les erreurs d'estimation ajoutées par le banc), corrélation avec la force réelle sous 0.08 ; attendus (pesanteur + Jᵀ·F du juge, posture reconstruite) : -4.2 à -5.0 N·m au tangage d'épaule, ±1.3 au roulis, -2.2 au coude ; lus : -0.5 à +0.8. À la calibration, les « biais » valaient l'opposé de la pesanteur du modèle (+3.75 pour -3.5 au tangage) et le « résidu » sa variation entre postures (0.81). Le banc lit get_applied_joint_efforts() : les efforts imposés, nuls pour des articulations commandées en position, pas le couple des moteurs. - CalibrationCouples.fiabilite : pente des couples moyens contre la pesanteur, posture par posture, aux articulations où elle varie d'au moins 1 N·m ; fiables entre 0.5 et 1.5. Au journal, à la fin de la calibration ; ManipulationService.couples_fiables (None : pas jugé, comportement inchangé). - Couples non fiables : la force à la main ne décide plus de rien, elle reste au diagnostic. Contact : géométrie et retard du roulis (ni couple ni force ; signal_contact, partagé avec le rejeu). Filet d'appui avant de fermer : la géométrie seule. Serrage : la face commandée va jusqu'à sa borne, et chaque main doit y rester retenue par l'objet (retard d'au moins 1 cm, ~5 N aux gains raidis du banc T1 ; à moins de 1.5 cm de la face touchée ; main immobile à 3 mm près pendant le maintien ; main_retenue). Confirmation au levage : le contrôle de levée, et les mains toujours retenues. Plafonds de couple : inchangés. - Inchangés : « rien entre les mains », levée, inclinaison, seuils de la géométrie, JointSafetyGuard, GardienProximite, VLAService. - test_rejeu_prise_t1.py : les lignes réelles (test/donnees, CSV réduit) rejouées dans signal_contact et main_retenue : contact en géométrie sur les 10 mains avant le serrage ; force estimée et couple du roulis sans lien avec la force réelle ; serrage jugé en géométrie : 10 mains retenues (1.8 à 2.0 cm, main immobile à 1 mm près), toutes refusées sur la force. - test_prise_couples_non_fiables.py (horloge simulée) : couples du banc Isaac sur le robot simulé : verdict NON FIABLES, prise tenue en géométrie (sur main : « serrage insuffisant (-4.0 N) ») ; rien entre les mains : refusé ; couples justes : fiables, rien ne change. - test_calibration_couples.py §2 : le journal compte la ligne du verdict (14 lignes au lieu de 13), qui doit dire « fiables ». Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Kd65oQX59GQ8FeKBTHrWbn
Essai GPU T1 du 5 novembre 2026 : un carton poussé de 5 cm hors de la table arrête le robot 15 à 19 s, quatre fois (« obstacle inexpliqué à 0.50 m — ARRÊT »). Le gardien a raison d'arrêter, on n'y touche pas. Mais l'arrêt allait par à-coups et chaque reprise remettait à zéro le compte de l'alerte des 60 s : l'app attendait en silence. - TriColis : après ConfigTri.alerte_meme_cause_s (20 s) d'arrêt pour la même cause (même point à rayon_ignore_m près, reprises de moins de reprise_breve_s comprises), une alerte, une seule, avec la cause. L'alerte des 60 s reste. Un robot qui ne dit pas la cause (cause_arret facultatif) : rien ne change. - FacadeServices.cause_arret : raison et point du gardien, de combien le point dépasse le bord de quelle table chargée de la carte (au plus la profondeur d'un carton), carton suivi le plus proche. Rien que ce que l'OS perçoit. - CHANGELOG : les trois remèdes de cet essai. Test : test_arret_meme_cause.py (échoue sur main : pas de cause, pas d'alerte). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Kd65oQX59GQ8FeKBTHrWbn
Essai GPU T1 du 5 novembre 2026 : le pont, le backend et le banc lisaient get_applied_joint_efforts, les efforts passés à set_joint_efforts, nuls quand les articulations sont commandées en position. La prise ne recevait que le bruit d'estimation du banc, et les couples vérifiés contre les limites de l'URDF (garde-fou, campagne S1.2, plafonds de la prise) valaient zéro : ces vérifications n'ont rien prouvé dans Isaac. - bruit_couples.source_couples : get_measured_joint_efforts (force de l'articulation projetée sur son axe) s'il rend une valeur finie par articulation, l'articulation initialisée ; sinon les efforts imposés, avec la raison, et l'annonce d'un verdict NON FIABLES. - IsaacSimBridge.couples() : cette source plus BruitCouples ; read_feedback (JointSafetyGuard) et read_all_raw (pompe) la lisent. Source dite au setup. Backend Isaac : même source. - Banc T1 : la prise lit bridge.couples() ; le journal dit la source au démarrage. Opérateur simulé : le premier carton dérangé de l'essai attend 40 s (les autres 20 s), pour voir l'alerte « même cause ». - Calibration des couples : pente près de -1, le journal suggère un signe inversé (diagnostic seulement). - Docs : campagne de validation (S1.2 à refaire), démo T1, CHANGELOG. JointSafetyGuard, GardienProximite, VLAService et les contrôles de prise ne changent pas. Tests : test_source_couples_isaac.py (nouveau), test_prise_couples_non_fiables.py §5 à §8 (effort mesuré : fiables, la force décide ; imposés, nuls ou bruit : NON FIABLES, la géométrie décide), test_banc_t1_verite.py §8 (même intention, plus strict). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Kd65oQX59GQ8FeKBTHrWbn
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Essai GPU T1 du 5 novembre 2026 (12 h 50) : 5 prises, 0 triée
Constat : toutes les prises « prise non confirmée » (« serrage insuffisant, -2.9 à -3.4 N à la main au plus serré, 5 au moins »). Le juge du banc compte 10 « contacts manqués », alors que les mains serraient vraiment le carton, à 6 à 9,5 N.
1. Contact : l'OS l'avait vu, le juge le perdait
test/donnees/t1_prise_20261105_1250.csv, réduit aux colonnes utiles), rejouées dans la logique de décision (signal_contact), donnent un contact en géométrie sur les 10 mains, avant le passage au serrage.JugeContacts.pas(estimes=…)).2. Force par les couples : le banc ne lisait pas les couples
get_applied_joint_efforts, c'est-à-dire les efforts passés àset_joint_efforts. Ils sont nuls quand les articulations sont commandées en position. L'OS ne recevait donc que le bruit d'estimation ajouté par le banc.get_measured_joint_efforts, la force de l'articulation projetée sur son axe), plus les erreurs d'estimation deBruitCouples. La source est choisie à l'initialisation parbruit_couples.source_couples, et le journal la dit au démarrage :couples lus : effort MESURÉ par la physique (get_measured_joint_efforts);IsaacSimBridge.read_feedback(lu par JointSafetyGuard),read_all_raw(pompe du mode sandbox), le backend Isaac et la prise du banc T1.CalibrationCouples.fiabilite, pente comprise entre 0,5 et 1,5). S'ils ne la suivent pas (verdict « NON FIABLES », écrit au journal), la force estimée ne décide plus ni du contact, ni du serrage, ni de la confirmation au levage. Elle reste au diagnostic, et les plafonds de couple restent jugés sur le couple. Sur un robot aux couples justes, rien ne change. Si la pente est proche de −1, le journal suggère un signe inversé (diagnostic seulement).3. Serrage et confirmation en géométrie (couples non fiables)
4. Arrêt de sécurité prolongé pour la même cause
FacadeServices.cause_arret). Exemple :Tout ce qui vérifiait les couples contre les limites de l'URDF dans Isaac Sim lisait
get_applied_joint_efforts, donc des efforts imposés nuls en commande de position (le cas de tous les essais) :effortde l'URDF ») ;IsaacSimBridge.read_feedback;Ces vérifications lisaient zéro, plus le bruit d'estimation. Elles n'ont rien prouvé dans Isaac Sim, et sont à refaire avec l'effort mesuré.
docs/campagne_validation_isaac.mdle dit maintenant.À vérifier au prochain essai GPU
couples lus : effort MESURÉ. Je n'ai pas pu lire la documentation ni le code de l'API d'Isaac Sim 6.1 depuis cette session (accès réseau refusé). Le code s'appuie sur la page Articulation Joint Sensors de la documentation NVIDIA (get_measured_joint_efforts), et vérifie à l'initialisation que la méthode existe et rend une valeur finie par articulation. Sinon, il retombe sur les efforts imposés et le dit.Ce qui ne change pas
JointSafetyGuard, GardienProximite, VLAService, le critère « rien entre les mains », les contrôles de levée et d'inclinaison. Le gardien arrête toujours devant un obstacle inexpliqué. Le serrage n'est pas plus fort qu'avant (même limite, même pas).
Tests
test_rejeu_prise_t1.py: lignes réelles du CSV rejouées ;test_prise_couples_non_fiables.py: effort mesuré → couples fiables, la force décide ; efforts imposés, nuls ou bruit → NON FIABLES, la géométrie décide ; signe inversé ; vide refusé ;test_source_couples_isaac.py: choix de la source, pont, backend, banc ;test_arret_meme_cause.py.test_calibration_couples.py§2 : le journal de calibration a une ligne de plus (le verdict). Le test compte 14 lignes au lieu de 13, et exige en plus que ce verdict dise « fiables ».test_banc_t1_verite.py§8 : le test vérifiait le texte du bancbridge.bruit_couples(robot.get_applied_joint_efforts()). Il vérifie maintenantbridge.couples(), et l'absence deget_applied_joint_effortsdans le banc. Il vérifie aussi l'opérateur à 40 s pour un seul carton.Generated by Claude Code