Code Monkey home page Code Monkey logo

europilot's Introduction

europilot

Overview

Europilot is an open source project that leverages the popular Euro Truck Simulator(ETS2) to develop self-driving algorithms.

alt tag alt tag

A convolutional neural network (CNN) controls the steering wheel inside ETS2.

Think of europilot as a bridge between the game environment, and your favorite deep-learning framework, such as Keras or Tensorflow. With europilot, you can capture the game screen input, and programmatically control the truck inside the simulator.

Europilot can be used in one of two ways: training or testing.

For training, europilot can capture the screen input and output a numpy array in realtime, while simultaenously getting the wheel-joystick values. The mapping between the relevant screenshot and the joystick values is written inside a csv file.

In the csv file, each row has the screenshot filename with the joystick values.

For testing, europilot can create a virtual joystick driver that can be recognized inside the game, which can be used to programmatically control the truck. Using this joystick, you can create a real-time inference network that uses the game screen as the input, and outputs the relevant joystick commands, such as steering.

Click to see an example demo on YouTube.

Click to read a blog post on our motivation behind the project.

Getting Started

First, clone the project

git clone [email protected]:marshq/europilot.git

If you want to install europilot locally,

python setup.py install

You can also install prerequisite libraries and do something directly in this project path.

pip install -r requirements.txt
python
>>> import europilot
>>> europilot.__version__
'0.0.1'

To start generating training data, check out generate_training_data.py in the scripts directory.

NOTE that opencv compiled with opencv_contrib module is required to use screen selection gui.

Otherwise, you should specify a screen area in which will be captured by assigning custom Box object to train.Config.BOX.

After the generation of training data is finished, you may want to manually inspect each image to check if unwanted data was recorded. Check clean_up.ipynb for a simple script to remove unwanted data together with the accompanying row in the csv file. Also check out preprocess.ipynb and get_mean_std.ipynb for an example code to preprocess the data.

PilotNet.ipynb is an implementation of Mariusz Bojarski's End to End Learning for Self-Driving Cars, with slight differences. The demo shown above was created with the following notebook.

For running inference on the model, check out inference.ipynb in the scripts directory.

Sample Training Data

For those interested, a driving dataset consisting of 162,495 images is available here (17G).

General Architecture

Europilot hides the complexity of capturing the screen data and joystick data with a simplified interface. Internally, the joystick datastream is parsed into a machine readable format, which for us was a Logitech G27. If you have a different joystick, modify joystick.py to your needs.

We currently have example notebooks implemented with Keras. We hope to add more examples in other popular frameworks.

A virtual joystick driver is implemented by attaching userspace drivers in the kernel, by outputting events into udev. This driver can be recognized inside ETS2. Please note that the driver must be initialized before the game is started, or else it will not show up in the controller page.

Why Euro Truck Simulator 2?

Europilot captures the screen input, therefore technically it is game agnostic. We chose ETS2 as our first target for several reasons.

  • Multi platform support: ETS2 supports Windows, OS X, and Linux. Developers can run the game in a Macbook, or in a Ubuntu workstation. This put ETS2 ahead of games such as GTAV.

  • Realistic graphics/physics: We looked at open source games, but found that the graphics or physics engine was not realistic enough for our use case. ETS2 afterall, has "simulator" inside its title.

  • Fun: Having a large dataset is critical to developing a good model. Therefore you, as a developer, have to play many hours of whatever game you target. Fortunately, ETS2 is fun to play!

Documentation

For now, refer to the README and the source code.

Compatibility

Europilot runs on linux. It supports python 2.6-2.7 and 3.3+.

How to Contribute

Any contribution regarding new feature, bug fix and documentation is welcomed.

But we highly recommend you to read this guideline before you make a pull request.

Coding convention

We generally follow PEP8 with few additional conventions.

  • Line-length can exceed 79 characters, to 100 in case of comments.
  • Always use single-quoted strings, unless a single-quote occurs within the string.
  • Docstrings use double-quote.

Roadmap

Feature roadmap includes

  • Run ETS2 on virtual machine and train/test a model remotely
  • Web leaderboard
  • Capture custom(ex. left, right side cam) vision data while driving in ETS2
  • Support reinforcement learning workflow which is simliar to openai universe
  • Windows support, if there is demand.

License

This project is licensed under the MIT License.

europilot's People

Contributors

daftshady avatar imgyuri 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  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  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  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

europilot's Issues

"Getting Started" should explain how to get started

You know... Let's say I've downloaded ETS2 via Steam and pip installed europilot. Now what? How do I get to what you show in the gif? Do I need to configure something? Do I need to run my own training before I can use it?

