Vai al contenuto
Guida per sviluppatori per

SDK SLAM FJD Trion

Avvio rapido
Metodi pubblici
Esempio di utilizzo
Precauzioni

Panoramica

SLAM SDK è una libreria C++ per comunicare con i dispositivi S2/P2/P1, che fornisce funzioni come il rilevamento dei dispositivi, la scansione delle mappe e il download dei dati.

Namespace

namespace fjminislam

Definizione delle costanti

Configurazione della porta 

Nome della costanteValoreDescrizione
BROADCAST_PORT29527Porta di broadcast del dispositivo
PORT9090Porte di comunicazione del dispositivo

Scarica enumerazione del tipo di dati

enum DownloadDataType
{
    FJDSLAM = 1,   // Dati in formato FJDSLAM
    PLY     = 2,   // Dati nuvola di punti in formato PLY
    PTS     = 3,   // Dati nuvola di punti in formato PTS
    LAS     = 5,   // Dati nuvola di punti in formato LAS
    FJDRTK  = 6,   // Dati in formato FJDRTK
    RTCM    = 9,   // Dati in formato RTCM
    INSV    = 99,  // Dati in formato INSV
};

Struttura del dispositivo

struct Device
{
std::string serialno; // Numero di serie del dispositivo
std::string ip; // Indirizzo IP del dispositivo
std::string fwversion; // Versione del firmware
};

Classe SDK

Funzione costruttore e distruttore

SDK(); // Costruttore predefinito
~SDK(); // Distruttore

Variabile membro pubblica

std::vector<fjminislam::Device> device_list; // Elenco dei dispositivi

get_available_devices 

std::vector<fjminislam::Device> get_available_devices(int search_time=3);

Funzione: Cerca i dispositivi disponibili

Parametro

search_time

Durata della ricerca, unità: secondi, predefinito: 3 secondi

Valore restituito : Elenco dei dispositivi 

get_maplist 

json get_maplist(); 

Funzione: Ottieni le informazioni dell'elenco delle mappe

Valore restituito : Informazioni sulla mappa in formato JSON, contenenti i seguenti campi: 

Nome campoTipoDescrizione
resultboolRisultato della richiesta, true indica successo
values.has_cameraarray<int>Con o senza fotocamera, 1 significa sì e 0 significa no
values.maplistarray<string>Elenco dei nomi delle mappe
values.match_statusarray<int>Se continuare la scansione da un punto di interruzione, 1 significa sì, 0 significa no
values.rtk_locked_percentarray<int>Percentuale di blocco RTK
values.slam_dis_in_marray<int>Chilometraggio della missione, unità metri
values.task_time_in_secarray<int>Tempo dell'attività, in secondi
values.vec_data_types_for_downloadarray<int>Tipo di dati scaricabile, 1 indica l'esistenza

start_map 

json start_map(std::string mapname="");

Funzione: Avvia l'attività di scansione

Parametro

nomemappa

Nome mappa personalizzato, facoltativo

Valore di ritorno : Il risultato di avvio in formato JSON, contenente i seguenti campi: 

Nome campoTipoDescrizione
resultboolRisultato della richiesta, true indica successo
values.statusintStato dell'attività:
0 - Missione interrotta
1 - Stato normale
-1 - Inizializzazione non riuscita
-2 - Apparecchiatura occupata
-4 - Elaborazione dell'attività
-6 - Lo spazio di archiviazione della fotocamera Insta è insufficiente

stop_map 

json stop_map();

Funzione: Interrompe l'attività di scansione

Valore restituito : Risultato dell'interruzione in formato JSON, contenente i seguenti campi: 

Nome campoTipoDescrizione
resultboolRisultato della richiesta, true indica successo
values.messagestringDescrizione del messaggio
values.successboolSe l'interruzione è andata a buon fine

check_device_task 

json check_device_task(bool force_check=true); 

Funzione: Ottenere o eseguire l'autocontrollo del dispositivo

Parametro

force_check

Se forzare l'autocontrollo, true indica solo l'ottenimento del risultato, false indica l'esecuzione dell'autocontrollo

Valore di ritorno: Risultato dell'autocontrollo in formato JSON, contenente i seguenti campi:

