Nvidia JetsonIsaac SDK

Kaya代码解析

2020-04-04  本文已影响0人  YottaYuan

kaya_hardware.subgraph.json文件

此文件解析了kaya机器人硬件相关的细节

"modules": [
    "dynamixel",
    "imu",
    "kaya",
    "realsense",
    "viewers"
  ],

kaya_base

"kaya_base": {
      "holonomic_to_wheels": {
        "max_linear_speed": 0.5,
        "max_angular_speed": 2.0
      }
    },

{
        "name": "kaya_base",
        "components": [
          {
            "name": "message_ledger",
            "type": "isaac::alice::MessageLedger"
          },
          {
            "name": "holonomic_to_wheels",
            "type": "isaac::kaya::KayaBaseDriver"
          }
        ]
      },

dynamixels

{
        "name": "dynamixels",
        "components": [
          {
            "name": "message_ledger",
            "type": "isaac::alice::MessageLedger"
          },
          {
            "name": "driver",
            "type": "isaac::dynamixel::DynamixelDriver"
          },
          {
            "name": "isaac.alice.Failsafe",
            "type": "isaac::alice::Failsafe"
          }
        ]
      },

与dynamixels交互

    {
      "source": "subgraph/interface/base_command",
        "target": "kaya_base/holonomic_to_wheels/base_command"
      },
      {
        "source": "kaya_base/holonomic_to_wheels/base_state",
        "target": "subgraph/interface/base_state"
      },
      {
        "source": "dynamixels/driver/state",
        "target": "kaya_base/holonomic_to_wheels/wheel_state"
      },
      {
        "source": "kaya_base/holonomic_to_wheels/wheel_command",
        "target": "dynamixels/driver/command"
      },

isaac::alice::Subgraph

//engine/alice/components/Subgraph.hpp

#pragma once

#include "engine/alice/component.hpp"

namespace isaac {
namespace alice {

// Creates interface for a subgraph.
// Subgraphs JSON files are modular and meaningful collections of nodes, edges, and configurations
// that are ready to be plugged-in when creating application JSON files. For ease of use, each
// subgraph has an interface node of isaac::alice::Subgraph type registered here. Interface node
// receives and transmits messages for the other nodes of the subgraph, so that an application
// using this subgraph can edge with the interface node instead of directly communicating with other
// nodes within the subgraph. In the future, in addition to message passing, interface nodes will
// 1. read parameters set by user and map them to other components in the subgraph,
// 2. pass handles to the behavior trees within the subgraph,
// 3. sync poses between inside and outside the subgraph.
class Subgraph : public Component {};

}  // namespace alice
}  // namespace isaac

ISAAC_ALICE_REGISTER_COMPONENT(isaac::alice::Subgraph)

DynamixelDriver.hpp

packages/dynamixel/components/dynamixelDriver.hpp

电机和主板通过StateProto进行通信。

  // The desired angular speeds for each motor
  ISAAC_PROTO_RX(StateProto, command);
  // The measured angular speeds for each motor
  ISAAC_PROTO_TX(StateProto, state);

state.capnp.h

/home/nvidia/.cache/bazel/_bazel_nvidia/16b182569cf02a0dcbe9eb1e7674905b/execroot/com_nvidia_isaac/bazel-out/k8-opt/genfiles/messages/state.capnp.h

// Generated by Cap'n Proto compiler, DO NOT EDIT
// source: state.capnp

#pragma once

#include <capnp/generated-header-support.h>
#include <kj/windows-sanity.h>

#if CAPNP_VERSION != 7000
#error "Version mismatch between generated code and library headers.  You must use the same version of the Cap'n Proto compiler and library."
#endif

#include "tensor.capnp.h"

namespace capnp {
namespace schemas {

CAPNP_DECLARE_SCHEMA(b6e133a2596fcbc4);

}  // namespace schemas
}  // namespace capnp


struct StateProto {
  StateProto() = delete;

  class Reader;
  class Builder;
  class Pipeline;