is it possible to using [mouse+keyboard] instead of using [Logitech G27] ?

Thanks to you,
I can follow everything of europilot except the joystick [Logitech G27].
Even though this problem, I think that this repository is good change to me.

As mentioned in General Architecture on README.md ,
" If you have a different joystick, modify joystick.py to your needs. "

is it possible to using [mouse+keyboard] instead of using [Logitech G27] ?
Because it's hard to buy the joystick [Logitech G27] for me.

I guess that you have experienced about this joystick
Can you any guide or answer to me about [mouse+keyboard] alternatives ?

If I know the alternatives and implemented, then I will PR on this repository.

----In Korean----

제가 영어가 짧아서 위에 간략하게 적었습니다.
한글로 적어 보겠습니다.

여기 저장소 덕분에
europilot 을 알게 되었고, joystick 에서 문제를 만났지만 좋은 도전이 될 것 같다는 생각에는 변함이 없습니다.

README.md 에서도 언급했지만
[Logitech G27]을 사용할 수 없다면 직접 joystick.py를 수정하라고 명시되어 있습니다.

제가 [Logitech G27]을 구입하려했지만
비싸서 대안으로 [mouse+keyboard]로 사용가능한지 문의드립니다.

제 추측으로는 여기에서 구현한 joystick 을 만들면서 충분히 고민하고 경험을 했을것 같습니다.
[mouse+keyboard]에 대한 참고할만한 가이드 또는 볼만한 링크라도 알고 계시면 답변 부탁드립니다.

만일 제가 대안을 알게 되고, 구현 한다면 여기에 PR 올리도록 하겠습니다.

Unable to create LinuxVirtualJoystick instance on Mac OS Sierra

Hi,
I was trying to use this awesome project on Mac OS Sierra. While following 05.inference, I got stuck here.


NameError                                 Traceback (most recent call last)
<ipython-input-12-2280f39a9193> in <module>()
      3 box = Box(x1, y1, x2, y2)
      4 
----> 5 joy = LinuxVirtualJoystick()

