BerryBots forums

It is currently Fri Aug 23, 2019 6:30 am

All times are UTC




Post new topic Reply to topic  [ 3 posts ] 
Author Message
PostPosted: Thu Jun 20, 2019 7:01 pm 
Offline

Joined: Wed Sep 23, 2015 12:17 pm
Posts: 22
Hi, I just tweeted the following to Voidious, but I thought I put it here as well for the future:

Quote:
Hi! Love Berrybots a ton, but I'm kinda stuck and I need an external library (probably numlua) to make things work. Any way to load it in the sandbox?


So the problem is that I think I have some pretty nifty ideas for my bots, but since lua lacks efficient numerical tools in the base version I want to import a numeric library (probably numlua). Since the bots are sandboxed though I'm having trouble to find a way to do this, even when I'm modifying the berrybot source code.

The standard libraries are loaded in bblua.cpp with luaL_openlibs(*shipState);, but I couldn't literally find any easy way to just import a lua library there. luaL_register(...) exists, but then I have to somehow manually register the C functions of numlua I guess?

Any thoughts on this? I'm new to lua unfortunately...


Top
 Profile  
 
PostPosted: Sun Jun 23, 2019 9:39 pm 
Offline

Joined: Wed Sep 23, 2015 12:17 pm
Posts: 22
By now I think I understand fairly well how one can use C libraries in lua (with ffi or luaopen), but I can't get numlua to work still. I think I compiled everything correctly (dependencies etc., including luajit of berrybot), but I still get errors.

I actually think GSL (https://www.gnu.org/software/gsl/) might be a more fitting choice anyway, and gsl-shell (https://www.gnu.org/software/gsl/) basically does the same I would like to do. And my first tests are succesfull in contrast to numlua.

Unfortunately there isn't a way to do this without modifying berrybots, and I'm wondering if it actually makes any sense to do this. I hope someone will actually read this, since I actually love berrybots and think with a change like this (and 2-3 more tweaks) it would be pretty much perfect.

Cheers


Top
 Profile  
 
PostPosted: Thu Jul 11, 2019 11:35 pm 
Offline

Joined: Wed Sep 23, 2015 12:17 pm
Posts: 22
So here is an example how one can use the luajit ffi to use external c functions, in this case self written. I'm obviously on linux btw.

In the bot *.lua file I have

Code:
ffi.cdef[[
void setVectorZero(double* vec, int nn);
]]
local hl = ffi.load("./bots/myBots/helperlib.so")
local cvec = ffi.new("double[?]", 100)
helpers.setVectorZero(cvec, 100)


Note that the path in ffi.load is relative to the berrybot executable.
The helperlib.so is a self written dynamic library from the c file

Code:
void setVectorZero(double* vec, int nn) {
  for (int ii = 0; ii < nn; ii++) {
    vec[ii] = 0.;
  }
}


which was just compiled by "gcc -fPIC -shared -o helperlib.so helperlib.c". It's obviously just a stupid example, but anyway.

Some notes:
FFI is enabled by berrybots by default, which I do like, since doing some stuff in C is helpful, even when we're not talking about using external libraries.

FFI can be used to load any dynamic library on the system. Which I personally like as well, even if only for testing stuff with existing libraries inside berrybot (e.g. kdtrees or something).
BUT the problem is that my understanding is that berrybots tries to be "secure" in that regard. I don't see any restrictions on loading iostream for example and manipulating files on the disk. Whether one compiles the shared library oneself or not doesn't really matter, at least if one compiles the helper library oneself, then no other libraries have to be linked, but as I said that doesn't include iostream...

It's already pretty late here, but I just wanted to write stuff down so I don't forget.

Cheers


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 3 posts ] 

All times are UTC


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group