  struct _capnpPrivate {
    CAPNP_DECLARE_STRUCT_HEADER(b6e133a2596fcbc4, 0, 3)
    #if !CAPNP_LITE
    static constexpr ::capnp::_::RawBrandedSchema const* brand() { return &schema->defaultBrand; }
    #endif  // !CAPNP_LITE
  };
};

// =======================================================================================

class StateProto::Reader {
public:
  typedef StateProto Reads;

  Reader() = default;
  inline explicit Reader(::capnp::_::StructReader base): _reader(base) {}

  inline ::capnp::MessageSize totalSize() const {
    return _reader.totalSize().asPublic();
  }

#if !CAPNP_LITE
  inline ::kj::StringTree toString() const {
    return ::capnp::_::structString(_reader, *_capnpPrivate::brand());
  }
#endif  // !CAPNP_LITE

  inline bool hasPack() const;
  inline  ::TensorProto::Reader getPack() const;

  inline bool hasSchema() const;
  inline  ::capnp::Text::Reader getSchema() const;

  inline bool hasData() const;
  inline  ::capnp::List<double,  ::capnp::Kind::PRIMITIVE>::Reader getData() const;

private:
  ::capnp::_::StructReader _reader;
  template <typename, ::capnp::Kind>
  friend struct ::capnp::ToDynamic_;
  template <typename, ::capnp::Kind>
  friend struct ::capnp::_::PointerHelpers;
  template <typename, ::capnp::Kind>
  friend struct ::capnp::List;
  friend class ::capnp::MessageBuilder;
  friend class ::capnp::Orphanage;
};

class StateProto::Builder {
public:
  typedef StateProto Builds;

  Builder() = delete;  // Deleted to discourage incorrect usage.
                       // You can explicitly initialize to nullptr instead.
  inline Builder(decltype(nullptr)) {}
  inline explicit Builder(::capnp::_::StructBuilder base): _builder(base) {}
  inline operator Reader() const { return Reader(_builder.asReader()); }
  inline Reader asReader() const { return *this; }

  inline ::capnp::MessageSize totalSize() const { return asReader().totalSize(); }
#if !CAPNP_LITE
  inline ::kj::StringTree toString() const { return asReader().toString(); }
#endif  // !CAPNP_LITE

  inline bool hasPack();
  inline  ::TensorProto::Builder getPack();
  inline void setPack( ::TensorProto::Reader value);
  inline  ::TensorProto::Builder initPack();
  inline void adoptPack(::capnp::Orphan< ::TensorProto>&& value);
  inline ::capnp::Orphan< ::TensorProto> disownPack();

  inline bool hasSchema();
  inline  ::capnp::Text::Builder getSchema();
  inline void setSchema( ::capnp::Text::Reader value);
  inline  ::capnp::Text::Builder initSchema(unsigned int size);
  inline void adoptSchema(::capnp::Orphan< ::capnp::Text>&& value);
  inline ::capnp::Orphan< ::capnp::Text> disownSchema();

  inline bool hasData();
  inline  ::capnp::List<double,  ::capnp::Kind::PRIMITIVE>::Builder getData();
  inline void setData( ::capnp::List<double,  ::capnp::Kind::PRIMITIVE>::Reader value);
  inline void setData(::kj::ArrayPtr<const double> value);
  inline  ::capnp::List<double,  ::capnp::Kind::PRIMITIVE>::Builder initData(unsigned int size);
  inline void adoptData(::capnp::Orphan< ::capnp::List<double,  ::capnp::Kind::PRIMITIVE>>&& value);
  inline ::capnp::Orphan< ::capnp::List<double,  ::capnp::Kind::PRIMITIVE>> disownData();

private:
  ::capnp::_::StructBuilder _builder;
  template <typename, ::capnp::Kind>
  friend struct ::capnp::ToDynamic_;
  friend class ::capnp::Orphanage;
  template <typename, ::capnp::Kind>
  friend struct ::capnp::_::PointerHelpers;
};