Nome campoTipoDescrizione
resultboolRisultato della richiesta, true indica successo
values.statusintStato del dispositivo:
7 - Tutti i dispositivi sono in buone condizioni
5 - Anomalie del LiDAR

download_map_data 

bool download_map_data(std::string mapname, fjminislam::DownloadDataType type, std::string save_path);

Funzione: Scarica i dati di scansione

Parametri

nomemappa
  • Nome mappa
tipo
  • Tipo di dati da scaricare, vedi enumerazione:
DownloadDataType
percorso_salvataggio 
  • Percorso di salvataggio dei dati, ad es.: 
/tmp/

Valore restituito : true indica download riuscito, false indica download non riuscito 

time_syn 

json time_syn();

Funzione: Sincronizza l'ora con lo scanner

Valore restituito : Risultato della sincronizzazione dell'ora in formato JSON, contenente i seguenti campi: 

Nome campoTipoDescrizione
resultboolRisultato della richiesta, true indica successo
values.left_timeintTempo rimanente
values.statusboolStato della sincronizzazione, true indica successo

check_scanner_connection 

bool check_scanner_connection();

Funzione: Controlla lo stato della connessione dello scanner

Valore di ritorno : true indica una connessione normale, false indica una connessione anomala 

connect_device 

bool connect_device(fjminislam::Device device); 

Funzione: Connette al dispositivo specificato

Parametro

device

 Informazioni del dispositivo da connettere

Valore di ritorno : true indica una connessione riuscita, false indica un errore di connessione 

get_current_name 

std::string get_current_name();

Funzione: Ottiene il nome del dispositivo attualmente connesso

Valore di ritorno : Nome del dispositivo 

get_version 

std::string get_version();

Funzione: Ottieni la versione SDK

Valore restituito : Numero di versione dell'SDK 


Procedura di utilizzo di base 

#include "fjminislam_sdk.h"

int main() {
    fjminislam::SDK sdk = fjminislam::SDK();
    sdk.get_version();
    fjminislam::Device selected_scanner;
    std::vector<fjminislam::Device> devices_list = sdk.get_available_devices();
    if (devices_list.size() == 0) {
        printf("nessuno scanner trovato\n");
        return 1;
    }
    selected_scanner = devices_list[0];
    printf("dispositivo selezionato, serialno:%s ip:%s\n",selected_scanner.serialno.c_str(), selected_scanner.ip.c_str());

    std::string sdk_version = sdk.get_version();
    printf("sdk_version: %s\n", sdk_version.c_str());

    if (!sdk.connect_device(selected_scanner)) {
        printf("connect_device non riuscito\n",);
        return 2;
    }

    if (!sdk.check_scanner_connection()) {
        printf("check_scanner_connection non riuscito\n");
        return 3;
    }

    json time_syn_result = sdk.time_syn();
    printf("risposta time_syn: %s\n", time_syn_result.dump().c_str());

    json start_map_result = sdk.start_map("test1");
    printf("risposta start_map: %s\n", start_map_result.dump().c_str());
    
#ifdef _WIN32
    Sleep(30);
#else
    sleep(30);
#endif
    std::string cur_name = sdk.get_current_name();
    printf("cur_name: %s\n", cur_name.c_str());

    json stop_map_result = sdk.stop_map();
    printf("risposta stop_map: %s\n", stop_map_result.dump().c_str());

    json get_maplist_result = sdk.get_maplist();
    printf("risposta get_maplist: %s\n", get_maplist_result.dump().c_str());

    bool download_result = sdk.download_map_data(cur_name, fjminislam::DownloadDataType::LAS, "./");
    printf("risposta download_map_data: %d\n", download_result);
    return 0;
}


  1. Prima di utilizzare l'SDK, assicurarsi che il dispositivo sia correttamente connesso alla rete 

  2. Mantenere il dispositivo stabile durante il processo di scansione ed evitare movimenti improvvisi

  3. Assicurarsi che ci sia spazio sufficiente nel percorso di archiviazione durante il download dei dati

  4. Si consiglia di controllare lo stato della connessione del dispositivo prima di chiamare l'API 


Procedura di utilizzo di base 

#include "fjminislam_sdk.h"

