ltl_automaton_core's People
ltl_automaton_core's Issues
Replanning when receiving unplanned state
The dynamic parameter "replan_on_unplanned_move" exists but does not seem implemented yet in the planner node.
After IRL, the planner replans again even if its published next move is followed
If initial TS state from agent, initial state received twice
Because TS state is a latched topic, if initial state is given from agent, the TS state callback will also get the same state.
This could trigger re-planning or other issues.
Could be solve by having the callback ignore the first TS state if the parameter for initial state from agent in on.
LTL2BA needs to be recompiled for different CPU architectures
The code includes compiled binaries of the LTL2BA software. However this was compiled on 64bits desktop computer (x86_64) and doesn't work on some onboard computer with different CPU architecture (ARM, ...).
LTL2BA should therefor be compiled at the same time as the ROS package, maybe using a ROS wrapper package.
Self-loop in TS
Self-loop on TS nodes seems to be critical to trap detection (see issue here).
For now, those self-loop are defined at the TS config file level. Should they always be included in the TS build process? That would only make sense to leave them in the config files if there are specific configurations where we want to avoid it.
Replanning at new suffix execution
There seems to be a bug where re-planning is triggered at each new suffix execution. Needs to be checked.
Cannot construct transition system if a state does not have actions associated to it
For exampe, if a parallel dimension of states is defined as:
package_state:
ts_type: "package_state"
initial: "empty"
nodes:
empty:
connected_to:
arrived:
connected_to:
then the following error is thrown:
processing model dimension package_state
Traceback (most recent call last):
File "/home/tusike/catkin_ws/src/ltl_automaton_core/ltl_automaton_planner/nodes/planner_node.py", line 385, in <module>
ltl_planner_node = MainPlanner()
File "/home/tusike/catkin_ws/src/ltl_automaton_core/ltl_automaton_planner/nodes/planner_node.py", line 59, in __init__
self.build_automaton()
File "/home/tusike/catkin_ws/src/ltl_automaton_core/ltl_automaton_planner/nodes/planner_node.py", line 166, in build_automaton
state_models = state_models_from_ts(ts_dict, self.initial_state_ts_dict)
File "/home/tusike/catkin_ws/src/ltl_automaton_core/ltl_automaton_planner/src/ltl_automaton_planner/ltl_automaton_utilities.py", line 49, in state_models_from_ts
for connected_node in state_model_dict['nodes'][node]['connected_to']:
TypeError: 'NoneType' object is not iterable
Guard is not computed properly for TS with more than 2 subspaces
If using more than 2 TS in the agent model, the guard doesn't work properly.
The problem is that graph product is done iteratively by doing the product of 2 TS at a time, including node generation and building transitions. The guard doesn't work because it is not checked always against the final node label.
One way to solve the issue would be to build all nodes of the product at once, and then only build the transitions.
Error if prefix plan is empty
[INFO] [1615043700.323179]: LTL automaton Turtlebot node: waiting for turtlebot move base action server...
[INFO] [1615043700.626788]: LTL Planner: --- Planning in progress (static) ---
[INFO] [1615043700.628346]: LTL Planner: Hard task is: ([] (uncharged -> <> charged)) && ([] <> loaded) && [](loaded -> <> unloaded) && [](!r23 && !r29)
[INFO] [1615043700.630186]: LTL Planner: Soft task is:
[INFO] [1615043700.699133]: LTL Planner: full Buchi constructed with 10 states and 64 transitions
[INFO] [1615043700.984835]: LTL Planner: full model constructed with 76 states and 266 transitions
[INFO] [1615043700.986108]: LTL Planner: initial state in TS is set([('r36', 'unloaded', 'charged')])
[INFO] [1615043701.707568]: LTL Planner: full product constructed with 760 states and 5810 transitions
[INFO] [1615043703.264106]: LTL Planner: Prefix plan: []
[INFO] [1615043703.265290]: LTL Planner: Suffix plan: ['goto_r35', 'goto_r34', 'pick', 'goto_r35', 'goto_r32', 'goto_r33', 'goto_r30', 'goto_r27', 'goto_r24', 'goto_r21', 'drop', 'goto_r24', 'goto_r27', 'goto_r30', 'goto_r33', 'goto_r36']
[INFO] [1615043703.266800]: LTL Planner: --- Planning successful! ---
Traceback (most recent call last):
File "/home/sml/catkin_ws/src/ltl_automaton_core/ltl_automaton_planner/nodes/planner_node.py", line 390, in
ltl_planner_node = MainPlanner()
File "/home/sml/catkin_ws/src/ltl_automaton_core/ltl_automaton_planner/nodes/planner_node.py", line 44, in init
self.build_automaton()
File "/home/sml/catkin_ws/src/ltl_automaton_core/ltl_automaton_planner/nodes/planner_node.py", line 157, in build_automaton
self.ltl_planner.optimal()
File "/home/sml/catkin_ws/src/ltl_automaton_core/ltl_automaton_planner/src/ltl_automaton_planner/ltl_tools/ltl_planner.py", line 80, in optimal
self.next_move = self.run.pre_plan[self.index]
IndexError: list index out of range
[ltl_planner-1] process has died [pid 2064, exit code 1, cmd /home/sml/catkin_ws/src/ltl_automaton_core/ltl_automaton_planner/nodes/planner_node.py __name:=ltl_planner __log:=/home/sml/.ros/log/e22ec8f0-7e83-11eb-badc-f48e38896d95/ltl_planner-1.log].
log file: /home/sml/.ros/log/e22ec8f0-7e83-11eb-badc-f48e38896d95/ltl_planner-1*.log
Repeating TS states accepted on parameter in planner
For some specific applications, receiving twice the same TS state could make sense. Right now the hard-coded behavior is to ignore and print a warning when the received TS state is the same as the previous one. It would be interesting to have a parameter to accept or not repeating TS states
Being able to prohibit actions from states in mixed TS
In some cases it could be useful to limit actions from one TS to only a few states of another TS. For example a pick/drop action could only be carried out in some 2D regions.
Possibly optimize IRL
The build_full_margin function could possibly be made more efficient by directly iterating over existing edges as opposed to rebuilding the entire product automaton.
Bug when using TS state of 1 dimension
When using only one TS state model (2d region pose for example), TS state received by the LTL planner (planner.py of ltl_automaton_planner) is not recognized as either part of the TS or as previous state. It probably as something to do with the variable format.
Cells should not be connected
The 2D regions generation script seems to be connecting the last cell of a row with the first cell of the following row.
Initial TS state from agent
The planner has a parameter for getting the initial state from the agent instead of the TS config file. Implementation of this feature has not been completed yet.
Switch to faster graph library
The package relies on NetworkX for graphs. Similar libraries, like Igraph or graph-tool, offer dramatically better perfomances (see https://www.timlrx.com/blog/benchmark-of-popular-graph-network-packages).
Therefor, one possible improvement could be to update the code with one of these libraries.
TS: Being able to limit actions to some states
In some cases it could be useful to limit actions from one TS to only a few states of another TS. For example a pick/drop action could only be carried out in some 2D regions.
Error changing TS state
Previously, running the nexus e.g. irl_test launch file allowed to publish ts_state messages in order to change the TS state. The initial state is r1, unloaded, and a transition to r2, unloaded should be possible. Nevertheless, the error "Received TS states don't match TS state models: 2 initial states and 1 state models" is raised.
All states are trap
In a simple scenario with only 2D regions, all states are considered trap when testing the HIL
One-dimensional state not recognized by planner node
Commit d052b6e reformatted the TS state format to work with more than 2 dimensions. Even with one dimension in the TS, the TS state is now a tuple.
This seems to create an issue with one dimensional TS states, as they are not recognized as being part of the plan when received by the planner from the agent node.
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google โค๏ธ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.