#if !CAPNP_LITE
class StateProto::Pipeline {
public:
  typedef StateProto Pipelines;

  inline Pipeline(decltype(nullptr)): _typeless(nullptr) {}
  inline explicit Pipeline(::capnp::AnyPointer::Pipeline&& typeless)
      : _typeless(kj::mv(typeless)) {}

  inline  ::TensorProto::Pipeline getPack();
private:
  ::capnp::AnyPointer::Pipeline _typeless;
  friend class ::capnp::PipelineHook;
  template <typename, ::capnp::Kind>
  friend struct ::capnp::ToDynamic_;
};
#endif  // !CAPNP_LITE

// =======================================================================================

inline bool StateProto::Reader::hasPack() const {
  return !_reader.getPointerField(
      ::capnp::bounded<0>() * ::capnp::POINTERS).isNull();
}
inline bool StateProto::Builder::hasPack() {
  return !_builder.getPointerField(
      ::capnp::bounded<0>() * ::capnp::POINTERS).isNull();
}
inline  ::TensorProto::Reader StateProto::Reader::getPack() const {
  return ::capnp::_::PointerHelpers< ::TensorProto>::get(_reader.getPointerField(
      ::capnp::bounded<0>() * ::capnp::POINTERS));
}
inline  ::TensorProto::Builder StateProto::Builder::getPack() {
  return ::capnp::_::PointerHelpers< ::TensorProto>::get(_builder.getPointerField(
      ::capnp::bounded<0>() * ::capnp::POINTERS));
}
#if !CAPNP_LITE
inline  ::TensorProto::Pipeline StateProto::Pipeline::getPack() {
  return  ::TensorProto::Pipeline(_typeless.getPointerField(0));
}
#endif  // !CAPNP_LITE
inline void StateProto::Builder::setPack( ::TensorProto::Reader value) {
  ::capnp::_::PointerHelpers< ::TensorProto>::set(_builder.getPointerField(
      ::capnp::bounded<0>() * ::capnp::POINTERS), value);
}
inline  ::TensorProto::Builder StateProto::Builder::initPack() {
  return ::capnp::_::PointerHelpers< ::TensorProto>::init(_builder.getPointerField(
      ::capnp::bounded<0>() * ::capnp::POINTERS));
}
inline void StateProto::Builder::adoptPack(
    ::capnp::Orphan< ::TensorProto>&& value) {
  ::capnp::_::PointerHelpers< ::TensorProto>::adopt(_builder.getPointerField(
      ::capnp::bounded<0>() * ::capnp::POINTERS), kj::mv(value));
}
inline ::capnp::Orphan< ::TensorProto> StateProto::Builder::disownPack() {
  return ::capnp::_::PointerHelpers< ::TensorProto>::disown(_builder.getPointerField(
      ::capnp::bounded<0>() * ::capnp::POINTERS));
}

inline bool StateProto::Reader::hasSchema() const {
  return !_reader.getPointerField(
      ::capnp::bounded<1>() * ::capnp::POINTERS).isNull();
}
inline bool StateProto::Builder::hasSchema() {
  return !_builder.getPointerField(
      ::capnp::bounded<1>() * ::capnp::POINTERS).isNull();
}
inline  ::capnp::Text::Reader StateProto::Reader::getSchema() const {
  return ::capnp::_::PointerHelpers< ::capnp::Text>::get(_reader.getPointerField(
      ::capnp::bounded<1>() * ::capnp::POINTERS));
}
inline  ::capnp::Text::Builder StateProto::Builder::getSchema() {
  return ::capnp::_::PointerHelpers< ::capnp::Text>::get(_builder.getPointerField(
      ::capnp::bounded<1>() * ::capnp::POINTERS));
}
inline void StateProto::Builder::setSchema( ::capnp::Text::Reader value) {
  ::capnp::_::PointerHelpers< ::capnp::Text>::set(_builder.getPointerField(
      ::capnp::bounded<1>() * ::capnp::POINTERS), value);
}
inline  ::capnp::Text::Builder StateProto::Builder::initSchema(unsigned int size) {
  return ::capnp::_::PointerHelpers< ::capnp::Text>::init(_builder.getPointerField(
      ::capnp::bounded<1>() * ::capnp::POINTERS), size);
}
inline void StateProto::Builder::adoptSchema(
    ::capnp::Orphan< ::capnp::Text>&& value) {
  ::capnp::_::PointerHelpers< ::capnp::Text>::adopt(_builder.getPointerField(
      ::capnp::bounded<1>() * ::capnp::POINTERS), kj::mv(value));
}
inline ::capnp::Orphan< ::capnp::Text> StateProto::Builder::disownSchema() {
  return ::capnp::_::PointerHelpers< ::capnp::Text>::disown(_builder.getPointerField(
      ::capnp::bounded<1>() * ::capnp::POINTERS));
}

