Coder Social home page Coder Social logo

scikit-bot's People

Contributors

actions-user avatar astrojuanlu avatar dependabot[bot] avatar firefoxmetzger avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

scikit-bot's Issues

Speak the Ignition discovery protocol

Ignition uses ign-transport to communicate between different parts of the library, and we can introspect this communication using ropy.Subscriber.

Under the hood, this uses a mix of zmq and the ignition CLI (via subprocess) to make itself known to ignition and to start receiving messages. The main reason why this isn't implemented cleaner is that I didn't find documentation on how topic discovery works in ignition. However, there appears to be some documentation (living here) that describes how ignition passes messages around to discover topics.

A great addition would be to implement this discovery protocol here, so that we can cleanly interface with Ignition.

Possible related issue: gazebosim/gz-transport#225

orphan/lingering processes from test_subscriber

when running tests, the file ropy/ignition/tests/test_subscriber.py produces a lingering process every time ignition gazebo is started to test subscription.

It will be better if the test could clean up after itself and remove any child and grandchild processes.

SDFormat bindings don't set the default pose correctly.

If a pose element is omitted, it is set to the default value "0 0 0 0 0 0"; however it should be set to a pose object with pose.value = "0 0 0 0 0 0" instead.

Reproducing example:

import skbot.ignition as ign

sdf_root = ign.sdformat.loads(
"""<?xml version="1.0" ?>
<sdf version="1.8">
  <model name="some_name"> 
    <link name="link1">
      <pose relative_to="frame1">1 0 0 0 0 0</pose>
    </link>
    <frame name="frame1" />
  </model>
</sdf>
"""
)

print(sdf_root.model.frame[0].pose)
# prints: "0 0 0 0 0 0"

test_subscriber waits blindly for ignition gazebo to start

Testing the ignition interface opens the simulator to interface with it. Currently, this is done via subprocess.Popen and without any checks that the simulator is ready. Instead, we just time.sleep(3) and hope it will have initialized after this time. This works most of the time, but might randomly break. It also wastes time as the test may wait much longer than it needs to.

What is needed is a mechanism to detect if ignition is running and has finished initializing.

Add missing basic transformations

Currently ropy.transform has functions for rigid body transformations (i.e. coordinate transformation, translation + rotation), and N-dimensional rotations. A welcome addition would be to add functions that allow easy access to other basic transformations.

The following functions are still needed:

  • tf.translation N-dimensional translation
  • tf.scaling N-dimensional scaling (scale each dimension differently)
  • tf.uniform_scaling scale each dimension by the same factor (i.e. update scale parameter)
  • tf.reflection N-dimensional reflection
  • tf.shear N-dimensional shearing

Implement missing SDFormat elements in version agnostic bindings

The version agnostic SDFormat bindings are an effort to make SDFormat backward compatible at the python level.

The idea is that you can load any version of SDFormat into a version-agnostic object tree, and then consume this tree as if it were in any (other) SDFormat version. In other words, if you have written an algorithm that assumes SDFormat v1.6 then this algorithm should also work when you input SDFormat v1.4 or SDFormat v1.8 .

The current implementation supports reading SDFormat into an object tree, and conversion of that tree into a pose graph (A tutorial will hopefully come soon(TM).)

Currently, the important elements (model, joint, link, frame) are implemented; however, less frequently used elements still need implementation. Below is a TODO list of all the elements (up to v1.8) that need implementation. Implementation is needed for all elements that are not checked.

If you need/want a specific element, feel free to comment on this issue. If you are interested in contributing a missing element, please also comment here to avoid duplicate effort.

Element Status:

  • Actor
  • Air Pressure
  • Altimeter
  • Atmosphere
  • Audio Sink
  • Audio Source
  • Battery
  • Box Shape
  • Camera
  • Capsule
  • Collision Engine
  • Collision
  • Contact
  • Cylinder Shape
  • Ellipsoid Shape
  • Force Torque
  • Frame
  • Geometry
  • GPS
  • Gripper
  • Gui
  • Heightmap Shape
  • Image Shape
  • Imu
  • Inertial
  • Joint
  • Lidar
  • Light State
  • Light
  • Link State
  • Link
  • Logical Camera
  • Magnetometer
  • Material
  • Mesh Shape
  • Model State
  • Model
  • Navsat
  • Noise
  • Particle Emitter
  • Physics
  • Plane Shape
  • Plugin
  • Polyline Shape
  • Population
  • Projector
  • Ray
  • Rfid
  • Rfid Tag
  • Scene
  • Sdf (root)
  • Sensor
  • Sonar
  • Sphere Shape
  • State
  • Surface
  • Transceiver
  • URDF
  • Visual
  • World

Add additional projections

In addition to a perspective projection via perspective_frustum there are a few more functions that are viable to include:

  • perspective_focal(focal_length, image_shape) which is the same as perspective_frustum but takes the focal_length directly
  • parallel(direction, image_shape) which gives us access to the family of parallel projections
  • stereographic(radius, image_shape) which gives us access to stereographic projections
  • perspective_frustum in N dimensions

Bonus points if we can write them in a general, N-dimensional way. This would give us some really nice visualization power for higher dimensional spaces (e.g. joint-space). In this case, the proposed signature may have to change.

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.