SlideShare ist ein Scribd-Unternehmen logo
1 von 18
Downloaden Sie, um offline zu lesen
NASA Ames uses Eclipse RCP for
real-time situational awareness
        of remote robots
 Tamar Cohen
 Intelligent Robotics Group
 NASA Ames Research Center
Tamar Cohen
Intelligent Robotics Group
NASA Ames Research Center
Screenshot of VERVE




 NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots   3
The Fun Parts: How we did it
This presentation will explore implementation details of the following:
•        Java 3D View based on Ardor3D
•        Communicating with robots
•        Complex KML loading based on EMF
•        Generating UI components with the databinding framework
•        Real-time telemetry display




 NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots   4
Java 3D View Built on Ardor3D
The “VERVE 3D View” is an
  Eclipse view with contents
  rendered by the Java
  Ardor3D libraries which we
  have wrapped in a plug-in.
Ardor3D provides user
   interface support within the
   view, eg the compass rose.
Ardor3D provides hooks for
   mouse control and keyboard
   input, along with typical
   controls for a 3D graphics
   library (ie cameras, scene,
   lighting, etc)



                                                                 A model of K10Black

    NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots    5
Robots in the Scene Graph
Ardor3D scene graph is comprised of
   Spatials, which define geometry
   and rendering settings
  Nodes, which are spatials with
  parents and children
For each type and instance of a robot,
   we create a RobotNode (extends
   Node) which contains nodes that
   represent its model (3D object) and
   child nodes for representation of
   scientific data
We have a reference between our
  conceptual representation of a                                          A model of K-REX
  robot and each of its parts, and the
  Ardor3D nodes which represent
  each concept.


  NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots            6
The Scene Graph Tree View
   We have a standard Eclipse view
      which includes a tree populated
      with the contents of the scene
      graph. This tree can be
      extremely deep.
   Since elements are dynamically
      added to and removed from the
      3D scene, this tree is actually
      populated with WeakReferences,
      to support garbage collection.
   When various events happen, the
     tree refreshes asynchronously.
   Checkboxes show and hide 3D
      models in the Ardor3D view
                                                                  Scene Graph View




 NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots     7
Connecting the Canvas to Ardor3D
Within our createPartControl for the VERVE 3D View, we make explicit calls to
      use Ardor3D to render the contents of the canvas
public void createPartControl(Composite parent) {

   VerveScene scene = getScene(getSceneName()); // an Ardor3D scene graph

   LwjglCanvasRenderer canvasRenderer = new LwjglCanvasRenderer(scene); // an LWJGL Ardor3D renderer

   final GLData glData = new GLData(); //SWT class

   m_a3dCanvas = new Ardor3dCanvas(canvasRenderer, parent, SWT.NONE, glData);

   // Ardor3dCanvas extends GLCanvas implements com.ardor3d.framework.Canvas, which defines the
   Ardor3D “View,” owns the rendering phase, controls all interactions with renderer

   Ardor3D.getFrameHandler().addCanvas(m_a3dCanvas);

   // get Ardor3D frame handler from singleton to do the work needed in a given frame

   Ardor3D.getLogicalLayerUpdater().registerLogicalLayer(m_a3dCanvas.getLogicalLayer());

   // register for triggers for updates to scene

    scene.addScenePickListener(this);

   // our own construct for pick delegation handling – we set the camera to look at what was picked

   }



  NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots                      8
Rendering
We have data coming in too fast to render, so we throttle that back:
timer = new Timer(); // an Ardor3D timer which uses System.nanoTime

frameHandler   = new FrameHandler(timer);

frameHandler.addUpdater(new LogicalLayerUpdater());

frameHandler.addUpdater(new CameraControlUpdater()); // we expose camera controls in the Eclipse UI

renderUpdateThread = new RenderUpdateThread(applicationPlugin, frameHandler, timer);

renderUpdateThread.start();

Our very simple render update thread runs as follows:
 Once the system and display are ready (until the display is disposed)
 Check the time that the last change occurred;
 if the elapsed time is enough, asynchronously run an update
 frameHandler.updateFrame();




  NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots                     9
