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 ?