~/tensorflow/lib/python3.6/site-packages/europilot-0.0.1-py3.6.egg/europilot/joystick.py in __init__(self, name, bustype, vendor, product, version, events)
    210             events = (
    211                 # EV_KEY
--> 212                 uinput.BTN_TRIGGER,
    213                 uinput.BTN_THUMB,
    214                 uinput.BTN_THUMB2,

NameError: name 'uinput' is not defined

I went through the source code and found that uinput is imported only for linux. I tried installing python-uinput but looks like it is not supported on Mac.

Is there anything which I am missing? How should I create VirtualJoystick on Mac?

Balancing raw data

Is there any need to undersample data which is available more often than other? (It‘s likely to get more data driving with a steering angle close to 0). Wouldn‘t the trained network go simply straight because of the data? But the only thing I found was the notebook which calculated the mean and std.

Is that enough?
I would be happy for any explanation!

Error excecude generate_traning_data.py windows

I'd like to run it in Windows .
I installed the required libraries such as scipy and opencv-python, but running python generate_training_data.py from the command line will cause an error.
What should I do?

scripts/generate_training_data.py

from europilot.screen import Box
from europilot.train import generate_training_data, Config

class MyConfig(Config):
    # Screen area
    BOX = Box(2, 29, 1282, 797)	# "python select_screen_area.py"
    # Screen capture fps
    DEFAULT_FPS = 20
    DATA_PATH = "C:\europilot\mydata" # Error 'Invalid data path: ', add code
    IMG_PATH = "C:\europilot\mydata"  # Error 'Invalid image path: ', add code

generate_training_data(config=MyConfig)

execude & stack trace

C:\europilot\scripts>python generate_training_data.py
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 106, in spawn_main
    exitcode = _main(fd)
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 106, in spawn_main
    exitcode = _main(fd)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 115, in _main
    prepare(preparation_data)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 226, in prepare
    _fixup_main_from_path(data['init_main_from_path'])
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 278, in _fixup_main_from_path
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 106, in spawn_main
    exitcode = _main(fd)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 115, in _main
    prepare(preparation_data)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 226, in prepare
    _fixup_main_from_path(data['init_main_from_path'])
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 278, in _fixup_main_from_path
    run_name="__mp_main__")
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\runpy.py", line 240, in run_path
    pkg_name=pkg_name, script_name=fname)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\runpy.py", line 96, in _run_module_code
    mod_name, mod_spec, pkg_name, script_name)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\europilot\scripts\generate_training_data.py", line 12, in <module>
    generate_training_data(config=MyConfig)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\site-packages\europilot-0.0.1-py3.5.egg\europilot\train.py", line 223, in generate_training_data
    worker.start()
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\process.py", line 105, in start
    self._popen = self._Popen(self)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\context.py", line 212, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\context.py", line 313, in _Popen
    return Popen(process_obj)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\popen_spawn_win32.py", line 34, in __init__
    prep_data = spawn.get_preparation_data(process_obj._name)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 144, in get_preparation_data
    _check_not_importing_main()
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 137, in _check_not_importing_main
    is not going to be frozen to produce an executable.''')
RuntimeError:
        An attempt has been made to start a new process before the
        current process has finished its bootstrapping phase.

        This probably means that you are not using fork to start your
        child processes and you have forgotten to use the proper idiom
        in the main module:

            if __name__ == '__main__':
                freeze_support()
                ...

        The "freeze_support()" line can be omitted if the program
        is not going to be frozen to produce an executable.
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 106, in spawn_main
    exitcode = _main(fd)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 115, in _main
    prepare(preparation_data)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 226, in prepare
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 106, in spawn_main
    exitcode = _main(fd)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 115, in _main
    prepare(preparation_data)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 226, in prepare
    _fixup_main_from_path(data['init_main_from_path'])
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 278, in _fixup_main_from_path
    run_name="__mp_main__")
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\runpy.py", line 240, in run_path
    pkg_name=pkg_name, script_name=fname)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\runpy.py", line 96, in _run_module_code
    mod_name, mod_spec, pkg_name, script_name)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\europilot\scripts\generate_training_data.py", line 12, in <module>
    run_name="__mp_main__")
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\runpy.py", line 240, in run_path
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 115, in _main
    prepare(preparation_data)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 226, in prepare
    _fixup_main_from_path(data['init_main_from_path'])
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 278, in _fixup_main_from_path
    _fixup_main_from_path(data['init_main_from_path'])
    run_name="__mp_main__")
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\runpy.py", line 240, in run_path
    pkg_name=pkg_name, script_name=fname)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\runpy.py", line 96, in _run_module_code
    mod_name, mod_spec, pkg_name, script_name)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\runpy.py", line 85, in _run_code
    pkg_name=pkg_name, script_name=fname)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\runpy.py", line 96, in _run_module_code
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 278, in _fixup_main_from_path
    exec(code, run_globals)
  File "C:\europilot\scripts\generate_training_data.py", line 12, in <module>
    generate_training_data(config=MyConfig)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\site-packages\europilot-0.0.1-py3.5.egg\europilot\train.py", line 223, in generate_training_data
    generate_training_data(config=MyConfig)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\site-packages\europilot-0.0.1-py3.5.egg\europilot\train.py", line 223, in generate_training_data
    worker.start()
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\process.py", line 105, in start
    mod_name, mod_spec, pkg_name, script_name)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\runpy.py", line 85, in _run_code
    worker.start()
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\process.py", line 105, in start
    self._popen = self._Popen(self)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\context.py", line 212, in _Popen
    self._popen = self._Popen(self)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\context.py", line 212, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\context.py", line 313, in _Popen
    return Popen(process_obj)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\popen_spawn_win32.py", line 34, in __init__
    prep_data = spawn.get_preparation_data(process_obj._name)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 144, in get_preparation_data
    exec(code, run_globals)
  File "C:\europilot\scripts\generate_training_data.py", line 12, in <module>
    generate_training_data(config=MyConfig)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\site-packages\europilot-0.0.1-py3.5.egg\europilot\train.py", line 223, in generate_training_data
    worker.start()
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\process.py", line 105, in start
    _check_not_importing_main()
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 137, in _check_not_importing_main
    is not going to be frozen to produce an executable.''')