Communicating With Robots
We use CORBA (Common Object Request Broker Architecture, a standard)
  to communicate with our robots. While we could command the robots,
  we primarily monitor them from VERVE.
CORBA uses IDL (Interface Definition Language) to express classes and
  interfaces. Via IDL, we have compatible classes passed between the
  robots and our Java classes.
CORBA uses ORBs (Object Request Brokers) to connect to and
  communicate with the robots.
We expose CORBA settings through a preferences page, and have a CORBA
  status view to support reconnecting and showing status.
With CORBA we can communicate with more than one robot at a time.




                CORBA Preferences
                                                                      Multiple CORBA channels

   NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots              10
Managing CORBA Events
CORBA Events come over the CORBA channel.
We have enumerated the types of events we expect (KnEvent)
public class KnEvent {
 public enum Type {
   Battery          ("Battery.SBattery",   Sbattery.class,      SbatteryHelper.class),
   PoseEstimate     ("Pose.SPoseEstimate", SPoseEstimate.class, SPoseEstimateHelper.class);

  public String     type_name;
  public final Class dataType;
  public final Class eventHelper;
  ...
We have listeners for our events.
public interface KnEventListener {
   public void knEventReceived(KnRover.Name source, KnEvent.Type type, Object msg, String type_name);

We have an event collector for each robot
   collector = new KnEventCollectorAsapQueue(rover);
   Orb.addListener(collector);


We expose the possible events to subscribe to
in the preferences.


                                                                             Event Subscription Preferences



  NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots                             11
Binding 3D Node Updates to Events
Example: connect events coming in with transformations for 3D nodes.
public class K10PoseProvider implements IPoseProvider, KnEventListener {
   final KnRover.Name m_knRoverName;
   Vector3             m_xyz       = new Vector3();
   Vector3             m_rpy       = new Vector3();

