Giter Club home page Giter Club logo

robot-overlord-app's Introduction

Robot Overlord

workflow coverage Javadoc

Robot Overlord

Preview image

Robot Overlord is 3D control software for robots. It is intended to be easier than ROS. It was started by Marginally Clever Robots, Ltd.

We would love to see your robot run in the app. Please joint our Discord channel and talk live with a human!

Some of the robots it can simulate include:

  • 5 and 6 DOF Robot arms: Sixi 3, AR4, Meca500, and more.
  • Stewart Platforms (flight simulators)
  • 2 legged walkers (bipeds)
  • 4 legged walkers (dog robots)
  • 6 legged walkers (crabs, spiders)

Why

The short answer? ROS is too hard. We want to make it easier.

Our philosophy about Robot Overlord.

Get Started today!

Read our friendly manual. It has pictures with arrows and everything!

Icons

Many app icons provided by http://icons8.com.

robot-overlord-app's People

Contributors

coliss86 avatar dependabot[bot] avatar github-actions[bot] avatar haryunio avatar i-make-robots avatar jackymancs4 avatar jin-han avatar mathieusoysal avatar sleepybishop 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

robot-overlord-app's Issues

OpenGL exception on quit (dev branch)

Exception in thread "AWT-EventQueue-0" com.jogamp.opengl.GLException: Caught NativeWindowException: DC not released: GDISurface[ displayHandle 0x0
, surfaceHandle 0x52011cf4
, size 857x704
, UOB[ OWNS_SURFACE | OWNS_DEVICE | WINDOW_INVISIBLE ]
, WindowsWGLGraphicsConfiguration[DefaultGraphicsScreen[WindowsGraphicsDevice[type .windows, connection decon, unitID 0, handle 0x0, owner false, NullToolkitLock[obj 0x76933a78]], idx 0], pfdID 9, ARB-Choosen true,
requested GLCaps[rgba 8/8/8/1, opaque, accum-rgba 0/0/0/0, dp/st/ms 16/0/4, sample-ext default, one, mono , hw, GLProfile[GL4bc/GL4bc.hw], on-scr[.]],
chosen GLCaps[wgl vid 9 arb: rgba 8/8/8/8, opaque, accum-rgba 0/0/0/0, dp/st/ms 16/0/4, sample-ext default, dbl, mono , hw, GLProfile[GL4bc/GL4bc.hw], offscr[fbo]]]
, surfaceLock <673cfebd, 25dd3b36>[count 1, qsz 0, owner ]
, GDIDummyUpstreamSurfaceHook[pixel 857x704]
, upstreamSurface false ], isWindow false, werr 0, thread: AWT-EventQueue-0 on thread AWT-EventQueue-0
at com.jogamp.opengl.GLException.newGLException(GLException.java:76)
at com.jogamp.opengl.awt.GLJPanel$8.run(GLJPanel.java:1502)
at com.jogamp.opengl.Threading.invoke(Threading.java:223)
at com.jogamp.opengl.awt.GLJPanel.dispose(GLJPanel.java:487)
at com.jogamp.opengl.awt.GLJPanel.removeNotify(GLJPanel.java:688)
at com.jogamp.opengl.awt.GLJPanel.destroy(GLJPanel.java:513)
at com.jogamp.opengl.awt.GLJPanel$2.run(GLJPanel.java:312)
at com.jogamp.nativewindow.awt.AWTWindowClosingProtocol$WindowClosingAdapter.windowClosing(AWTWindowClosingProtocol.java:71)
at java.awt.AWTEventMulticaster.windowClosing(Unknown Source)
at java.awt.Window.processWindowEvent(Unknown Source)
at javax.swing.JFrame.processWindowEvent(Unknown Source)
at java.awt.Window.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: com.jogamp.nativewindow.NativeWindowException: DC not released: GDISurface[ displayHandle 0x0
, surfaceHandle 0x52011cf4
, size 857x704
, UOB[ OWNS_SURFACE | OWNS_DEVICE | WINDOW_INVISIBLE ]
, WindowsWGLGraphicsConfiguration[DefaultGraphicsScreen[WindowsGraphicsDevice[type .windows, connection decon, unitID 0, handle 0x0, owner false, NullToolkitLock[obj 0x76933a78]], idx 0], pfdID 9, ARB-Choosen true,
requested GLCaps[rgba 8/8/8/1, opaque, accum-rgba 0/0/0/0, dp/st/ms 16/0/4, sample-ext default, one, mono , hw, GLProfile[GL4bc/GL4bc.hw], on-scr[.]],
chosen GLCaps[wgl vid 9 arb: rgba 8/8/8/8, opaque, accum-rgba 0/0/0/0, dp/st/ms 16/0/4, sample-ext default, dbl, mono , hw, GLProfile[GL4bc/GL4bc.hw], offscr[fbo]]]
, surfaceLock <673cfebd, 25dd3b36>[count 1, qsz 0, owner ]
, GDIDummyUpstreamSurfaceHook[pixel 857x704]
, upstreamSurface false ], isWindow false, werr 0, thread: AWT-EventQueue-0
at jogamp.nativewindow.windows.GDISurface.unlockSurfaceImpl(GDISurface.java:121)
at jogamp.nativewindow.ProxySurfaceImpl.unlockSurface(ProxySurfaceImpl.java:229)
at jogamp.opengl.GLDrawableImpl.unlockSurface(GLDrawableImpl.java:332)
at jogamp.opengl.GLContextImpl.destroy(GLContextImpl.java:509)
at com.jogamp.opengl.awt.GLJPanel$OffscreenBackend.destroy(GLJPanel.java:1816)
at com.jogamp.opengl.awt.GLJPanel$8.run(GLJPanel.java:1489)
... 32 more

