wil3 / gymfc

A universal flight control tuning framework
http://wfk.io/neuroflight/
MIT License
402 stars 101 forks source link

Running dockerfile in 18.04, steps after building #53

Closed xabierolaz closed 4 years ago

xabierolaz commented 4 years ago

I'm using a brand new computer with 18.04 installed (ubuntu, GNOME desktop)

Tested if my system is able to run dockers, and it seems so.

xabi@xabi:~$ sudo docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/
For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Now I downloaded the gymfc git and run dockerfile, after modifying the line: ENV USER=gymfc to ENV USER=xabi (my current username, maybe not needed)

Some red lines appear, but overall docker gets built after finishing 23 steps

Step 23/23 : ENTRYPOINT ["/bin/bash", "-c"]
 ---> Running in 13ea96072021
Removing intermediate container 13ea96072021
 ---> 2d3428917169
Successfully built 2d3428917169
Successfully tagged gymfc:demo

How can I run the docker and test it with the test_axis or other scripts now? I'm not used to run dockers and dont know where to locate it.

Thanks!

wil3 commented 4 years ago

Nice! The docker stuff is still very experimental but how it currently is set up it allows you to run any command inside container. The README.md has one such example of how this can be done. I haven't been able to get the GUI working though which would make many of the test scripts how they are unusable put supposedly it works on osx. A better use case would be to use the container to run a headless training session.

If you have a clean copy of ubuntu I would suggest just following the commands in this travis file or the docker file to set up the environment.

xabierolaz commented 4 years ago

Thanks @wil3 I've just followed the commands in the travis file from a clean copy of ubuntu 18.04 . What's the last step for? pip install . After following all commands in a clean system, created projects folder virtual environment inside folder git cloned gymfc pip3 install -e .

And still getting the same failed building wheel for gym error Screenshot from 2020-05-07 10-30-13

It's a completely clean ubuntu, followed travis commands and then tried to install gymfc.

Has anyone been successful following these steps in a clean system? Are there any extra packages or anything a clean 18.04 system needs to have in order to get gymfc running?

Thanks

xabierolaz commented 4 years ago

Okay, test_axis does work! Will try the other scripts

All the issues are regarding the test_start script, cant get it to work whatever system Im using, so it must be something wrong with that specific script. Even if I'm getting the dart setanchor error, still working

wil3 commented 4 years ago

Pretty sure the setanchor is normal behaviour. That surprises me test_axis works but test_start does not since test_axis essentially just extends test_start. What happens when you run the script? Are the gzserver and gzclient processes running (could check with ps -aux | grep gzclient)? What is the output when verbose flag is set to True?

There has been a recent change that does not exist in test_axis but is in test_start however. On this line, can you remove .wait() and see if you observe different behavior? Make sure you have installed gymfc installed in development/editable mode (i.e., -e flag in pip3 install -e .) otherwise changes won't take affect. You can put a print statement before the line you change as a sanity check you have it installed the expected way.

xabierolaz commented 4 years ago

both test_start_sim and test_axis working now, didnt change anything though

Confirmed Gymfc was installed in development mode (pip3 install -e .)

Short video of both scripts running https://www.youtube.com/watch?v=mGiiOtZX4m0

test_axis --verbose output: (output is pretty long as it loops SetLinearVel() and SetAngularVel() joint parent warnings for a while)

(env) xabi@xabi:~/projects/gymfc/tests$ python3 test_axis.py ../modules/digitaltwins/nf1/model.sdf --verbose
Sending motor control signals to port  9803
Gazebo Model Path = /home/xabi/local/share/gazebo-10/models::/home/xabi/projects/gymfc/gymfc/envs/assets/gazebo/models:/home/xabi/projects/gymfc/modules/digitaltwins
Gazebo Plugin Path = /home/xabi/local/lib/gazebo-10/plugins::/home/xabi/projects/gymfc/gymfc/envs/assets/gazebo/plugins/build:/home/xabi/projects/gymfc/modules/digitaltwins/nf1/plugins/build
Starting gzserver with process ID= 4749
Roll Left
-----------------------------------
Gazebo multi-robot simulator, version 10.1.0
Copyright (C) 2012 Open Source Robotics Foundation.
Released under the Apache 2 License.
http://gazebosim.org

