-
Notifications
You must be signed in to change notification settings - Fork 19
FeatureRequests
Amit edited this page Oct 24, 2018
·
7 revisions
Features we would like to see
- Introspective thread graph visualiser. E.g, a visual graph which shows what threads are reading what variables and writing what variables to the KB. Perhaps show things as well like loop time. A similar tool is one from ROS, called rosgraph.
- Replay capabilities. Useful for experiments, testing, and debugging.
- Tools which when pointed at a ROS node C++ code, able to provide a rough idea of what would be read(), write(), and compute(). This requires code introspection. Alternative is a guide on how to identify this (for ROS code, and for general code for users not familiar).
- Enforcing RCW from the KB's side so programmers cannot potentially break it. Throwing exceptions/warnings when it is violated.
- Thread objects which are built for sharing. Tutorials & Design docs on how to make a thread that can be ported to another GAMS project.
- A base thread class which defines a requires() and provides() which tells the system what other thread names and KB variable names/KB objects it requires to run and what it provides to the system. This also helps with creation of a graph as above and for sharing efforts.
- Tutorials on how to package & share the code generated and written.
- I see a thread as being analogous to a node
- Generic threads/drivers which are apart of GAMS which work for standard HW components (e.g LaserDriver, CameraDriver, ImuDriver)
- Standardized container types for most used sensor data
- Generic controllers and control loops which help set up a base system. In ROS it was determined that the only unique part is the hardware interface (or fake hw interface), and so the rest can be given freely to speed up prototyping and development.
- To make them non-blocking the 'function' implemented as the service would have to avoid the KB so as to not block anything using it.
- It may be possible to spawn a separate process where all services are handled. In doing so, two KBs on the system would be maintained so as to not block the main robot's KB.
- Services are still useful, we just need to find a way to implement them. Sometimes, a robot shouldn't be constantly polling a variable (e.g is the motor on agent 0 enabled yet?) and is best handled by an interrupt.
- A base class which has a name field so as to identify it
- Examples on how to launch and setup a complex system with a madara file
- Ability to make variables const or static so users do not accidentally modify or other systems cannot modify (I believe this can be done with local params, but not global)
- Locations which clearly separate what is an argument, what is a parameter, what is data
- Parameters/variables being set on the KnowledgeBase should have a requirement to pass in the name/thread ID of the thread and/or class that is setting the parameter. Useful for debugging and reliability
- Commands to print contents of KB (e.g get value of
agent.0.location
once or also cyclic, determine hz rate, etc. similar to rostopic http://wiki.ros.org/rostopic) - print outputs/inputs of a thread (e.g like rostopic echo)
- print all modifiable parameters on a system
- Generating the reference frame tree from a human readable xml file. (E.g URDF, XML, SRDF).
- Easier to read than having an entire robots tree spread across multiple source files in c++
- Loads once in the knowledge base, making a central point of access for what the TF tree of a robot is.
- Built-in methods to convert the
NativeDoubleVector
to common used types likestd::vector<double>
and similar
-
KB
Helper method to get QoS Transport Settings for KnowledgeBase. -
KB
Recursively free all memory in KnowledgeBase. Eg: retrieve all the data from KB and free up the resources before freeing up KnowledgeBase.
-
Any
If we set any incorrect values in Any type, there's no JNI exception, instead the JVM crashes. I suggest to throw Exception or error message instead of crash. -
Any
Long and Integer types in Any are mixed. We have toInteger which returns long, no method to retrieve "integer". No method toLong. -
Any
Java APIs for Any type uses "fluent" programming, e.g.: Any.at(...).assign(...). Each method calls makes a JNI call. Hence two JNI calls are made one each for at() and assign() method call. Instead this should be enhanced to do in one JNI call. Every JNI call costs and it might cause performance overheads.