YARP
Yet Another Robot Platform
 
Loading...
Searching...
No Matches
An example which shows how to use a Lua script to create a new data type in a port
+ Collaboration diagram for An example which shows how to use a Lua script to create a new data type in a port:

Description

This example demonstrates how to use the port monitor carrier to substitute a data type with another one. The port '/write' from 'yarp write' module is connected to the '/read' port of 'yarp read' using a portmonitor plugged into the receiver side. The portmoniotr loads a Lua script ('type_modifier.lua') which expects to see a command such as 'random N' (where N is an integer number). The command is, then, completely substituted with a vector of N random values which will be delivered to the 'yarp read'. The port monitor also checks for the validity of the command

Requirements

Running the example

Now if you write a valid command in the 'sender' terminal (e.g., random 3), you will see the command is completely substituted by a vector of 3 random values. For example:

[sender terminal]
   random 3
[receiver terminal]
   0.513401 0.95223 0.916195

Scripts

type_modifier.lua

-- loading lua-yarp binding library
require("yarp")
--
-- accept is called when the port receives new data
-- @param thing The Things abstract data type
-- @return Boolean
-- if false is returned, the data will be ignored
-- and update() will never be called
PortMonitor.accept = function(thing)
bt = thing:asBottle()
if bt:size() < 2 or bt:get(0):asString() ~= "random" then
print("type_modifier: invalid command! (e.g., random 10)")
return false;
end
return true
end
--
-- update is called when the port receives new data
-- @param thing The Things abstract data type
-- @return Things
PortMonitor.update = function(thing)
bt = thing:asBottle()
th = yarp.Things()
vec = yarp.Vector()
for i=1,bt:get(1):asInt32() do
vec:push_back(math.random())
end
th:setPortWriter(vec)
return th
end