Git Product home page Git Product logo

aseba-community / aseba Goto Github PK

View Code? Open in Web Editor NEW
48.0 23.0 62.0 25.56 MB

Aseba is a set of tools which allow beginners to program robots easily and efficiently. To contact us, please open an issue.

Home Page: http://aseba.wikidot.com

License: GNU Lesser General Public License v3.0

CMake 3.56% Shell 0.18% C++ 69.05% CSS 0.18% HTML 14.92% C 7.29% QMake 0.01% Python 3.20% JavaScript 0.98% Ruby 0.01% Batchfile 0.01% NSIS 0.62% Smarty 0.01%
robotics education k12 iot-framework ide visual-programming

aseba's Introduction

Aseba

Build Status Build status

Aseba is a set of tools which allow novices to program robots easily and efficiently. For these reasons, Aseba is well-suited for robotic education and research. Aseba is an open-source software created by Dr. Stéphane Magnenat with contributions from the community. Copyright (C) 2007–2018 the authors, see authors.txt for details. Released under LGPL3, see license.txt for details.

Supported platforms

Aseba can be compiled and run on Linux, MacOS, Windows, and some embedded systems.

Building from source

Please refer to the compilation instructions

Use Aseba

Informations on how to use Aseba is available on read the docs.

If you use Aseba in an academic project leading to a publication, please cite:

ASEBA: A Modular Architecture for Event-Based Control of Complex Robots Stéphane Magnenat, Philippe Rétornaz, Michael Bonani, Valentin Longchamp, and Francesco Mondada. In IEEE/ASME Transactions on Mechatronics, 16(2), pages 321–329, April, 2011, DOI: 10.1109/TMECH.2010.2042722.

full text document

Thymio and Mobsya fork

Thymio is an educational robot which goal is to let children discover programming. Mobsya is a non-profit association which goal is to create products and service to help children to discover digital technology and sciences. It is at the heart of Thymio's development and takes care of its production and distribution.

Up to April 2018, Mobsya was working as part of the Aseba community in the Aseba repository to develop Thymio software tools in an integrated manner. After this date, Mobsya decided to fork the Aseba repository and to keep developping Thymio software tools in its own repository.

Access the complete public message from Mobsya

Hack and contribute

If you found a bug with Aseba, please look at the existing issues to see if your problem has already been reported. If not, please open a new issue.

If you want to help us translating Aseba or its documentation, please read the localization guide.

If you are interested in contributing to programming Aseba, please read the contributor guide.

Aseba is not actively maintained, but if you send a reasonable pull request that solves a bug, it will likely get merged.

Enjoy Aseba!

The developers

aseba's People

Contributors

antoinealb avatar basilstotz avatar benzonico avatar brettle avatar cbarraud avatar chlongv avatar cor3ntin avatar cwalther avatar cyrillebiot avatar damieng002 avatar davidjsherman avatar fabianhahn avatar frankybonnet avatar ioannagreece avatar jiwonshin avatar kralf avatar marvelous avatar paraskevasleivadaros avatar riedo avatar sampla avatar severinklingler avatar shilingwang avatar stephanemagnenat avatar syrianspock avatar titwin avatar witwicki avatar ypiguet-epfl avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

aseba's Issues

Add a watch window

Most modern debuggers offer a watch window, so you can keep track of a limited set of variables.

In Aseba, this could translate to a network-wide watch window, so you can even look at the variables of other nodes at the same time. Of course, the variables should be grouped by node (or maybe the user should be able to order them?), and an icon should inform the user about the status of this node / variable (running, stop, step-by-step,...) :-)

Allow template code from command line

When playing with the thymio, people write some code before being introduced to the concept of event. However, this code is painful to understand because being it is executed only when the nod starts, therefore the node must be resetted each time one wants to run the code.

A simple solution to this is to pass some template code (or file) from the command line such that the initial code has a "onevent button" as the first line, which would help children to have something working faster. Once they understand what happens, introducing the concept of events is easier.

Add an offline documentation browser

Following the integration of the wikidot documentation into Aseba Studio, it may be interesting to have a dedicated process to browse this documentation without Aseba Studio. This will allow users (like me) to browse the doc without having to start a simulation, just to start Aseba Studio...