[Msg] Waiting for master.
[Msg] Connected to gazebo master @ http://127.0.0.1:11346
[Msg] Publicized address: 10.0.2.15
[Dbg] [DARTModel.cc:72] Initializing DART model attitude_control_training_rig
[Dbg] [DARTModel.cc:166] Building DART BodyNode for link 'pivot' and joint 'base_joint'.
[Err] [DARTJoint.cc:195] DARTJoint: SetAnchor is not implemented.
[Dbg] [FlightControllerPlugin.cpp:225] Binding on port 9803
[Dbg] [FlightControllerPlugin.cpp:408] CoT link=battery
[Dbg] [FlightControllerPlugin.cpp:410] Got COT from plugin 0 0 0.058
[Dbg] [FlightControllerPlugin.cpp:413] Num motors 4
[Dbg] [FlightControllerPlugin.cpp:443] Inserting digital twin from SDF, ../modules/digitaltwins/nf1/model.sdf.
[Dbg] [DARTModel.cc:72] Initializing DART model nf1
[Dbg] [DARTModel.cc:128] Building DART BodyNode for link 'frame' with a free joint.
[Dbg] [DARTModel.cc:166] Building DART BodyNode for link 'battery' and joint 'battery_joint'.
[Dbg] [DARTModel.cc:166] Building DART BodyNode for link 'motor_1' and joint 'motor_1_joint'.
[Dbg] [DARTModel.cc:166] Building DART BodyNode for link 'motor_2' and joint 'motor_2_joint'.
[Dbg] [DARTModel.cc:166] Building DART BodyNode for link 'motor_3' and joint 'motor_3_joint'.
[Dbg] [DARTModel.cc:166] Building DART BodyNode for link 'motor_4' and joint 'motor_4_joint'.
[Dbg] [DARTModel.cc:166] Building DART BodyNode for link 'prop_1' and joint 'prop_1_joint'.
[Dbg] [DARTModel.cc:166] Building DART BodyNode for link 'prop_2' and joint 'prop_2_joint'.
[Dbg] [DARTModel.cc:166] Building DART BodyNode for link 'prop_3' and joint 'prop_3_joint'.
[Dbg] [DARTModel.cc:166] Building DART BodyNode for link 'prop_4' and joint 'prop_4_joint'.
[Dbg] [DARTModel.cc:166] Building DART BodyNode for link 'fc_stack' and joint 'fc_stack_joint'.
[Dbg] [gazebo_motor_model.cpp:204] Loading Motor number=0 Subscribed to /aircraft/command/motor
[Dbg] [gazebo_motor_model.cpp:204] Loading Motor number=1 Subscribed to /aircraft/command/motor
[Dbg] [gazebo_motor_model.cpp:204] Loading Motor number=2 Subscribed to /aircraft/command/motor
[Dbg] [gazebo_motor_model.cpp:204] Loading Motor number=3 Subscribed to /aircraft/command/motor
[Dbg] [gazebo_imu_plugin.cpp:55] Loading IMU sensor
[Dbg] [FlightControllerPlugin.cpp:527] Setting link to center battery
[Dbg] [FlightControllerPlugin.cpp:542] Aircraft model fixed to world
[Dbg] [DARTLink.cc:482] DARTLink::SetAngularVel() doesn't make sense if the parent joint is not free joint (6-dof).
[Dbg] [DARTLink.cc:411] DARTLink::SetLinearVel() doesn't make sense if the parent joint is not free joint (6-dof).
[Dbg] [DARTLink.cc:482] DARTLink::SetAngularVel() doesn't make sense if the parent joint is not free joint (6-dof).
[Dbg] [DARTLink.cc:411] DARTLink::SetLinearVel() doesn't make sense if the parent joint is not free joint (6-dof).
[Dbg] [DARTLink.cc:482] DARTLink::SetAngularVel() doesn't make sense if the parent joint is not free joint (6-dof).
[Dbg] [DARTLink.cc:411] DARTLink::SetLinearVel() doesn't make sense if the parent joint is not free joint (6-dof).
[Dbg] [DARTLink.cc:482] DARTLink::SetAngularVel() doesn't make sense if the parent joint is not free joint (6-dof).
[Dbg] [DARTLink.cc:411] DARTLink::SetLinearVel() doesn't make sense if the parent joint is not free joint (6-dof).
[Dbg] [DARTLink.cc:482] DARTLink::SetAngularVel() doesn't make sense if the parent joint is not free joint (6-dof).
[Dbg] [gazebo_motor_model.cpp:263]  Motor 0 force=0 vel=0
[Dbg] [gazebo_motor_model.cpp:263]  Motor 1 force=0 vel=0
[Dbg] [gazebo_motor_model.cpp:263]  Motor 2 force=0 vel=0
[Dbg] [gazebo_motor_model.cpp:263]  Motor 3 force=0 vel=0
[Dbg] [DARTLink.cc:482] DARTLink::SetAngularVel() doesn't make sense if the parent joint is not free joint (6-dof).

[Dbg] [DARTLink.cc:411] DARTLink::SetLinearVel() doesn't make sense if the parent joint is not free joint (6-dof).
[Dbg] [gazebo_motor_model.cpp:263]  Motor 0 force=0 vel=0
[Dbg] [gazebo_motor_model.cpp:263]  Motor 1 force=0 vel=0
[Dbg] [gazebo_motor_model.cpp:263]  Motor 2 force=0 vel=0
[Dbg] [gazebo_motor_model.cpp:263]  Motor 3 force=0 vel=0
Roll=0.0000 Pitch=0.0000 Yaw=0.0000
X=0.0000 Y=0.0000 Z=9.8000
X=1.0000 Y=0.0000 Z=0.0000 W=0.0000
M1=0.0000 M2=0.0000 M3=0.0000 M4=0.0000
[enter] = Step, n = Next Command, q = Quit