 public void connectToTelemetry() {
   KnEventCollector telemetry = KnEventCollector.instance(m_knRoverName);
   telemetry.addListener(this, new KnEvent.Type[{KnEvent.Type.PoseEstimate});
 }

 // when a new event is received, handle it; cache the latest information
 public synchronized void knEventReceived(KnRover.Name source, KnEvent.Type type, Object msg) {
   switch (type) {
     case PoseEstimate:         m_poseEstimate = (SPoseEstimate)msg; break;
     …

// When it comes time to update the frame, our conceptual representation of a robot part will get the
    latest information from the provider, and use it to update the 3D Model if it is visible and dirty.
public abstract class K10PartOrientationSensor extends AbstractRobotPart {
 public void handleFrameUpdate(long currentTime) {
 // if visible, update transform
    if(isActive()) {
        getK10Robot().getK10PoseProvider().getCenterXyz(m_xyz);
        m_ring.setTranslation(m_xyz);
        if(isDirty()) {
            synchronized(m_rpy) {
                m_ring.setRotation(K10PoseProvider.rotFromRpy(m_rpy, m_rot));
            }
            setDirty(false);
        }

   NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots                  12
Loading KML Files
KML is an XML file format to store geographic
  data used by Google Earth. Our scientists
  are used to working with KML; we support
  it for base mapping and markup.
We have created an EMF (Eclipse Modeling
  Framework) representation of the KML
  format. After a file is loaded, we construct
  the Ardor3D spatials
KML includes network links, which reference
  external or remote files and reload at
  specified intervals. We support this,
  updating our 3D geometry based on newly
  loaded KML.




   NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots   13
Generating UI with Databinding
VERVE is designed to support different
robots, which will have different models
and instrumentation.

We generate user interface controls
bound to these models based the Java
classes representing robot concepts.
We use reflection to explore classes.
for (Method method : m_class.getMethods()){
 if (MethodUtil.isGetMethod(method) ||
    MethodUtil.isIsMethod(method)){
   createField(method, container);


We have created custom Java                               Changes made with these widgets
annotations to control generated                          will automatically be reflected in
databound widgets, for example:                           the Ardor3D view.
@ReadOnly
public Vector3 getVector3() {
  return m_vector3;
}




 NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots               14
Real-time Telemetry Views




                                          Highlight when voltage = minimum
                                           Show when a system is off or on



Robot Health – a high value can be good
  (battery charge), or bad (CPU level)
                                                                               Artificial Horizon shows Pitch and Roll

Huge amounts of telemetry are constantly streaming in from the robots.
VERVE presents this information in a clear way, so users can quickly
  understand the information and know where to look for problems.
Warning and error thresholds and colors are set for each type of telemetry.

     NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots                              15
Telemetry View Implementation
We have created a TableBarListener to handle drawing informative color
  blocks in table cells
public class TableBarListener implements Listener {
  public void handleEvent(Event event) {
    GC gc = event.gc;

   // use reflection to get the percentage value for the data for the cell
   percent = (Number) getPercentMethod().invoke(getMethodContainer(), item.getData());

   // make the string pretty
   String percentString = getFormatter().format(percent);

   // look up the color based on thresholds set for this table bar listener
   Color barColor = getBarColor(percent);

   // figure out how wide the bar should be
   int width = (getBarColumn().getWidth() - 2) * (percent.intValue()) / m_spread;

  // use the graphics context to fill the rectangle
  gc.fillRectangle(event.x-1, event.y, width, event.height-2);

  // draw the text of the percentage
  gc.drawText(percentString, event.x+2, event.y+offset, true);




  NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots        16
More Information
  VERVE for Haughton Mars Project (HMP) 2010
  http://www.youtube.com/watch?v=bA8GkyK0ZpQ

  Intelligent Robotics Group at NASA Ames Research Center
  http://irg.arc.nasa.gov

  Blog about HMP 2010
  http://lunarscience.nasa.gov/robots/2010/

  HMP
  http://www.marsonearth.org/

  Ardor3D
  http://ardor3d.com


 NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots   17
Questions?




                               Intelligent Robotics Group
                              Intelligent Systems Division
                             NASA Ames Research Center

                                   http://irg.arc.nasa.gov


 NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots   18

Weitere ähnliche Inhalte

Ähnlich wie Case Study: NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots

Hadoop institutes in Bangalore
Hadoop institutes in BangaloreHadoop institutes in Bangalore
Hadoop institutes in Bangaloresrikanthhadoop
 
VideoMR - A Map and Reduce Framework for Real-time Video Processing
VideoMR - A Map and Reduce Framework for Real-time Video ProcessingVideoMR - A Map and Reduce Framework for Real-time Video Processing
VideoMR - A Map and Reduce Framework for Real-time Video ProcessingMatthias Trapp
 
Apache Cassandra in Bangalore - Cassandra Internals and Performance
Apache Cassandra in Bangalore - Cassandra Internals and PerformanceApache Cassandra in Bangalore - Cassandra Internals and Performance
Apache Cassandra in Bangalore - Cassandra Internals and Performanceaaronmorton
 
Progscon 2017: Taming the wild fronteer - Adventures in Clojurescript
Progscon 2017: Taming the wild fronteer - Adventures in ClojurescriptProgscon 2017: Taming the wild fronteer - Adventures in Clojurescript
Progscon 2017: Taming the wild fronteer - Adventures in ClojurescriptJohn Stevenson
 
Enhance your world with ARKit. UA Mobile 2017.
Enhance your world with ARKit. UA Mobile 2017.Enhance your world with ARKit. UA Mobile 2017.
Enhance your world with ARKit. UA Mobile 2017.UA Mobile
 
Beginning direct3d gameprogramming09_shaderprogramming_20160505_jintaeks
Beginning direct3d gameprogramming09_shaderprogramming_20160505_jintaeksBeginning direct3d gameprogramming09_shaderprogramming_20160505_jintaeks
Beginning direct3d gameprogramming09_shaderprogramming_20160505_jintaeksJinTaek Seo
 
Giovanni Laquidara - Hello ARCore - Codemotion Milan 2017
Giovanni Laquidara - Hello ARCore - Codemotion Milan 2017Giovanni Laquidara - Hello ARCore - Codemotion Milan 2017
Giovanni Laquidara - Hello ARCore - Codemotion Milan 2017Codemotion
 
Swarm.js: реактивная синхронизация данных — Виктор Грищенко — MoscowJS 13
Swarm.js: реактивная синхронизация данных — Виктор Грищенко — MoscowJS 13Swarm.js: реактивная синхронизация данных — Виктор Грищенко — MoscowJS 13
Swarm.js: реактивная синхронизация данных — Виктор Грищенко — MoscowJS 13MoscowJS
 
World wind java sdk in progess
World wind java sdk in progessWorld wind java sdk in progess
World wind java sdk in progessRaffaele de Amicis
 
Apache Con NA 2013 - Cassandra Internals
Apache Con NA 2013 - Cassandra InternalsApache Con NA 2013 - Cassandra Internals
Apache Con NA 2013 - Cassandra Internalsaaronmorton
 
Copy of repast javagettingstarted
Copy of repast javagettingstartedCopy of repast javagettingstarted
Copy of repast javagettingstartedNimish Verma
 
Pertemuan 6-2-sequence-diagram
Pertemuan 6-2-sequence-diagramPertemuan 6-2-sequence-diagram
Pertemuan 6-2-sequence-diagramAbi Bobon
 
Embed the nasa world wind java sdk in eclipse
Embed the nasa world wind java sdk in eclipseEmbed the nasa world wind java sdk in eclipse
Embed the nasa world wind java sdk in eclipseMohammad Fajar
 
Using spark 1.2 with Java 8 and Cassandra
Using spark 1.2 with Java 8 and CassandraUsing spark 1.2 with Java 8 and Cassandra
Using spark 1.2 with Java 8 and CassandraDenis Dus
 
Dusting the globe: analysis of NASA World Wind project
Dusting the globe: analysis of NASA World Wind projectDusting the globe: analysis of NASA World Wind project
Dusting the globe: analysis of NASA World Wind projectPVS-Studio
 

Ähnlich wie Case Study: NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots (20)

Hadoop institutes in Bangalore
Hadoop institutes in BangaloreHadoop institutes in Bangalore
Hadoop institutes in Bangalore
 
VideoMR - A Map and Reduce Framework for Real-time Video Processing
VideoMR - A Map and Reduce Framework for Real-time Video ProcessingVideoMR - A Map and Reduce Framework for Real-time Video Processing
VideoMR - A Map and Reduce Framework for Real-time Video Processing
 
Apache Cassandra in Bangalore - Cassandra Internals and Performance
Apache Cassandra in Bangalore - Cassandra Internals and PerformanceApache Cassandra in Bangalore - Cassandra Internals and Performance
Apache Cassandra in Bangalore - Cassandra Internals and Performance
 
Progscon 2017: Taming the wild fronteer - Adventures in Clojurescript
Progscon 2017: Taming the wild fronteer - Adventures in ClojurescriptProgscon 2017: Taming the wild fronteer - Adventures in Clojurescript
Progscon 2017: Taming the wild fronteer - Adventures in Clojurescript
 
Enhance your world with ARKit. UA Mobile 2017.
Enhance your world with ARKit. UA Mobile 2017.Enhance your world with ARKit. UA Mobile 2017.
Enhance your world with ARKit. UA Mobile 2017.
 
Hadoop 3
Hadoop 3Hadoop 3
Hadoop 3
 
Hadoop 2
Hadoop 2Hadoop 2
Hadoop 2
 
Beginning direct3d gameprogramming09_shaderprogramming_20160505_jintaeks
Beginning direct3d gameprogramming09_shaderprogramming_20160505_jintaeksBeginning direct3d gameprogramming09_shaderprogramming_20160505_jintaeks
Beginning direct3d gameprogramming09_shaderprogramming_20160505_jintaeks
 
Giovanni Laquidara - Hello ARCore - Codemotion Milan 2017
Giovanni Laquidara - Hello ARCore - Codemotion Milan 2017Giovanni Laquidara - Hello ARCore - Codemotion Milan 2017
Giovanni Laquidara - Hello ARCore - Codemotion Milan 2017
 
Swarm.js: реактивная синхронизация данных — Виктор Грищенко — MoscowJS 13
Swarm.js: реактивная синхронизация данных — Виктор Грищенко — MoscowJS 13Swarm.js: реактивная синхронизация данных — Виктор Грищенко — MoscowJS 13
Swarm.js: реактивная синхронизация данных — Виктор Грищенко — MoscowJS 13
 
Swarm@MoscowJS
Swarm@MoscowJSSwarm@MoscowJS
Swarm@MoscowJS
 
World wind java sdk in progess
World wind java sdk in progessWorld wind java sdk in progess
World wind java sdk in progess
 
Apache Con NA 2013 - Cassandra Internals
Apache Con NA 2013 - Cassandra InternalsApache Con NA 2013 - Cassandra Internals
Apache Con NA 2013 - Cassandra Internals
 
The Hadoop Ecosystem
The Hadoop EcosystemThe Hadoop Ecosystem
The Hadoop Ecosystem
 
Copy of repast javagettingstarted
Copy of repast javagettingstartedCopy of repast javagettingstarted
Copy of repast javagettingstarted
 
hadoop.ppt
hadoop.ppthadoop.ppt
hadoop.ppt
 
Pertemuan 6-2-sequence-diagram
Pertemuan 6-2-sequence-diagramPertemuan 6-2-sequence-diagram
Pertemuan 6-2-sequence-diagram
 
Embed the nasa world wind java sdk in eclipse
Embed the nasa world wind java sdk in eclipseEmbed the nasa world wind java sdk in eclipse
Embed the nasa world wind java sdk in eclipse
 
Using spark 1.2 with Java 8 and Cassandra
Using spark 1.2 with Java 8 and CassandraUsing spark 1.2 with Java 8 and Cassandra
Using spark 1.2 with Java 8 and Cassandra
 
Dusting the globe: analysis of NASA World Wind project
Dusting the globe: analysis of NASA World Wind projectDusting the globe: analysis of NASA World Wind project
Dusting the globe: analysis of NASA World Wind project
 

Kürzlich hochgeladen

WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfSeasiaInfotech2
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesZilliz
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 

Kürzlich hochgeladen (20)

WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
The Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdfThe Future of Software Development - Devin AI Innovative Approach.pdf
The Future of Software Development - Devin AI Innovative Approach.pdf
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Vector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector DatabasesVector Databases 101 - An introduction to the world of Vector Databases
Vector Databases 101 - An introduction to the world of Vector Databases
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 

Case Study: NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots

  • 1. NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots Tamar Cohen Intelligent Robotics Group NASA Ames Research Center
  • 2. Tamar Cohen Intelligent Robotics Group NASA Ames Research Center
  • 3. Screenshot of VERVE NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots 3
  • 4. The Fun Parts: How we did it This presentation will explore implementation details of the following: • Java 3D View based on Ardor3D • Communicating with robots • Complex KML loading based on EMF • Generating UI components with the databinding framework • Real-time telemetry display NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots 4
  • 5. Java 3D View Built on Ardor3D The “VERVE 3D View” is an Eclipse view with contents rendered by the Java Ardor3D libraries which we have wrapped in a plug-in. Ardor3D provides user interface support within the view, eg the compass rose. Ardor3D provides hooks for mouse control and keyboard input, along with typical controls for a 3D graphics library (ie cameras, scene, lighting, etc) A model of K10Black NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots 5
  • 6. Robots in the Scene Graph Ardor3D scene graph is comprised of Spatials, which define geometry and rendering settings Nodes, which are spatials with parents and children For each type and instance of a robot, we create a RobotNode (extends Node) which contains nodes that represent its model (3D object) and child nodes for representation of scientific data We have a reference between our conceptual representation of a A model of K-REX robot and each of its parts, and the Ardor3D nodes which represent each concept. NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots 6
  • 7. The Scene Graph Tree View We have a standard Eclipse view which includes a tree populated with the contents of the scene graph. This tree can be extremely deep. Since elements are dynamically added to and removed from the 3D scene, this tree is actually populated with WeakReferences, to support garbage collection. When various events happen, the tree refreshes asynchronously. Checkboxes show and hide 3D models in the Ardor3D view Scene Graph View NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots 7
  • 8. Connecting the Canvas to Ardor3D Within our createPartControl for the VERVE 3D View, we make explicit calls to use Ardor3D to render the contents of the canvas public void createPartControl(Composite parent) { VerveScene scene = getScene(getSceneName()); // an Ardor3D scene graph LwjglCanvasRenderer canvasRenderer = new LwjglCanvasRenderer(scene); // an LWJGL Ardor3D renderer final GLData glData = new GLData(); //SWT class m_a3dCanvas = new Ardor3dCanvas(canvasRenderer, parent, SWT.NONE, glData); // Ardor3dCanvas extends GLCanvas implements com.ardor3d.framework.Canvas, which defines the Ardor3D “View,” owns the rendering phase, controls all interactions with renderer Ardor3D.getFrameHandler().addCanvas(m_a3dCanvas); // get Ardor3D frame handler from singleton to do the work needed in a given frame Ardor3D.getLogicalLayerUpdater().registerLogicalLayer(m_a3dCanvas.getLogicalLayer()); // register for triggers for updates to scene scene.addScenePickListener(this); // our own construct for pick delegation handling – we set the camera to look at what was picked } NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots 8
  • 9. Rendering We have data coming in too fast to render, so we throttle that back: timer = new Timer(); // an Ardor3D timer which uses System.nanoTime frameHandler = new FrameHandler(timer); frameHandler.addUpdater(new LogicalLayerUpdater()); frameHandler.addUpdater(new CameraControlUpdater()); // we expose camera controls in the Eclipse UI renderUpdateThread = new RenderUpdateThread(applicationPlugin, frameHandler, timer); renderUpdateThread.start(); Our very simple render update thread runs as follows: Once the system and display are ready (until the display is disposed) Check the time that the last change occurred; if the elapsed time is enough, asynchronously run an update frameHandler.updateFrame(); NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots 9
  • 10. Communicating With Robots We use CORBA (Common Object Request Broker Architecture, a standard) to communicate with our robots. While we could command the robots, we primarily monitor them from VERVE. CORBA uses IDL (Interface Definition Language) to express classes and interfaces. Via IDL, we have compatible classes passed between the robots and our Java classes. CORBA uses ORBs (Object Request Brokers) to connect to and communicate with the robots. We expose CORBA settings through a preferences page, and have a CORBA status view to support reconnecting and showing status. With CORBA we can communicate with more than one robot at a time. CORBA Preferences Multiple CORBA channels NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots 10
  • 11. Managing CORBA Events CORBA Events come over the CORBA channel. We have enumerated the types of events we expect (KnEvent) public class KnEvent { public enum Type { Battery ("Battery.SBattery", Sbattery.class, SbatteryHelper.class), PoseEstimate ("Pose.SPoseEstimate", SPoseEstimate.class, SPoseEstimateHelper.class); public String type_name; public final Class dataType; public final Class eventHelper; ... We have listeners for our events. public interface KnEventListener { public void knEventReceived(KnRover.Name source, KnEvent.Type type, Object msg, String type_name); We have an event collector for each robot collector = new KnEventCollectorAsapQueue(rover); Orb.addListener(collector); We expose the possible events to subscribe to in the preferences. Event Subscription Preferences NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots 11
  • 12. Binding 3D Node Updates to Events Example: connect events coming in with transformations for 3D nodes. public class K10PoseProvider implements IPoseProvider, KnEventListener { final KnRover.Name m_knRoverName; Vector3 m_xyz = new Vector3(); Vector3 m_rpy = new Vector3(); public void connectToTelemetry() { KnEventCollector telemetry = KnEventCollector.instance(m_knRoverName); telemetry.addListener(this, new KnEvent.Type[{KnEvent.Type.PoseEstimate}); } // when a new event is received, handle it; cache the latest information public synchronized void knEventReceived(KnRover.Name source, KnEvent.Type type, Object msg) { switch (type) { case PoseEstimate: m_poseEstimate = (SPoseEstimate)msg; break; … // When it comes time to update the frame, our conceptual representation of a robot part will get the latest information from the provider, and use it to update the 3D Model if it is visible and dirty. public abstract class K10PartOrientationSensor extends AbstractRobotPart { public void handleFrameUpdate(long currentTime) { // if visible, update transform if(isActive()) { getK10Robot().getK10PoseProvider().getCenterXyz(m_xyz); m_ring.setTranslation(m_xyz); if(isDirty()) { synchronized(m_rpy) { m_ring.setRotation(K10PoseProvider.rotFromRpy(m_rpy, m_rot)); } setDirty(false); } NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots 12
  • 13. Loading KML Files KML is an XML file format to store geographic data used by Google Earth. Our scientists are used to working with KML; we support it for base mapping and markup. We have created an EMF (Eclipse Modeling Framework) representation of the KML format. After a file is loaded, we construct the Ardor3D spatials KML includes network links, which reference external or remote files and reload at specified intervals. We support this, updating our 3D geometry based on newly loaded KML. NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots 13
  • 14. Generating UI with Databinding VERVE is designed to support different robots, which will have different models and instrumentation. We generate user interface controls bound to these models based the Java classes representing robot concepts. We use reflection to explore classes. for (Method method : m_class.getMethods()){ if (MethodUtil.isGetMethod(method) || MethodUtil.isIsMethod(method)){ createField(method, container); We have created custom Java Changes made with these widgets annotations to control generated will automatically be reflected in databound widgets, for example: the Ardor3D view. @ReadOnly public Vector3 getVector3() { return m_vector3; } NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots 14
  • 15. Real-time Telemetry Views Highlight when voltage = minimum Show when a system is off or on Robot Health – a high value can be good (battery charge), or bad (CPU level) Artificial Horizon shows Pitch and Roll Huge amounts of telemetry are constantly streaming in from the robots. VERVE presents this information in a clear way, so users can quickly understand the information and know where to look for problems. Warning and error thresholds and colors are set for each type of telemetry. NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots 15
  • 16. Telemetry View Implementation We have created a TableBarListener to handle drawing informative color blocks in table cells public class TableBarListener implements Listener { public void handleEvent(Event event) { GC gc = event.gc; // use reflection to get the percentage value for the data for the cell percent = (Number) getPercentMethod().invoke(getMethodContainer(), item.getData()); // make the string pretty String percentString = getFormatter().format(percent); // look up the color based on thresholds set for this table bar listener Color barColor = getBarColor(percent); // figure out how wide the bar should be int width = (getBarColumn().getWidth() - 2) * (percent.intValue()) / m_spread; // use the graphics context to fill the rectangle gc.fillRectangle(event.x-1, event.y, width, event.height-2); // draw the text of the percentage gc.drawText(percentString, event.x+2, event.y+offset, true); NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots 16
  • 17. More Information VERVE for Haughton Mars Project (HMP) 2010 http://www.youtube.com/watch?v=bA8GkyK0ZpQ Intelligent Robotics Group at NASA Ames Research Center http://irg.arc.nasa.gov Blog about HMP 2010 http://lunarscience.nasa.gov/robots/2010/ HMP http://www.marsonearth.org/ Ardor3D http://ardor3d.com NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots 17
  • 18. Questions? Intelligent Robotics Group Intelligent Systems Division NASA Ames Research Center http://irg.arc.nasa.gov NASA Ames uses Eclipse RCP for real-time situational awareness of remote robots 18