This is easy to do, we just have to move the corresponding .cpp / .h to a new folder, create a short asebadoc.cpp, [create a library?], and link both applications with this file. The only unknown is where to place the documentation files. In the root folder maybe?

Any interest in this feature?

Add the "return" instruction

This issue was moved from gna bug tracker, there it was bug 18103 (http://gna.org/bugs/?18103).

Florian Vaussard
The problem is not to return a value to someone, this can be managed using variables.
The concept would be to stop prematurely the execution of the event / subroutine. Like adding an "end" label and jumping to it. Otherwise, you have to declare a completion variable, and test it each time to see if you have to do some other work or not, until the end of the routine...

Stéphane Magnenat
It is not possible to return from event handlers as it is not defined to whom a value should be returned.
It might be possible to implement it for subroutines, but it is not trivial. It is important to note that subroutines are currently not functions, they do not have local scopes. They do have a call stack, but the latter only stores return addresses. But it might be nice to add an optional scalar return value to subroutines, indeed.

Florian Vaussard
The absence of "return" in event handlers / subroutines is really painful.
The structure of one's (real-world) program could be made really more clear with this :-)

zfuzz-based tests fail if zfuzz is not installed

The error being typically the following:

Traceback (most recent call last):
1128 File "/home/steph/data/epfl-lsro/aseba/tests/fuzzyinput.py", line 41, in
1129 stdout=open(os.devnull), stderr=open(os.devnull))
1130 File "/usr/lib/python2.7/subprocess.py", line 486, in call
1131 return Popen(_popenargs, *_kwargs).wait()
1132 File "/usr/lib/python2.7/subprocess.py", line 672, in init
1133 errread, errwrite)
1134 File "/usr/lib/python2.7/subprocess.py", line 1213, in _execute_child
1135 raise child_exception
1136 OSError: [Errno 2] No such file or directory
1137

CMake should test for zfuzz and not enable tests depending on it if not present.

Translate compiler error messages

Compiler error messages are currently not translated, which is not nice when the environment is being used by non-English speakers. This tend to have the users ignore the error messages, which is a bad thing.

Adding translation to error messages requires the error-message class to hold all informations about the message in such way that messages can be reconstructed after translation.

Allow to write compiled code to a file

It would by useful to be able to write binary (==compiled) code to a file.
Thus this code could be dynamically loaded by the thymio from the SD card.

In order to not automatically load code which is incompatible the following information should be in the file and checked by the VM:

  • VM name
  • VM ID
  • VM fwversion
  • VM productid
  • VM_STACK_SIZE
  • VM_BYTECODE_SIZE
  • VM_VARIABLES_ARG_SIZE
  • VM_VARIABLES_FREE_SPACE

Maybe a hash (CRC, or maybe md5) of the Full VM description could be used.

Compiler crachs when compiling i = ~1

The compiler segfault at the optimization step. Here is the dump:

Program:
1 var i
2
3 i = ~1
4
5
Dumping tokens:
Line: 1 Col: 1 : var keyword
Line: 1 Col: 5 : string : i
Line: 3 Col: 1 : string : i
Line: 3 Col: 3 : = (assignation)
Line: 3 Col: 5 : binary not
Line: 3 Col: 6 : integer : 1
Line: 5 Col: 0 : end of stream

Syntax tree before optimisation:
ProgramBlock
Assign
Store: addr 0
UnaryArithmetic: binary not
Immediate: 1

Type checking:
correct.

Optimizations:
Abandon (core dumped)

Execute the compiler in a separate process

Currently, if the Aseba compiler segfault (yes, it can happen...), it makes Aseba Studio to crach. Running the compiler in a different process would prevent Aseba Studio to crach, avoiding frustration to the user and lost of the unsaved work.

Of course, this would imply to standardize the input and output interfaces.

And what about performance issues?

[enki marxbot] Crashes if studio disconnects

no check for dashel exception: asebamarxbot: targets/enki-marxbot/AsebaMarxbot.cpp:64: void AsebaSendBuffer(AsebaVMState_, const uint8_, uint16): Assertion ‘stream’ failed.

