Git Product home page Git Product logo

scrimmage's Issues

Entity interaction plugin stepped twice with t = 0

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

Mission <start_paused> Tag

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.

Consistent contact/entity references from all plugins

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.

write csv data using protobuf

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?

External class bug with error message on variableIO mismatch

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).

Network/Port Problems

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.

Multi-Agent State/Observation

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!

VariableIO seems incompatible with Python bindings

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.

Reduce docker image size

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:

  • Use multi-stage builds to only include the files that are actually needed to run the program
  • Install only the bare minium of dependencies to run the program. What's ROS used for? Is the entirety of ROS needed here, or just 2-3 smaller components?
  • Each layer adds size to the image, and can never remove size. Therefore, only create layers on logical boundaries, and cleanup the messes you've created in the layer that you create them (e.x. delete your apt cache in same layer that you ran apt)

There's a few more good tips in this article, just ignore the snarky title :)

generate_plugin.sh has become dated

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.

OpenAI Plugin Error

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.

add shapes to plugin base

Right now autonomies and entity interactions can draw shapes. It would be nice if sensors/network/etc plugins could do so as well.

MoveToGoalMS goal Parsing Inconsistency

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']

Python version specification

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!

make docs sphinx_git dependency

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.

add custom button press feature

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?

OpenAI confuse

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()

generate_scenarios cannot find SCRIMMAGE_ROOT

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!

Error: Create an Autonomy Plugin

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.

allow bool return in init

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 non-root user in docker image

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.

ModuleNotFoundError: No module named 'scrimmage'

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.

update parameters

It would be nice if the way parameters are handled could accomplish the following:

  • allow params to be changed mid-simulation
  • allow saving of new params to input files
  • allow re-use of params across plugins and entities
  • eliminate the need to save all params in the init function to member functions
  • allow scrimmage to interact more easily with a ros param server

It would need to be able to handle nested blocks, global/entity/plugin scoping

mistakes in some codes of tutorials

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;
        }
    }
}

Text error in missions/waypoint_follower.xml file

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>

No output generated if output type is summary

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.

Update Mission XML Documentation

  •      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
    

Multi-Agent Simulation

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!

quaternion doesn't properly inherit operator overloads

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&)

Some xml tags inside the mission files wont work

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.

Running Missions File

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!

OpenAI Continuous Action Issue

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

create an integrator model

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.

Multi-Agent Independant Interactions

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?

add parameter optimizer

This would be a simple utility that wraps generate scenarios and outputs optimal parameters.

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.