gtri / scrimmage Goto Github PK
View Code? Open in Web Editor NEWMulti-Agent Robotics Simulator
Home Page: https://www.scrimmagesim.org
License: Other
Multi-Agent Robotics Simulator
Home Page: https://www.scrimmagesim.org
License: Other
entity-interaction-plugin.rst
references publish_immediate
, which doesn't exist anymore.
Noticed that entity interaction plugins are called twice with t = 0
. This is a bug that could cause problems if needing to run some initialization code within the step function just once and relying on the time to do so.
You can re-create by just printing out t
in any entity interaction plugin and watching the repeated 0.
bool SomeEntityInteraction::step_entity_interaction(std::list<sc::EntityPtr> &ents,
double t, double dt) {
std::cout << "Step Entity Inter " << t << std::endl;
}
It looks like it was introduced by fd0544c
The <start_paused> tag will not work. I tried changing the values inside the xml file and inside a function in a python file that recreated the xml with new tags. Setting it to true or false, it will always starts as paused.
Some plugins provide access to entity pointers, some plugins prefer the contact map, and some use the id_to_ent_map_ implementation. We should decide if we really need these different ways of referencing entities and determine a single interface that works best.
It appears to return nothing:
https://github.com/gtri/scrimmage/blob/master/src/plugins/sensor/RayTrace/RayTrace.cpp#L87
Also, the cars-2d-maze mission depends on the AvoidWalls plugin, and AvoidWalls doesn't work because it depends on RayTrace. If you run cars-2d-mission the cars just ignore the walls.
In CSV.h, write_row
can take a significant percentage of runtime in a simulation. What do you think about converting it to write binaries with protobuf instead and give the option to additionally output in human-readable csv?
The external class, when given a controller whose variableIO output does not match the External class's input vars, will print an error message showing the controller's output variables. However, with SimpleAircraftControllerPID, it seems to display the input vars (altitude, airspeed, bank) instead of the output vars (throttle, roll rate, pitch rate).
E0507 09:47:17.695580374 13049 server_chttp2.c:53] {"created":"@1525700837.693440183","description":"No address added out of total 1 resolved","file":"src/core/ext/transport/chttp2/server/chttp2_server.c","file_line":259,"referenced_errors":[{"created":"@1525700837.693434142","description":"Unable to configure socket","fd":3,"file":"src/core/lib/iomgr/tcp_server_posix.c","file_line":388,"referenced_errors":[{"created":"@1525700837.693421340","description":"OS Error","errno":98,"file":"src/core/lib/iomgr/tcp_server_posix.c","file_line":362,"os_error":"Address already in use","syscall":"bind"}]}]}
I always get this error when trying to run the test_openai.py file. I have tried using the original code (TutorialOpenAI, RLSimple, SimpleLearner from the tutorial) and also I created one of my own but with no avail. None of the created scripts actually runs, either it stays and Simulation Complete or it says 100% at the end of the terminal.
Given a multi-agent scenario, an array of x number of states is received. To be 100% sure, does these values, the states, represent a location in the environment for each agent or a x,y location specifically? I am tyring to eliminated position overlapping between agents.
Thanks!
Commit 88d750b by @esquires seems to cause issues with PyAutonomy. If you try running python-test.xml
, this happens:
$ scrimmage missions/python-test.xml
Segmentation fault (core dumped)
If I checkout 493a79e, where SimpleAircraftControllerPID used the old way of setting desired states, and rebuild everything, it works fine.
Use the Boundary plugin instead when "bases" are needed.
The docker image currently on the site is 2GB compressed and 4.8GB uncompressed.
As far as docker images go, this is huge. I don't have time to work on this issue myself (although I'd be happy to answer questions), but several suggestions to pare it down:
There's a few more good tips in this article, just ignore the snarky title :)
generate-plugin.sh assumes the project name based on the directory name, which is not necessarily the cmake project name. If they're different, it will create a new directory under /include that doesn't match the rest of the project.
For example, if you generate a new autonomy plugin using the generate_plugin.sh script, it still uses the old desired_state_ variable instead of VariableIO.
Hi, I was going through the OpenAI Plugin Tutorial and everything ran/built correctly until I ran test_openai.py
. I received the following error
Traceback (most recent call last):
File "test_openai.py", line 34, in
test_openai()
File "test_openai.py", line 18, in test_openai
env = gym.make('scrimmage-v0')
File "/home/rajan/.local/lib/python2.7/site-packages/gym/envs/registration.py", line 167, in make
return registry.make(id)
File "/home/rajan/.local/lib/python2.7/site-packages/gym/envs/registration.py", line 119, in make
env = spec.make()
File "/home/rajan/.local/lib/python2.7/site-packages/gym/envs/registration.py", line 86, in make
env = cls(**self._kwargs)
IndexError: map::at
Please let me know how I can resolve this error.
Right now autonomies and entity interactions can draw shapes. It would be nice if sensors/network/etc plugins could do so as well.
In some uses of MoveToGoalMS, the goal in defined in the mission xml file as goal='x y z'
. This causes the params dictionary to just contain goal: x, which then causes the goal to be defined as the default 0,0,0 definition. In other cases in the mission xml file, goal is defined as goal='x,y,z'
. This works correctly with the parsing written in MoveToGoalMS and causes the goal to be correctly set.
It seems that the easiest approach is just adding commas to the mission files that aren't being parsed correctly, but since a recent commit just changed the parsing code I wanted to make sure this wasn't a potential change to the parsing that would affect other plugins too.
An example that fails can be seen here:
include/scrimmage/plugins/autonomy/MotorSchemas/MotorSchemas.xml:14: [ MoveToGoalMS gain='1.0' use_initial_heading='true' goal='100 0 0']
The README says that, if I want to specify a particular Python version, I can set Python_ADDITIONAL_VERSIONS when I run cmake. However, this variable doesn't seem to be used in CMakeLists.txt, or anywhere else. Is there some other way to require the use of a specific Python version, and/or is this a planned enhancement? I went into the CMakeCache.txt and modified paths, but would prefer a simpler method if it is feasible. Thanks!
Error occurs when using more than two actors with OpenAI Autonomous plugin.
make docs
fails if sphinx_git is not installed:
$ make docs
Scanning dependencies of target sphinx-docs
[ 50%] Building HTML documentation with Sphinx
Extension error:
Could not import extension sphinx_git (exception: No module named sphinx_git)
docs/CMakeFiles/sphinx-docs.dir/build.make:57: recipe for target 'docs/CMakeFiles/sphinx-docs' failed
make[3]: *** [docs/CMakeFiles/sphinx-docs] Error 1
CMakeFiles/Makefile2:3732: recipe for target 'docs/CMakeFiles/sphinx-docs.dir/all' failed
make[2]: *** [docs/CMakeFiles/sphinx-docs.dir/all] Error 2
CMakeFiles/Makefile2:3675: recipe for target 'docs/CMakeFiles/docs.dir/rule' failed
make[1]: *** [docs/CMakeFiles/docs.dir/rule] Error 2
Makefile:951: recipe for target 'docs' failed
make: *** [docs] Error 2
It looks like running setup/install-binaries.sh
before starting the rest of the scrimmage build process didn't install sphinx_git, but after I ran sudo python2.7 -m pip install sphinx_git
, make docs
worked fine.
Found some text errors in the SimpleCarControllerHeading.xml file:
<p_gain>0.1</p_gain>
<i_gain>0.001</p_gain> <=== i_gain
<d_gain>0.2</p_gain> <=== d_gain
What would you guys think about a button press feature that would allow a custom button press to be configured by the user and trigger a callback in their plugins?
Today When trying to Install SCRIMMAGE Python Bindings and Create an OpenAI Plugin follow the tutorial.
when running the /path/to/scrimmage/python/test/test_openai.py, An error come
"AttributeError: 'ScrimmageEnv' object has no attribute '_render'"
when running the created test_openai.py referred by the tutorial, I cannot make the environment
Failed to open autonomy plugin: SimpleLearner
Failed to parse entity at start position: x=0, y=0
Failed to generate entity
[> ] 0 %
End of Simulation: No Entities Remaining
Simulation Complete
Traceback (most recent call last):
File "/home/lht/scrimmage/my-scrimmage-plugins/test/test_openai.py", line 39, in
test_openai()
File "/home/lht/scrimmage/my-scrimmage-plugins/test/test_openai.py", line 21, in test_openai
env = gym.make('scrimmage-v0')
File "/home/lht/anaconda3/lib/python3.6/site-packages/gym/envs/registration.py", line 167, in make
return registry.make(id)
File "/home/lht/anaconda3/lib/python3.6/site-packages/gym/envs/registration.py", line 119, in make
env = spec.make()
File "/home/lht/anaconda3/lib/python3.6/site-packages/gym/envs/registration.py", line 86, in make
env = cls(**self._kwargs)
File "/home/lht/scrimmage/scrimmage/python/scrimmage/external_control.py", line 101, in init
[self.queues[i]['env'].get() for i in range(num_actors)]
File "/home/lht/scrimmage/scrimmage/python/scrimmage/external_control.py", line 101, in
[self.queues[i]['env'].get() for i in range(num_actors)]
File "/home/lht/anaconda3/lib/python3.6/queue.py", line 164, in get
self.not_empty.wait()
File "/home/lht/anaconda3/lib/python3.6/threading.py", line 295, in wait
waiter.acquire()
This issue is regarding scripts/generate_scenarios.py.
In the qsub function, generate_scenarios.py looks for SCRIMMAGE_ROOT, which is not defined in the current version of scrimmage. Here's the line:
scrimmage_root = os.getenv('SCRIMMAGE_ROOT')
My current workaround is defining SCRIMMAGE_ROOT before the script is run. For instance, in a shell script, I have a line like the following (with python3 for my most recent pull request, python2.7 otherwise):
(export SCRIMMAGE_ROOT=/path/to/scrimmage && source ~/.scrimmage/setup.bash && python3 ${SCRIMMAGE_ROOT}/scripts/generate_scenarios.py --ranges therangesfile.xml --num_runs=100 --nodes '1' /path/to/mission/file.xml /path/to/results/directory)
I haven't found any environment variables in my scrimmage setup that provide the path to scrimmage the way SCRIMMAGE_ROOT is supposed to. Is there a more-correct way to tell generate_scenarios.py where to find the scrimmage repo than my workaround? Thanks!
Hi I'm following this tutorial (http://www.scrimmagesim.org/docs/sphinx/html/tutorials/autonomy-plugin.html ) and run these commands. But when run "make" command I received this error.
~/scrimmage/my-scrimmage-plugins/build$ make
[ 25%] Building CXX object src/plugins/autonomy/ExamplePlugin/CMakeFiles/ExamplePlugin_plugin.dir/ExamplePlugin.cpp.o
In file included from /opt/scrimmage/x86_64-linux-gnu/include/scrimmage/autonomy/Autonomy.h:37:0,
from /home/pinar/scrimmage/my-scrimmage-plugins/include/my-scrimmage-plugins/plugins/autonomy/ExamplePlugin/ExamplePlugin.h:35,
from /home/pinar/scrimmage/my-scrimmage-plugins/src/plugins/autonomy/ExamplePlugin/ExamplePlugin.cpp:33:
/opt/scrimmage/x86_64-linux-gnu/include/scrimmage/plugin_manager/Plugin.h:36:23: fatal error: Eigen/Dense: No such file or directory
compilation terminated.
src/plugins/autonomy/ExamplePlugin/CMakeFiles/ExamplePlugin_plugin.dir/build.make:62: recipe for target 'src/plugins/autonomy/ExamplePlugin/CMakeFiles/ExamplePlugin_plugin.dir/ExamplePlugin.cpp.o' failed
make[2]: *** [src/plugins/autonomy/ExamplePlugin/CMakeFiles/ExamplePlugin_plugin.dir/ExamplePlugin.cpp.o] Error 1
CMakeFiles/Makefile2:207: recipe for target 'src/plugins/autonomy/ExamplePlugin/CMakeFiles/ExamplePlugin_plugin.dir/all' failed
make[1]: *** [src/plugins/autonomy/ExamplePlugin/CMakeFiles/ExamplePlugin_plugin.dir/all] Error 2
Makefile:149: recipe for target 'all' failed
make: *** [all] Error 2
I use 16.04 LTS Ubuntu dual boot.
pip 10.0.1
Python 3.6.3
How can I solve this error?
Thanks.
Travis is reporting false positives when the keyserver does not allow the gpg key to be pulled for ros or the syllogismrxs ppa. Add some robustness to the dockerfile for this situation, possibly just re-trying a few times.
Here is an example failure: https://api.travis-ci.org/v3/job/402279547/log.txt
There are times when a plugin wants to indicate a failure in initialization. Returning a bool rather than void would allow scrimmage to catch this.
Setup a scrimmage user ("scrimmage") in the docker image. Give the user sudo privs, build, install, run tests, with the scrimmage user, not root user.
I followed this tutorial (http://www.scrimmagesim.org/docs/sphinx/html/tutorials/multiple-local-runs.html )
everything is okey when apply this ":~/scrimmage/scrimmage/scripts$ ./scrimmage_runner.sh -t 100 -m ../missions/straight-vs-motorschemas.xml -p 7 " command. Then I received error like this:
Traceback (most recent call last):
File "generate_scenarios.py", line 45, in
import scrimmage.utils as utils
ModuleNotFoundError: No module named 'scrimmage'
Failed to generate scenarios
USAGE:
./scrimmage_runner.sh [OPTIONS]
OPTIONS:
-h Display this usage information
-t Sets the number of simulation runs (tasks)
-m Mission file
-r Ranges file for generating new scenarios
-p Maximum number of parallel runs (tasks)
DEFAULTS:
-t=2 # 2 simulation runs
-p=1 # 1 simulation at-a-time
EXAMPLE:
Run 10 simulations, 4 at-a-time, straight.xml mission,
with test-1.xml ranges file:
./scrimmage_runner.sh -t 10 -p 4 -m ~/scrimmage/scrimmage/missions/straight.xml
-r ~/scrimmage/scrimmage/config/ranges/test-1.xml
I use 16.04 LTS Ubuntu dual boot.
Can you help for this error?
Thanks.
It would be nice if the way parameters are handled could accomplish the following:
It would need to be able to handle nested blocks, global/entity/plugin scoping
As a potential third-party developer, I found it is difficult to realize my designation follow tutorials and API document.
For some mistakes in tutorials and various parameters which i don't know how to use.
eg. the last code segment in Create a Sensor Plugin.
maybe it should be write as below? I can't make sure.
for (auto kv : parent_->sensors()) {
if (kv.first == "MyNoisyState0") {
// Take a measurement from the MyNoisyState sensor
auto msg = kv.second->sense<sc::State>(t);
if (msg) {
own_state = msg->data;
}
}
}
Found a text error in the waypoint_follower.xml mission file:
line 12 reads:
<multi_threaded num_threads="8">false</num_threads>
should read:
<multi_threaded num_threads="8">false</multi_threaded>
Right now shapes are drawn for all the other plugins.
I realized today that, if I have output_type
in my mission file set to summary
, no results folder (i.e. ~/swarm-log/<timestamp_job_task> or ~/.scrimmage/logs/<timestamp_job_task>) gets created and no output files are generated. Results directory creation does still work if output_type
is frames
or all
, and possibly others (haven't tested more options yet). The last time a mission file with output_type
of summary
generated results as expected was 11/16/2017.
Missing tags (grid_spacing, grid_size)
Missing enum values (“all_dead”?)
Valid list delimiters for tags that use them (spaces, commas, etc)
<entity_interaction> (make sure it is up-to-date)
<enable_screenshots> attributes missing units and/or how they relate to simulation start/end
Formatting of values (latitude/longitude format)
Default values for all tags/attributes
Whether or not the tag is required to be there
To my understanding, by having mutliple actors set up, each actor will run its own instance of autonomy. Moving forward to the script, I get each actor new state given a respective action from the environment. On the other hand, I receive a reward that reflects the reward of both actors.
I want to share information between multiple actors while they run in the same environment, is this possible?
Thanks for the help!
Scrimmage's quaternion does not inherit operator overloads from its base class, so the following code results in a compiler error:
scrimmage::Quaternion q, p;
scrimmage::State state;
state.set_quat(q * p);
Error msg:
error: no matching function for call to ‘scrimmage::State::set_quat(Eigen::Quaternion<double>)’
note: candidate: void scrimmage::State::set_quat(const scrimmage::Quaternion&)
XML tags like inside the entity parameter wont actually change the color of the entity, it will always remain blue, which I beleive is the original color. Also, setting start_paused inside the parameters to false will not work, it will always start the simmulation in paused mode.
This may be a problem on our side, but doing a fresh install on another computer also reporst this problem when running straight.xml. How can this problem be solved?
[libprotobuf FATAL google/protobuf/stubs/common.cc:78] This program was compiled against version 2.6.1 of the Protocol Buffer runtime library, which is not compatible with the installed version (3.3.0). Contact the program author for an update. If you compiled the program yourself, make sure that your headers are from the same version of Protocol Buffers as your link-time library. (Version verification failed in "/build/mir-O8_xaj/mir-0.26.3+16.04.20170605/obj-x86_64-linux-gnu/src/protobuf/mir_protobuf.pb.cc".)
terminate called after throwing an instance of 'google::protobuf::FatalException'
The protobuf version reported by scrimmage is 3.3.0.
Thanks!
Hi, one more issue with the OpenAI plugin. I tried to add 2 ranges to the continuous_extrema list:
action_space.continuous_extrema.push_back(std::make_pair(-inf,inf)); action_space.continuous_extrema.push_back(std::make_pair(-inf,inf));
When I run openai.py, I get the following error:
File "test_openai.py", line 46, in
test_openai()
File "test_openai.py", line 18, in test_openai
env = gym.make('scrimmage-v0')
File "/home/rajan/.local/lib/python2.7/site-packages/gym/envs/registration.py", line 167, in make
return registry.make(id)
File "/home/rajan/.local/lib/python2.7/site-packages/gym/envs/registration.py", line 130, in make
max_episode_seconds=env.spec.max_episode_seconds)
File "/home/rajan/.local/lib/python2.7/site-packages/gym/wrappers/time_limit.py", line 6, in init
super(TimeLimit, self).init(env)
File "/home/rajan/.local/lib/python2.7/site-packages/gym/core.py", line 243, in init
self.action_space = self.env.action_space
TypeError: Unable to convert function return value to a Python type! The signature was
(self: scrimmage.bindings.py_bindings.ScrimmageOpenAIEnv) -> object
Right now we have a single and double integrator model but higher order models should be available as well. Further, the double integrator model has extra stuff in it that could inherit from this model.
By setting the number of agents and xml file in the python file, we can get the independant observations for each agent, given an independant action for each agent. However, a reward is return but in the form of a accumulative reward, meaning that the reward reflects the amount of reward of all agents together. I tried different settings (combine actors, global sensors) but it will always return a cumulative reward.
Is there a way that the rewards can be recived as a array like the observation values?
This would be a simple utility that wraps generate scenarios and outputs optimal parameters.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.