Provide context-aware help, automatic completion and automatic indentation

Currently Studio supports some form of context-help, automatic completion and automatic indentation. However, this is done through ad hoc methods where the source code is parsed by Studio (essentially in AeslEditor.h), that is, outside the compiler parser. Moreover, when people drag and drop elements, for instance from the memory area or from the event list, Studio knows the semantics of these elements, which is lost when they are dropped and recovered by ad hoc parsing.

I propose a new paradigm: instead of having the editor holding raw text, it should hold an abstract syntax tree and only display raw text as a matter of convenience. When the text is edited the abstract syntax tree should be updated accordingly. This should allow the editor to provide context-dependant help and completion in a very convenient way. It is of course non-trivial from a user-interface perspective, as the question of what to do when people are deleting some text is very interesting to explore, but such editors could be the missing link between graphic programming and text programming.

Add automatic-refresh option for variables

It would be nice to add an option to allow the variables to automatically refresh. In the idea case, Studio should only refresh the variables currently being shown, but as a first implementation it is ok to refresh all variables.

Increase unit test coverage

  • Should cover all available operators (arithmetic, comparison,...)
  • Should test graceful exit for inconsistent inputs (no segfault)
  • Should test different loops

Crash on paste

I go the following crash on paste, unfortunately on a release build:

*** glibc detected *** studio/asebastudio: free(): invalid pointer: 0x0000000000d387c0 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x78a8f)[0x7fe190523a8f]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x73)[0x7fe1905278e3]
/usr/lib/libQtGui.so.4(+0x4343d4)[0x7fe1925363d4]
/usr/lib/libQtGui.so.4(+0x43804b)[0x7fe19253a04b]
/usr/lib/libQtGui.so.4(_ZN11QTextCursor10insertTextERK7QStringRK15QTextCharFormat+0x117)[0x7fe1925669d7]
/usr/lib/libQtGui.so.4(_ZN11QTextCursor10insertTextERK7QString+0x3a)[0x7fe19256702a]
studio/asebastudio(_ZN5Aseba10AeslEditor18insertFromMimeDataEPK9QMimeData+0x31f)[0x44f1cf]
/usr/lib/libQtGui.so.4(+0x402b23)[0x7fe192504b23]
/usr/lib/libQtGui.so.4(_ZN12QTextControl12processEventEP6QEventRK7QMatrixP7QWidget+0x80b)[0x7fe192505bcb]
/usr/lib/libQtGui.so.4(_ZN12QTextControl12processEventEP6QEventRK7QPointFP7QWidget+0x56)[0x7fe1924fbd86]
/usr/lib/libQtGui.so.4(_ZN9QTextEdit13keyPressEventEP9QKeyEvent+0x2c7)[0x7fe192729c77]
studio/asebastudio(_ZN5Aseba10AeslEditor13keyPressEventEP9QKeyEvent+0x3a)[0x44903a]
/usr/lib/libQtGui.so.4(_ZN7QWidget5eventEP6QEvent+0x71c)[0x7fe19230cd4c]
/usr/lib/libQtGui.so.4(_ZN6QFrame5eventEP6QEvent+0x26)[0x7fe1926bf156]
/usr/lib/libQtGui.so.4(_ZN19QAbstractScrollArea5eventEP6QEvent+0x7b)[0x7fe1927408eb]
/usr/lib/libQtGui.so.4(_ZN9QTextEdit5eventEP6QEvent+0x50)[0x7fe19272d140]
/usr/lib/libQtGui.so.4(_ZN19QApplicationPrivate13notify_helperEP7QObjectP6QEvent+0xb4)[0x7fe1922bb9f4]
/usr/lib/libQtGui.so.4(_ZN12QApplication6notifyEP7QObjectP6QEvent+0x9a1)[0x7fe1922c0c41]
/usr/lib/libQtCore.so.4(_ZN16QCoreApplication14notifyInternalEP7QObjectP6QEvent+0x8c)[0x7fe19161a49c]
/usr/lib/libQtGui.so.4(+0x25f3d9)[0x7fe1923613d9]
/usr/lib/libQtGui.so.4(+0x25f856)[0x7fe192361856]
/usr/lib/libQtGui.so.4(_ZN12QApplication15x11ProcessEventEP7_XEvent+0x86f)[0x7fe19233c72f]
/usr/lib/libQtGui.so.4(+0x263842)[0x7fe192365842]
/lib/x86_64-linux-gnu/libglib-2.0.so.0(g_main_context_dispatch+0x1dd)[0x7fe18f8b0bcd]
/lib/x86_64-linux-gnu/libglib-2.0.so.0(+0x433a8)[0x7fe18f8b13a8]
/lib/x86_64-linux-gnu/libglib-2.0.so.0(g_main_context_iteration+0x69)[0x7fe18f8b1639]
/usr/lib/libQtCore.so.4(_ZN20QEventDispatcherGlib13processEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE+0x6f)[0x7fe1916453ef]
/usr/lib/libQtGui.so.4(+0x2634de)[0x7fe1923654de]
/usr/lib/libQtCore.so.4(_ZN10QEventLoop13processEventsE6QFlagsINS_17ProcessEventsFlagEE+0x32)[0x7fe191619882]
/usr/lib/libQtCore.so.4(_ZN10QEventLoop4execE6QFlagsINS_17ProcessEventsFlagEE+0xdc)[0x7fe191619abc]
/usr/lib/libQtCore.so.4(_ZN16QCoreApplication4execEv+0xab)[0x7fe19161decb]
studio/asebastudio(main+0x9fb)[0x47ff2b]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xff)[0x7fe1904c9eff]