RuntimeError:
        An attempt has been made to start a new process before the
        current process has finished its bootstrapping phase.

        This probably means that you are not using fork to start your
        child processes and you have forgotten to use the proper idiom
        in the main module:

            if __name__ == '__main__':
                freeze_support()
                ...

        The "freeze_support()" line can be omitted if the program
        is not going to be frozen to produce an executable.
    run_name="__mp_main__")
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\runpy.py", line 240, in run_path
    pkg_name=pkg_name, script_name=fname)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\runpy.py", line 96, in _run_module_code
    mod_name, mod_spec, pkg_name, script_name)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\europilot\scripts\generate_training_data.py", line 12, in <module>
    generate_training_data(config=MyConfig)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\site-packages\europilot-0.0.1-py3.5.egg\europilot\train.py", line 223, in generate_training_data
    worker.start()
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\process.py", line 105, in start
    self._popen = self._Popen(self)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\context.py", line 212, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\context.py", line 313, in _Popen
    return Popen(process_obj)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\popen_spawn_win32.py", line 34, in __init__
    prep_data = spawn.get_preparation_data(process_obj._name)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 144, in get_preparation_data
    _check_not_importing_main()
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 137, in _check_not_importing_main
    is not going to be frozen to produce an executable.''')
RuntimeError:
        An attempt has been made to start a new process before the
        current process has finished its bootstrapping phase.

        This probably means that you are not using fork to start your
        child processes and you have forgotten to use the proper idiom
        in the main module:

            if __name__ == '__main__':
                freeze_support()
                ...

        The "freeze_support()" line can be omitted if the program
        is not going to be frozen to produce an executable.
    self._popen = self._Popen(self)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\context.py", line 212, in _Popen
    return _default_context.get_context().Process._Popen(process_obj)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\context.py", line 313, in _Popen
    return Popen(process_obj)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\popen_spawn_win32.py", line 34, in __init__
    prep_data = spawn.get_preparation_data(process_obj._name)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 144, in get_preparation_data
    _check_not_importing_main()
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 137, in _check_not_importing_main
    is not going to be frozen to produce an executable.''')
RuntimeError:
        An attempt has been made to start a new process before the
        current process has finished its bootstrapping phase.

        This probably means that you are not using fork to start your
        child processes and you have forgotten to use the proper idiom
        in the main module:

            if __name__ == '__main__':
                freeze_support()
                ...

        The "freeze_support()" line can be omitted if the program
        is not going to be frozen to produce an executable.
    return _default_context.get_context().Process._Popen(process_obj)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\context.py", line 313, in _Popen
    return Popen(process_obj)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\popen_spawn_win32.py", line 34, in __init__
    prep_data = spawn.get_preparation_data(process_obj._name)
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 144, in get_preparation_data
    _check_not_importing_main()
  File "C:\Users\hogehoge\AppData\Local\Programs\Python\Python35\lib\multiprocessing\spawn.py", line 137, in _check_not_importing_main
    is not going to be frozen to produce an executable.''')
RuntimeError:
        An attempt has been made to start a new process before the
        current process has finished its bootstrapping phase.

        This probably means that you are not using fork to start your
        child processes and you have forgotten to use the proper idiom
        in the main module:

            if __name__ == '__main__':
                freeze_support()
                ...

        The "freeze_support()" line can be omitted if the program
        is not going to be frozen to produce an executable.

Virtual controller setup

Hi,

I was wondering what the following sentence mean?
"Please note that the driver must be initialized before the game is started, or else it will not show up in the controller page."

Does it mean that the G27 has to be plugged in so it shows up in the devices?
If yes, is there a way to initialize the driver without actually having G27 ?

Will this work on windows

i am working on similar project but the operating system is windows, Will this code run on windows ?

if not when can we expect windows version ??

car

I was interested in the Euro Pilot. But I have some questions. In a video, a car follows a lane perfectly. But does the car stop when it is red? I would like to ask if it is possible to adjust the distance of the front car. Finally, I wonder if car can reach its destination!

values are not saved in. csv

Hy, i have tried running europilot, and in. csv file pictures were saved but al other values were 0.
when i run joystick. py the output whas UNKNOWN: b'200': some number.

I fixed that, and now it sayd wheel-axis some_number. But it doesnt save the value in. csv

Modifying underlying CNN

Hi,

I am wondering if it is possible to modify the underlying CNN with a different CNN structure (say, adding more filters) and rebuild the package myself to achieve different results from the same training data. Let me know if this is feasible.

Thanks,
Lou

Unable to use keyboard for generating training data

I am unable to generate data using keyboard instead of joystick. What are the steps to be followed for using the code with a keyboard. Is the training data publicly available or will be made available in future.

ETS2 Game EULA

Dear

Thank you for the great work!

You mentioned that:

"With europilot, you can capture the game screen input, and programmatically control the truck inside the simulator."

Is it allowed by the ETS2 EULA?

Best Regards

Truck moves backwards

While testing, he truck just moves in the backward direction and I am unable to understand why this is so.

Windows Version

I don't know about anyone else but I would LOVE a windows version of this since it's my usual OS. Works flawlessly on my virtual machine. I understand Windows support is on your roadmap, but I believe it would be great to get this out to Windows users to use! Cheers.

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.