4 votes

Comment montrer l'efficacité d'Erlang pour la programmation des robots ?

Je poursuis actuellement des études de Master en Embedded et pour ma thèse, je dois étudier l'efficacité d'Erlang pour la programmation des robots. AFAIK La nature déclarative et la concurrence d'Erlang peuvent être efficaces. donc j'ai fait un code Erlang pour "Adaptive cruise control" qui prend les valeurs du capteur à partir du programme C (parce qu'Erlang ne peut pas lire les capteurs directement) puis effectue le calcul et renvoie le signal de contrôle au programme C. Mais le code semble assez gros en taille (lignes). Pourquoi ne puis-je pas utiliser la nature déclarative ? ou il y a un autre problème ? Voici mes extraits de code.

 start() -> 
    spawn( cr, read_sensor, []),
    spawn(cr, take_decision, []),
    sleep_infinite().
% this will make it to run infinitely 
sleep_infinite() -> 
    receive
        after infinity ->
            true
    end.

read_sensor() -> 
    register(read, self()),
    Port = open_port({spawn , "./cr_cpgm" }, [{packet, 2}]),
    Port ! {self(),{command, [49]}},% for executing read sensor fun in C pgm
    read_reply(Port).

read_reply(Port) -> 
    receive 
        read_sensor -> 
            Port ! { self(), { command, [49]}};

        {Port, {data, Data}} -> 
            [Left,Center,Right,Distance] = Data, % stored values of sensors into variables for further computation
            io:format("value of Left: ~w and Center: ~w and Right: ~w and Distance: ~w~n",[Left,Center,Right,Distance]),

        if         Distance =< 100 -> decision ! {1, out}; % Distance shows the value returned by front sharp sensor
                ((Left > 25) and (Center > 25) and (Right > 25)) -> decision ! {2, out}; % stop robot
                        Center < 25 -> decision ! {3, out}; % move forward
                   ((Left > 25) and (Center > 25)) -> decision ! {4, out}; % turn right
                 ((Right > 25) and (Center > 25)) -> decision ! {5, out}; % turn left
                          true ->   decision ! {6, out}   % no match stop robot  
        end
    end,
    read_reply(Port).

take_decision() ->
    register(decision, self()),
    Port = open_port({spawn , "./cr_cpgm" }, [{packet, 2}]),
    decision_reply(Port).

decision_reply(Port) ->
    receive
        {A, out} ->
            Port ! {self(), {command, [50,A]}};

        {Port,{data, Data}} ->
        if
            Data == [102] ->  read ! read_sensor %
        end
    end,
    decision_reply(Port).

Ce code ressemble plus à un code C.

  • Ma méthode d'implémentation est-elle incorrecte (surtout SI...fin) ou le problème lui-même est-il mineur (seulement 2 processus) ?

Veuillez me suggérer comment montrer l'efficacité d'Erlang dans la programmation des robots. Toutes les suggestions sont les bienvenues.

Merci..

Bien Je suis d'accord avec @cthulahoops que ce problème n'est pas suffisant pour montrer l'efficacité d'Erlang. . Quelqu'un peut-il me suggérer une application robotique que je peux mettre en œuvre en Erlang ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X