improve drag and drop

when drag and drop a buffer it should add the [ ] or directly the buffer[value] when drag from the value

aseba studio didn't connect to argos

This issue was moved here from the forum post by yamani:

hi
i install aseba from sources in ubuntu . i want to work with aseba and argos but, asebastudio didn't connect to argos.what is wrong?
can i use aseba for footbot robot in argos?
thanks

Unity test: Simulate user's input

Often, the compiler crashes during an incomplete input, when the user is writing a line. This is not caught by the regular test suite, as only the final state is checked.

The idea would be to have a (let's say) Python script, taking a script as input and looping over each character, truncating the end and compiling. This will generate a lot of compilation, but will effectively simulate a user typing a new script. Should not be hard to do...

Tell people where to find programs

There is a missing piece in the wiki between the "Download" part and the page supposing Studio is running (either challenge or Thymio tutorial). This should be solved using a "Starting Aseba programs" page that give system-specific instructions on how to launch studio and challenge.

Memory view: add the possibility to color some variables

When debugging, it would be really nice to apply some kind of label / formatting (example: background or font color) to chosen variables. A bit like the labels of GitHub... Doing so would significantly ease when dealing with a big amount of variables, by keeping track of important variables.

Add the "switch" instruction

This issue was moved from gna bug tracker, there it was bug 18102 (http://gna.org/bugs/?18102).

Florian Vaussard
I agree, this is not a mandatory feature, but would be more confortable for big state machines.

Stéphane Magnenat
Doing this is purely a syntactic extension, if implemented with chained if <-> else if.

The question whether it is worth the work and the complexification of the language, as chained elseif do implement the same idea:

if a == 1 then

elseif a == 2 then

elseif a == 3 then

else

end

Florian Vaussard
It would be nice to have the "switch" instruction like in C.

memory tree no closing itself

the memory tree is closing when we type some code, it is some time very painful to every time reopen the value we want to see

Find a way to make removal/change of event safely

When one removes an event (or re-order if the feature gets implemented), the event names refer to different event id. Therefore, if the program is running and if one sends an event, another code that the expected one might be executed. This might be dangerous when working with hardware. We should find a way to make this safe, either by warning the user or by preventing the sending of events until the code has been reloaded.

Intelligent else indentation

The automatic indentation system does not provide any support for the else keyword, it would be nice to provide something consistent with the if automatic indentation.

Check and notify user when new binaries are available

As we now have a central place for binaries, Aseba Studio should offer the possibility to check for updates, and possibly launch the update process, or at least notify the user on how to update.

Maybe should this be part of a separate program, mainly Aseba Updater?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.