Physical Artificial Intelligence newsPAI news
← Retour aux actualités
22 Août 2026Niveau : Essentiel

Le lidar HM-LD1 s’ouvre à ROS 1 et ROS 2 : un pilote unifié pour accélérer l’intégration robotique

📑 Sommaire
💡 En 3 points clés
  • Série (UART) : idéal pour les microcontrôleurs ou les systèmes embarqués légers.
  • UDP : pour une intégration réseau, avec une configuration automatique de l’interface (nécessite des droits `CAP_NET_RAW` sous Linux).
  • UVC : pour une utilisation comme périphérique vidéo standard (compatible avec les outils de vision par ordinateur comme OpenCV).

Un capteur dToF conçu pour les environnements exigeants

Le HM-LD1 est un lidar dToF (direct Time-of-Flight) conçu pour résister aux conditions extrêmes, notamment en extérieur sous un éclairement intense (jusqu’à 80 klux). Contrairement à de nombreux capteurs optiques, il maintient une portée stable de 8 mètres même dans ces conditions, et jusqu’à 25 mètres en intérieur. Son architecture repose sur une puce SSL (Single Shot LiDAR) qui permet de mesurer la distance en une seule impulsion, réduisant ainsi la latence et la consommation énergétique.

Ce module se distingue aussi par sa flexibilité : il supporte trois modes de transport pour transmettre ses données :

  • Série (UART) : idéal pour les microcontrôleurs ou les systèmes embarqués légers.
  • UDP : pour une intégration réseau, avec une configuration automatique de l’interface (nécessite des droits `CAP_NET_RAW` sous Linux).
  • UVC : pour une utilisation comme périphérique vidéo standard (compatible avec les outils de vision par ordinateur comme OpenCV).
  • Un pilote ROS unifié : ROS 1 Noetic et ROS 2 Humble/Lyrical

    Le cœur de l’innovation réside dans le pilote open source développé par myrobotproject, qui unifie la gestion du HM-LD1 sous ROS 1 (Noetic) et ROS 2 (Humble/Lyrical). Ce pilote permet de publier directement dans l’écosystème ROS :

  • Images de profondeur (format `uint16_t`, en millimètres).
  • Nuages de points 3D, calculés à partir des données de profondeur et de l’étalonnage intégré.
  • Diagnostics (état du capteur, température, tension d’alimentation).
  • Métadonnées (numéro de séquence, horodatage, profil UVC actif).
  • Points clés du pilote :

  • Compatibilité multi-ROS : Un seul code source pour ROS 1 et ROS 2, avec des paquets précompilés pour x86_64 et aarch64 (Raspberry Pi, Jetson Nano, etc.).
  • Gestion automatique des transports : Le pilote détecte le mode de transport utilisé (Série, UDP ou UVC) et configure le capteur en conséquence.
  • Ét alonnage intégré : Les paramètres intrinsèques du capteur (focale, distorsion) sont fournis via le message ROS `CameraInfo`, évitant une calibration manuelle fastidieuse.
  • Reconstruction intelligente : Si le capteur ne fournit qu’un nuage de points, le pilote peut recalculer la profondeur à partir des coordonnées `z`. Inversement, si seule la profondeur est disponible, il génère un nuage de points.
  • Trois modes de transport, une API unifiée

    Le SDK associé au pilote expose une API C++17 simple et cohérente, indépendante du transport utilisé. Voici un exemple minimal pour initialiser le capteur en mode UDP :

    #include <hm_ld1_sdk/hm_ld1_sdk.hpp>
    
    int main() {
        hm_ld1::Camera camera;
        hm_ld1::CameraConfig config;
        
        // Configuration UDP
        config.transportType = hm_ld1::TransportType::Udp;
        config.udp.bindAddress = "0.0.0.0";
        config.udp.port = 2368;
        config.udp.interfaceName = "eth0";
        
        if (!camera.Open(config)) {
            std::cerr << "Échec de l'ouverture du capteur." << std::endl;
            return 1;
        }
        
        // Boucle de lecture des trames
        for (;;) {
            hm_ld1::FrameSet frame;
            if (!camera.Poll(&frame)) {
                std::cerr << "Erreur de lecture." << std::endl;
                break;
            }
            
            // Affichage des métadonnées
            std::cout << "Trame #" << frame.sequence
                      << " | Profondeur: " << frame.depth.width << "x" << frame.depth.height
                      << " | Points: " << frame.pointCloud.size()
                      << std::endl;
        }
        
        camera.Close();
        return 0;
    }

    Détails des transports :

    TransportPlateformeRemarques
    SérieWindows/LinuxDébit par défaut : 921 600 bauds.
    UDPLinux uniquementNécessite des droits `root` ou `CAP_NET_RAW`.
    UVCLinux uniquementUtilise le pilote V4L2 standard (ex: `/dev/video0`).

    Outils de visualisation et démonstrations

    Pour faciliter le développement, myrobotproject fournit aussi des démonstrations OpenCV prêtes à l’emploi :

  • `hm_ld1_depth_viewer` : Affiche les images de profondeur avec une colormap (échelle automatique ou fixe).
  • `hm_ld1_pointcloud_viewer` : Rendu interactif des nuages de points 3D (rotation, zoom, capture d’écran).
  • `hm_ld1_2d_lidar_viewer` : Visualisation en 2D (style lidar classique), utile pour la navigation.
  • Exemple de lancement pour afficher un nuage de points en mode UVC :

    ./hm_ld1_pointcloud_viewer --transport uvc --uvc-device /dev/video0

    Pourquoi ce pilote est une révolution pour les développeurs ?

    1. Réduction du temps d’intégration : Plus besoin de réécrire un pilote pour chaque projet. Le code est open source, documenté et maintenu activement.

    2. Portabilité : Compatible avec les cartes embarquées populaires (Raspberry Pi, Jetson, etc.) et les systèmes Linux standards.

    3. Robustesse : Gestion des erreurs, reconnexion automatique et diagnostics intégrés.

    4. Flexibilité : Support des trois modes de transport, avec une API unifiée pour tous.

    Benchmarks et performances

    D’après les tests publiés par myrobotproject, le HM-LD1 avec le pilote ROS atteint :

  • Fréquence de rafraîchissement : Jusqu’à 30 Hz en mode UDP (avec un Jetson Nano).
  • Latence : Environ 10 ms entre la réception de la trame et sa publication dans ROS.
  • Consommation mémoire : Le SDK consomme moins de 5 Mo de RAM, idéal pour les systèmes embarqués.
  • Comment l’essayer ?

    1. Cloner le dépôt :

       git clone https://github.com/myrobotproject/HM-LD1-ROS1-ROS2-driver.git
       cd HM-LD1-ROS1-ROS2-driver

    2. Installer les dépendances (ROS, CMake, OpenCV pour les démos).

    3. Compiler et installer :

       mkdir build && cd build
       cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local
       make -j$(nproc)
       sudo make install

    4. Lancer le nœud ROS :

       ros2 run hm_ld1_ros2_node hm_ld1_node --ros-args -p transport:=udp

    Perspectives et limites

  • Plateformes Windows : Le pilote ROS 2 est officiellement supporté, mais le transport UDP/UVC nécessite un backend Linux (via WSL ou une machine virtuelle).
  • ROS 1 : La compatibilité est garantie avec Noetic, mais les futures versions de ROS 2 (comme Iron ou Jazzy) devront être testées.
  • Calibration : Le pilote gère l’étalonnage intégré, mais une calibration fine peut être nécessaire pour des applications métrologiques.
  • Verdict : un capteur prêt pour l’industrie 4.0

    Le HM-LD1, couplé à son pilote ROS open source, devient un outil clé en main pour les intégrateurs de robots. Que ce soit pour la navigation autonome, la manipulation d’objets ou la cartographie 3D, ce module offre une solution fiable, flexible et économique.

    Note de l’analyste :

  • Hype-mètre : 4,5/5 (Innovation technique majeure, déploiement industriel imminent).
  • Potentiel marché : Les lidars dToF comme le HM-LD1 pourraient remplacer les solutions LiDAR classiques dans les robots mobiles et les cobots, grâce à leur résistance aux interférences lumineuses et leur coût réduit.
  • > « Ce pilote unifié est un game-changer pour les développeurs. Il réduit les frictions entre ROS 1 et ROS 2, tout en offrant une API stable et documentée. » — openrobotics.org

    Pour aller plus loin :

  • Documentation officielle du pilote ROS
  • SDK C++ et exemples de code
  • Démonstrations OpenCV