inline bool StateProto::Reader::hasData() const {
  return !_reader.getPointerField(
      ::capnp::bounded<2>() * ::capnp::POINTERS).isNull();
}
inline bool StateProto::Builder::hasData() {
  return !_builder.getPointerField(
      ::capnp::bounded<2>() * ::capnp::POINTERS).isNull();
}
inline  ::capnp::List<double,  ::capnp::Kind::PRIMITIVE>::Reader StateProto::Reader::getData() const {
  return ::capnp::_::PointerHelpers< ::capnp::List<double,  ::capnp::Kind::PRIMITIVE>>::get(_reader.getPointerField(
      ::capnp::bounded<2>() * ::capnp::POINTERS));
}
inline  ::capnp::List<double,  ::capnp::Kind::PRIMITIVE>::Builder StateProto::Builder::getData() {
  return ::capnp::_::PointerHelpers< ::capnp::List<double,  ::capnp::Kind::PRIMITIVE>>::get(_builder.getPointerField(
      ::capnp::bounded<2>() * ::capnp::POINTERS));
}
inline void StateProto::Builder::setData( ::capnp::List<double,  ::capnp::Kind::PRIMITIVE>::Reader value) {
  ::capnp::_::PointerHelpers< ::capnp::List<double,  ::capnp::Kind::PRIMITIVE>>::set(_builder.getPointerField(
      ::capnp::bounded<2>() * ::capnp::POINTERS), value);
}
inline void StateProto::Builder::setData(::kj::ArrayPtr<const double> value) {
  ::capnp::_::PointerHelpers< ::capnp::List<double,  ::capnp::Kind::PRIMITIVE>>::set(_builder.getPointerField(
      ::capnp::bounded<2>() * ::capnp::POINTERS), value);
}
inline  ::capnp::List<double,  ::capnp::Kind::PRIMITIVE>::Builder StateProto::Builder::initData(unsigned int size) {
  return ::capnp::_::PointerHelpers< ::capnp::List<double,  ::capnp::Kind::PRIMITIVE>>::init(_builder.getPointerField(
      ::capnp::bounded<2>() * ::capnp::POINTERS), size);
}
inline void StateProto::Builder::adoptData(
    ::capnp::Orphan< ::capnp::List<double,  ::capnp::Kind::PRIMITIVE>>&& value) {
  ::capnp::_::PointerHelpers< ::capnp::List<double,  ::capnp::Kind::PRIMITIVE>>::adopt(_builder.getPointerField(
      ::capnp::bounded<2>() * ::capnp::POINTERS), kj::mv(value));
}
inline ::capnp::Orphan< ::capnp::List<double,  ::capnp::Kind::PRIMITIVE>> StateProto::Builder::disownData() {
  return ::capnp::_::PointerHelpers< ::capnp::List<double,  ::capnp::Kind::PRIMITIVE>>::disown(_builder.getPointerField(
      ::capnp::bounded<2>() * ::capnp::POINTERS));
}

state.capnp.c++

