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

Hi!@ Axelm
I understand!
I’ll try it!

We are ready to perform field validation in three days!
We will actually verify it!

Thank you for your support!

This topic was automatically closed after 30 days. New replies are no longer allowed.