int main() {
    fjminislam::SDK sdk = fjminislam::SDK();
    sdk.get_version();
    fjminislam::Device selected_scanner;
    std::vector<fjminislam::Device> devices_list = sdk.get_available_devices();
    if (devices_list.size() == 0) {
        printf("nessuno scanner trovato\n");
        return 1;
    }
    selected_scanner = devices_list[0];
    printf("dispositivo selezionato, serialno:%s ip:%s\n",selected_scanner.serialno.c_str(), selected_scanner.ip.c_str());

    std::string sdk_version = sdk.get_version();
    printf("sdk_version: %s\n", sdk_version.c_str());

    if (!sdk.connect_device(selected_scanner)) {
        printf("connect_device non riuscito\n",);
        return 2;
    }

    if (!sdk.check_scanner_connection()) {
        printf("check_scanner_connection non riuscito\n");
        return 3;
    }

    json time_syn_result = sdk.time_syn();
    printf("risposta time_syn: %s\n", time_syn_result.dump().c_str());

    json start_map_result = sdk.start_map("test1");
    printf("risposta start_map: %s\n", start_map_result.dump().c_str());
    
#ifdef _WIN32
    Sleep(30);
#else
    sleep(30);
#endif
    std::string cur_name = sdk.get_current_name();
    printf("cur_name: %s\n", cur_name.c_str());

    json stop_map_result = sdk.stop_map();
    printf("risposta stop_map: %s\n", stop_map_result.dump().c_str());

    json get_maplist_result = sdk.get_maplist();
    printf("risposta get_maplist: %s\n", get_maplist_result.dump().c_str());

    bool download_result = sdk.download_map_data(cur_name, fjminislam::DownloadDataType::LAS, "./");
    printf("risposta download_map_data: %d\n", download_result);
    return 0;
}

Supporto per robot cane FJD Trion S1

Grazie a un algoritmo SLAM all'avanguardia, l'S1 costruisce la tua realtà mentre esegui la scansione, così non perdi nessun dettaglio.
Immagine del prodotto

Supporto per robot cane FJD Trion S1

Grazie a un algoritmo SLAM all'avanguardia, l'S1 costruisce la tua realtà mentre esegui la scansione, così non perdi nessun dettaglio.
Immagine del prodotto

Struttura dei dati

Struttura del dispositivo

struct Device
{
std::string serialno; // Numero di serie del dispositivo
std::string ip; // IP del dispositivo
addressstd::string fwversion; // Versione del firmware
};

Classe SDK

Costruttore

Funzione costruttore e distruttore

Variabile membro pubblica

D

  1. Prima di utilizzare l'SDK, assicurarsi che il dispositivo sia correttamente connesso alla rete 

  2. Mantenere il dispositivo stabile durante il processo di scansione ed evitare movimenti improvvisi

  3. Assicurarsi che ci sia spazio sufficiente nel percorso di archiviazione durante il download dei dati

  4. Si consiglia di controllare lo stato della connessione del dispositivo prima di chiamare l'API 

Leggi di più

Come ritagliare e rifinire i dati 3DGS

Tutorial sulle funzionalità del modello FJD Trion

Leggi di più

Come utilizzare l'identificazione automatica delle specie arboree

Tutorial sulle funzionalità del modello FJD Trion

Leggi di più

Come creare Gaussian Splatting 3D

Tutorial sulle funzionalità del modello FJD Trion

Leggi di più

Come utilizzare la funzione HyperDense+

Tutorial sulle funzionalità del modello FJD Trion

Leggi di più

Come utilizzare i nuovi strumenti di disegno

Tutorial sulle funzionalità del modello FJD Trion

Leggi di più

Come utilizzare gli strumenti di rettifica

Tutorial sulle funzionalità del modello FJD Trion

Espandi

Supporto per robot cane FJD Trion S1

Grazie a un algoritmo SLAM all'avanguardia, l'S1 costruisce la tua realtà mentre esegui la scansione, così non perdi nessun dettaglio.
Immagine del prodotto

Supporto per robot cane FJD Trion S1

Grazie a un algoritmo SLAM all'avanguardia, l'S1 costruisce la tua realtà mentre esegui la scansione, così non perdi nessun dettaglio.
Immagine del prodotto