A set of questions about message types in the Isaac SDK

I have a list of questions regarding the Isaac SDK. Let’s take the kaya robot as an example.

The reference robot Kaya uses Dynamixel servos for movement, connected via a U2D2 interface converter.
At the moment the node diagram looks like this (here the diagram from navigate sim for clarity, but the logic is similar):

Where as you can see, imu readings are taken, and linear and angular accelerations are transmitted to the odometry node.
In kaya_hardware.subgraph.json the following edge is connected:

“source”: “dynamixels/driver/state”,
“target”: “kaya_base/holonomic_to_wheels/wheel_state”

In which messages are exchanged via StateProto:

A message used to transport states of dynamic systems. This is used closely together with the
state gem to be found in //engine/gems/state. For example you can define the robot state using the
compile-time types defined in that gem, and then serialize that state into a message. The
receiver of that message can deserialize the state back into the compile-time robot state type.

struct StateProto {
#indicates state element dimension, the second rank is time for a potential timeseries, and
#the third rank is for the batch index.
pack @0: TensorProto;
#The schema describing the format of the state vector
schema @1: Text;
#Alternative way to pass the data (for python)
data @2: List(Float64);

where, the state structure in a particular case is not clear (too generalized).
According to the documentation, the isaac.navigation.HolonomicBaseWheelImuOdometry component accepts messages like imu and state.
It is possible to configure the following parameters:

  • weight_imu_angular_speed [double] [default=1.0]: Determines the trust in IMU while making angular speed observations. 1.0 means using IMU only. 0.0 means using segway data only. 0.5 means taking an average
  • weight_imu_acceleration [double] [default=1.0]: Determines the trust in IMU while making linear acceleration observations. 1.0 means using IMU only. 0.0 means using segway data only. 0.5 means taking an average
    If you set weight_imu=1, you should expect no readings from the wheel encoders. However, the data which comes in LQR does not allow this node to work properly. For example, in the apps/kaya/gmapping_distributed_kaya module. The robot is not able to receive data about its movement in space, which would be expected, given the functioning imu. In other words, it is possible to get a 360 degree scan, but at one point.
    In this regard, there is a list of questions:
  1. Is it possible to get away from using dynamixel actuators (using kaya as an example)
    a. What do dynamixel node transmitted messages look like?
  2. Is it possible to get away from reading from wheel encoders?
  3. What does the StateProto array look like in this case (example of messages sent by drives to the odometry node)?
  4. Is it possible to build my odometry array and pass it to LQR without using encoders?
  5. I want to connect my python codlet defined in the build file as isaac_py_app to another project, I add it to the build file of this project defined as isaac_app in its modules = [ …"//apps/gps"] this way. I get the error no such target ‘//apps/gps:libgps_module.so’: target ‘libgps_module.so’ not declared in package ‘apps/gps’. That is, there is no compiled .so file. So, do I need to compile this so file somehow or should I add another way? On output, I need my codelet to be available in a new project and be able to send and receive capnp messages.
  6. Is it possible to make a python codelet that won’t be an application launch point?
  7. How to break edges if they are added via module import?
  8. Instead of app.nodes[“my_node”].add(MyNode), how do I add a codelet via a json file? If you specify the isaac PyCodelet type, the program doesn’t see it.
    Due to the fact that some gems have the format of shared objects, it is not always possible to examine in detail the format of the messages transmitted. Please give me maximum examples of the received and sent data for a specific case and in general any information about the redefinition of components, imports is appreciated.

Best Regards,
Evgenii Neverov