Compliant movement

Robot should respond to human touch - first by moving in the direction of a push, second by stopping movement if an obstacle is encoutered.

Drive to Teach

Requires #29 and #4

Press record
Move robot with on screen or joystick controls
Press stop
new recording done.

Playback recording.
Automated testing that changes to tools do not break recordings?

Camera look at (fly by) feature

Set up a waypoint.
Assign the camera to look at the waypoint.
When the arm moves the orientation controls are ignored because the camera is always turned to look at the waypoint.

rotate the hand based on the wrist matrix

rotate z stays the same - turns the tool at the current pose Z axis.
rotate x turns targetPose around the wrist X axis (the wrist bends forward and back around the target point)
rotate y turns taretPose around a vector that is the cross product of handZ and wristX.

Tooling

Sixi2 needs to be able to pick up a tool or drop a tool. The tool exists as some kind of physical object in the world.

There must be code to find the tool adjacent to the hand when the grip is initiated. Where should this code live? Who calls it?

Sensor Feedback

Read sensor input from the real robot and use that to adjust the FK of the robot.

Support multiple joysticks controlling multiple arms at once?

Right now all input from all joysticks is shared by the one selected robot.
There is no mechanism for selecting two robots with two controllers, or keeping track of which input goes to which robot.
Recordings would also break because they wouldn't understand two joysticks.

Add Input Mapper

Decouple commands that do things from the HID. Somewhere there should be a list of "this action =button x", as you'd see in modern video games.

Does not require #28, but all customizable inputs should run through the InputMapper,

A way to visually move each robot joint

current DH method -> (theta i) rotates along (z i-1) [previous frame]
The dragball is written so that it rotates along the current frame (z i) therefore doesn't work with this method.

method 2 -> (theta i) rotates along (z i) [current frame], it works with dragball but it will require a new transformation matrix.

defer texture loading until (at least) first render frame

Right now a texture cannot be created until the first frame.
What should happen is that an instance of texture is created, but the contents are not loaded until that texture calls render().
This pushes lots of ugly if(isSetup) code into the texture where it belongs.

Joystick support + Maven setup

Maven pom and assembly xml should be set up such that the RO project can be cloned and setup with a minimum of fuss. Ideally without having to manually open a jar file and extract native libraries.

JInput is what we hope to use. We need Maven POM setup help.

CommandSaveAs should use projectFilename

Nothing currently remembers, updates, or uses the project filename. Should probably be a RobotOverlord.StringEntity.

CommandLoad would set projectFilename.
CommandSaveAs would set projectFilename.
CommandSaveAs would use projectFilenameif available.

CommandSave should call CommandSaveAs if no projectFilename.

Part handling

Requires #34

Tool can pick up a model in the world and move it around.

Arm Builder Assistant

Load in your STL files
set up your D-H visually
save your setup as a generic D-H robot to be used any time.

Push to Teach

Requires #29 and #4

Press record
physically move robot
press stop
new recording created

Gamification 1

Requires #34, #35, and #4

Gamify programming tasks for the arm and build scripts to begin self-assembly.

robot/robot collision detection

expand existing robot self-collision detection to support inter-robot collision detection.

Maybe later use this with ModelInWorld to detect grasping? (out of scope for this issue)

Add Joystick Control

Requires #27

Once joystick support is in, joystick control for driving robots or for flying the camera can be a thing.

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.