How to acquire telemetry data for Computer Vision

I am Japanese. I apologize in advance for any inappropriate expressions that may be included in the translation as it was done using google translate.

What we want to do.

I want to acquire telemetry data for Computer Vision.

What we did.

in # guidance #

(section registration), as I understand it.

self.tlm_cv = telemetry.TlmSection(
            "/dev/shm", "cv@tracking@proposals", subset=subset
        )

(From the guidance, the service triggers the “cv@tracking@proposals” section to get the telemetry data from the device?) I understand that this is the case.

def begin_step(self):
        self.tlm_cv.fetch_sample()

in # service #
/cv_service

processing.h
Definition of inputs from devices and outputs to guidance, etc.

struct processing_input {
        uint count;
}

struct processing_output {
        uint count;
}

sample.cpp
Definition of “cv@tracking@proposals” constant

#define TLM_SECTION_USER "cv@tracking@proposals"

Register variables using recursive structural descriptions and pointers to the base of the structure
int tlm_consumer_ reg_struct_ptr

static int context_init(struct context *ctx)
{
	res = tlm_consumer_reg_struct_ptr(ctx->consumer,
					  &ctx->tlm_data_in,
					  TLM_SECTION_USER,
					  &s_tlm_data_in_struct);

Define tlm_data_in and tlm_data_out

struct tlm_data_in {
	int count;
};

struct tlm_data_out {
    int count;
};

Define s_tlm_data_in_fields and s_tlm_data_out_fields and map values

static const struct tlm_reg_field s_tlm_data_in_fields[] = {
	TLM_REG_FIELD_SCALAR_EX(struct tlm_data_in, count,
			"count", TLM_TYPE_UINT32),
};

static const struct tlm_reg_field s_tlm_data_out_fields[] = {
	TLM_REG_FIELD_SCALAR(struct tlm_data_out, count,
			TLM_TYPE_UINT32),
};

Definition of s_tlm_data_in_struct and s_tlm_data_out_struct

static const struct tlm_reg_struct s_tlm_data_in_struct =
	TLM_REG_STRUCT("tlm_data_in", s_tlm_data_in_fields);

static const struct tlm_reg_struct s_tlm_data_out_struct =
	TLM_REG_STRUCT("tlm_data_out", s_tlm_data_out_fields);

Update output telemetry values

static void processing_evt_cb(struct pomp_evt *evt, void *userdata)
{
	/* Update telemetry output */
	ud->tlm_data_out.algo.count = output.count;

Setup of input structure to processing

static void frame_cb(struct vipcc_ctx *ctx,
		     const struct vipc_frame *frame,
		     void *be_frame,
		     void *userdata)
{

	/* Setup input structure for processing */
	memset(&input, 0, sizeof(input));
	input.count = ud->tlm_data_in.count;

processing.cpp
Output of counts obtained from the “cv@tracking@proposals” section in do_step

static void do_step(struct processing *self,
		    const struct processing_input *input,
		    struct processing_output *output)
{
      ULOGC("cv-service: count %d", input->count);
}

Current Status

As shown in the image, we have reached do_step in processing.cpp, but the value of count is 0.

Our own hypothesis

  • The description is insufficient on the service side.
  • Computer vision should be turned on.

Please let me know if I am missing something.

1 Like

Hi @atsumu-arch,

I think you can try activating the computer vision service with the message enable. That should solve your problem.

Axel