/home/nvidia/.cache/bazel/_bazel_nvidia/16b182569cf02a0dcbe9eb1e7674905b/execroot/com_nvidia_isaac/bazel-out/k8-opt/genfiles/messages/state.capnp.c++

// Generated by Cap'n Proto compiler, DO NOT EDIT
// source: state.capnp

#include "state.capnp.h"

namespace capnp {
namespace schemas {
static const ::capnp::_::AlignedData<67> b_b6e133a2596fcbc4 = {
  {   0,   0,   0,   0,   5,   0,   6,   0,
    196, 203, 111,  89, 162,  51, 225, 182,
     21,   0,   0,   0,   1,   0,   0,   0,
     26, 192, 108,   8, 143, 192, 242, 128,
      3,   0,   7,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,
     21,   0,   0,   0,   2,   1,   0,   0,
     33,   0,   0,   0,   7,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,
     29,   0,   0,   0, 175,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,
    109, 101, 115, 115,  97, 103, 101, 115,
     47, 115, 116,  97, 116, 101,  46,  99,
     97, 112, 110, 112,  58,  83, 116,  97,
    116, 101,  80, 114, 111, 116, 111,   0,
      0,   0,   0,   0,   1,   0,   1,   0,
     12,   0,   0,   0,   3,   0,   4,   0,
      0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   1,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,
     69,   0,   0,   0,  42,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,
     64,   0,   0,   0,   3,   0,   1,   0,
     76,   0,   0,   0,   2,   0,   1,   0,
      1,   0,   0,   0,   1,   0,   0,   0,
      0,   0,   1,   0,   1,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,
     73,   0,   0,   0,  58,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,
     68,   0,   0,   0,   3,   0,   1,   0,
     80,   0,   0,   0,   2,   0,   1,   0,
      2,   0,   0,   0,   2,   0,   0,   0,
      0,   0,   1,   0,   2,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,
     77,   0,   0,   0,  42,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,
     72,   0,   0,   0,   3,   0,   1,   0,
    100,   0,   0,   0,   2,   0,   1,   0,
    112,  97,  99, 107,   0,   0,   0,   0,
     16,   0,   0,   0,   0,   0,   0,   0,
    237, 156, 174,  53, 228, 229, 223, 206,
      0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,
     16,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,
    115,  99, 104, 101, 109,  97,   0,   0,
     12,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,
     12,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,
    100,  97, 116,  97,   0,   0,   0,   0,
     14,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   3,   0,   1,   0,
     11,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,
     14,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0,
      0,   0,   0,   0,   0,   0,   0,   0, }
};
::capnp::word const* const bp_b6e133a2596fcbc4 = b_b6e133a2596fcbc4.words;
#if !CAPNP_LITE
static const ::capnp::_::RawSchema* const d_b6e133a2596fcbc4[] = {
  &s_cedfe5e435ae9ced,
};
static const uint16_t m_b6e133a2596fcbc4[] = {2, 0, 1};
static const uint16_t i_b6e133a2596fcbc4[] = {0, 1, 2};
const ::capnp::_::RawSchema s_b6e133a2596fcbc4 = {
  0xb6e133a2596fcbc4, b_b6e133a2596fcbc4.words, 67, d_b6e133a2596fcbc4, m_b6e133a2596fcbc4,
  1, 3, i_b6e133a2596fcbc4, nullptr, nullptr, { &s_b6e133a2596fcbc4, nullptr, nullptr, 0, 0, nullptr }
};
#endif  // !CAPNP_LITE
}  // namespace schemas
}  // namespace capnp

// =======================================================================================


// StateProto
constexpr uint16_t StateProto::_capnpPrivate::dataWordSize;
constexpr uint16_t StateProto::_capnpPrivate::pointerCount;
#if !CAPNP_LITE
constexpr ::capnp::Kind StateProto::_capnpPrivate::kind;
constexpr ::capnp::_::RawSchema const* StateProto::_capnpPrivate::schema;
#endif  // !CAPNP_LITE
上一篇下一篇

猜你喜欢

热点阅读