板子

配置新环境

 

 地平线X3

 

 

 

 

 

 

 

 

/home/ccxwyyjy/100ask_lvgl/arm-buildroot-linux-musleabihf_sdk-buildroot/arm-buildroot-linux-musleabihf/sysroot/usr/include

/home/ccxwyyjy/100ask_lvgl/arm-buildroot-linux-musleabihf_sdk-buildroot/arm-buildroot-linux-musleabihf/sysroot/usr/lib/dbus-1.0/include

 

-I ~/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/include -I ~/100ask_imx6ull-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/arm-buildroot-linux-gnueabihf/sysroot/usr/lib/dbus-1.0/include

-I ~/100ask_lvgl/arm-buildroot-linux-musleabihf_sdk-buildroot/arm-buildroot-linux-musleabihf/sysroot/usr/include -I ~/100ask_lvgl/arm-buildroot-linux-musleabihf_sdk-buildroot/arm-buildroot-linux-musleabihf/sysroot/usr/lib/dbus-1.0/include

 

 

cd /
df -h

fdisk -l

mount /dev/mmcblk0p1 /sd

 

 

 

 

 

 

 

 

 

 

 

 

将文件拷贝到板子上

 

 

scp -r ./untitled2 root@192.168.1.10:/userdata/ccx/

 

 

 

 

 

 

 

 

 

 

 

CMakeLists.txt

cmake_minimum_required(VERSION 3.14)
project(untitled1)

set(CMAKE_CXX_STANDARD 14)

add_executable(untitled1 main.cpp)




set(HOST_PACKAGE_DIR /home/hcl/.horizon/ddk/xj3_aarch64)
include_directories(
        # xstream
        ${HOST_PACKAGE_DIR}/xstream/include/
)
link_directories(
        # xstream
        ${HOST_PACKAGE_DIR}/xstream/lib/
)

# 设置头文件搜索路径
include_directories(./)

set(BASE_LIBRARIES xstream pthread rt)


add_executable(untitled1
        main.cpp
        ${SOURCE_FILES})
target_link_libraries(untitled1 ${BASE_LIBRARIES})




#SET( CMAKE_CXX_FLAGS "-std=c++11 -O3")

 

XStream算法SDK开发框架

#include <iostream>
#include <string>
#include <unistd.h>
#include <assert.h>
#include <deque>
#include "xstream/xstream_world.h"
#include


using xstream::InputParam;
using xstream::InputParamPtr;
using xstream::BaseData;
using xstream::BaseDataPtr;
using xstream::BaseDataVector;
using xstream::InputData;
using xstream::InputDataPtr;
using xstream::SimpleMethod;
using namespace std;


struct FloatArray : public BaseData {
    std::vector<float> float_array_;
};

struct FloatValue : public BaseData {
    FloatValue() {}
    FloatValue(float x) {
        value_ = x;
    }
    float value_ = 0;
};

// 平均值计算
class AverageMethod : public SimpleMethod {
public:
    int Init(const std::string &config_file_path) {
        return 0;
    }

    std::vector<BaseDataPtr> DoProcess(
            const std::vector<BaseDataPtr> &input,
            const xstream::InputParamPtr &param) override {
        // 强制对输入类型进行检查和转换
        // 每个method实现都是面向特定数据类型;
        assert(input.size() == 1);
        auto in_datas = std::static_pointer_cast<FloatArray>(input[0]);

        // 计算逻辑的实现
        float sum = 0;
        for (auto &one_float : in_datas->float_array_) {
            sum += one_float;
        }
        float avg = sum / in_datas->float_array_.size();

        // 输出结果的组装并直接返回
        // 返回的数据可以被框架传递给下一个Method进行处理
        auto float_value = std::make_shared<FloatValue>(avg);
        std::vector<BaseDataPtr> output;
        output.push_back(float_value);  // 输出也只有一个值
        return output;
    };
};

// 最大值计算
class MaxMethod : public SimpleMethod {
public:
    int Init(const std::string &config_file_path) {
        return 0;
    }

    std::vector<BaseDataPtr> DoProcess(
            const std::vector<BaseDataPtr> &input,
            const xstream::InputParamPtr &param) override {
        // 强制对输入类型进行检查和转换
        // 每个method实现都是面向特定数据类型;
        assert (input.size() == 1);
        auto in_datas = std::static_pointer_cast<FloatArray>(input[0]);

        // 计算逻辑的实现
        float max_value = in_datas->float_array_[0];
        for (int i = 1; i < in_datas->float_array_.size(); ++i) {
            if (max_value < in_datas->float_array_[i]) {
                max_value = in_datas->float_array_[i];
            }
        }

        // 输出结果的组装并直接返回
        // 返回的数据可以被框架传递给下一个Method进行处理
        auto float_value = std::make_shared<FloatValue>(max_value);
        std::vector<BaseDataPtr> output;
        output.push_back(float_value);  // 输出也只有一个值
        return output;
    };
};






class Callback {
public:
    void OnCallback(xstream::OutputDataPtr output) {
        float the_average = 0;
        float the_max = 0;
        for (auto data : output->datas_) {
            // 这里name_需要和json workflow配置的名字一致
            if (data->name_ == "average") {
                auto average = std::static_pointer_cast<FloatValue>(data);
                the_average = average->value_;
            } else if (data->name_ == "max") {
                auto max = std::static_pointer_cast<FloatValue>(data);
                the_max = max->value_;
            }
        }
    }
};

int main(int argc, char const *argv[]) {

    // 创建一个XStream执行环境
    xstream::XStreamSDK *workflow_instance = xstream::XStreamSDK::CreateSDK();
    // 设置Workflow配置文件
    workflow_instance->SetConfig("config_file", "workflow.json");
    // 初始化执行环境
    workflow_instance->Init();
    // 设置Workflow执行回调函数(本例我们采用Workflow异步推理接口)
    Callback callback;
    workflow_instance->SetCallback(
            std::bind(&Callback::OnCallback, &callback, std::placeholders::_1));

    // Workflow的循环执行。
    for (int i = 0; i < 2; i++) {
        // 准备单次推理的输入输出。
        auto float_array = std::make_shared<FloatArray>();
        for (int i = 0; i < 10; i++) {
            float_array->float_array_.push_back(i);
        }
        float_array->name_ = "input_array";  // name需要和workflow配置中的一致
        InputDataPtr inputdata(new InputData());
        inputdata->datas_.push_back(BaseDataPtr(float_array));
        //异步推理计算
        workflow_instance->AsyncPredict(inputdata);
    }

    sleep(2);
    delete workflow_instance;
    return 0;
}
XStream_main.cpp

 

 

10YLSYS出现的问题

 

 

video_test()

#include "video_test.h"
#include "opencv2/opencv.hpp"
#include "iostream"

#define Image_Width 1920
#define Image_Height 1000

void image_take(const char* string);
void btn1_event_cb(lv_event_t* event);
void btn2_event_cb(lv_event_t* event);
void btn3_event_cb(lv_event_t* event);
void out_queue(lv_timer_t* timer);

 uint8_t* show01_data;
extern horizon::vision::BlockingQueue<std::shared_ptr<mytest::GUIVideoData>> in_queue_;
static lv_img_dsc_t my_lv_img_dsc;


void videoTest()
{
    lv_obj_t* obj = lv_obj_create(lv_scr_act());
    lv_obj_set_size(obj, 1920, 80);
    lv_obj_align(obj, LV_ALIGN_BOTTOM_MID, 0, 0);

    lv_obj_t* btn1 = lv_btn_create(obj);
    lv_obj_set_size(btn1, 1920 / 3 - 50, 60);
    lv_obj_align(btn1, LV_ALIGN_CENTER, -600, 0);

    lv_obj_t* label1 = lv_label_create(btn1);
    lv_label_set_text(label1, "MENU");
    lv_obj_center(label1);

    lv_obj_t* btn2 = lv_btn_create(obj);
    lv_obj_set_size(btn2, 1920 / 3 - 50, 60);
    lv_obj_align(btn2, LV_ALIGN_CENTER, 0, 0);

    lv_obj_t* label2 = lv_label_create(btn2);
    lv_label_set_text(label2, "HOME");
    lv_obj_center(label2);

    lv_obj_t* btn3 = lv_btn_create(obj);
    lv_obj_set_size(btn3, 1920 / 3 - 50, 60);
    lv_obj_align(btn3, LV_ALIGN_CENTER, 600, 0);

    lv_obj_t* label3 = lv_label_create(btn3);
    lv_label_set_text(label3, "BACK");
    lv_obj_center(label3);

    lv_style_t style2;//修改滑块的样式
    lv_style_init(&style2);
    lv_style_set_bg_color(&style2, lv_color_hex(0xf5e8a9));
    lv_style_set_border_width(&style2, 2);
    lv_obj_add_style(btn1, &style2, LV_STATE_PRESSED);
    lv_obj_add_style(btn2, &style2, LV_STATE_PRESSED);
    lv_obj_add_style(btn3, &style2, LV_STATE_PRESSED);

    lv_obj_t* icon = lv_img_create(lv_scr_act());
    my_lv_img_dsc.header.cf = LV_IMG_CF_TRUE_COLOR;
    my_lv_img_dsc.data_size = Image_Width * Image_Height * LV_COLOR_DEPTH / 8;
    my_lv_img_dsc.header.always_zero = 0;
    my_lv_img_dsc.header.w = Image_Width;
    my_lv_img_dsc.header.h = Image_Height;
    show01_data = (uint8_t*)malloc(sizeof(uchar) * my_lv_img_dsc.data_size);
    image_take("111.png");
    lv_img_set_src(icon, &my_lv_img_dsc);

    lv_obj_add_event_cb(btn1, btn1_event_cb, LV_EVENT_CLICKED, icon);
    lv_obj_add_event_cb(btn2, btn2_event_cb, LV_EVENT_CLICKED, icon);
    lv_obj_add_event_cb(btn3, btn3_event_cb, LV_EVENT_CLICKED, icon);
    lv_timer_t* timer1 = lv_timer_create(out_queue, 30, icon);
}

void out_queue(lv_timer_t* timer)
{
    lv_obj_t* icon = (lv_obj_t*)timer->user_data;
    std::shared_ptr<mytest::GUIVideoData> guiVideoData;
    // std::lock_guard<std::mutex> lk(cache_mtx_);
    auto is_getitem = in_queue_.try_pop(&guiVideoData, std::chrono::microseconds(10));
    if(!is_getitem)
    {
        return;
    }
    memcpy(show01_data,guiVideoData->buffer,my_lv_img_dsc.data_size);
    //free(guiVideoData->buffer);会报错
    my_lv_img_dsc.data = (uint8_t*)show01_data;
    lv_img_set_src(icon, &my_lv_img_dsc);
}

void btn1_event_cb(lv_event_t* event)
{
    lv_obj_t* icon = (lv_obj_t*)event->user_data;
    image_take("111.png");
    lv_img_set_src(icon, &my_lv_img_dsc);
}

void btn2_event_cb(lv_event_t* event)
{
    lv_obj_t* icon = (lv_obj_t*)event->user_data;
    image_take("333.jpg");
    lv_img_set_src(icon, &my_lv_img_dsc);
}

void btn3_event_cb(lv_event_t* event)
{
    lv_obj_t* icon = (lv_obj_t*)event->user_data;
    image_take("444.jpg");
    lv_img_set_src(icon, &my_lv_img_dsc);
}

void image_take(const char* string)
{
    cv::Mat in_image, out_image;
    in_image = cv::imread(string);
    cv::resize(in_image, out_image, cv::Size(Image_Width, Image_Height));
    uchar* buff = out_image.data;
    int* data32 = (int*)show01_data;
    for(int i = 0; i < Image_Width * Image_Height; i++)
    {
        int color = 0xff000000;
        color |= (buff[i * 3 + 0]) | (buff[i * 3 + 1] << 8) | (buff[i * 3 + 2] << 16);
        data32[i] = color;
    }
    my_lv_img_dsc.data = (uint8_t*)data32;
}
video_test

 

 

page_test()

#include "page_test.h"
#include "opencv2/opencv.hpp"
#include "iostream"
#include <stdio.h>

LV_IMG_DECLARE(my_picture)




typedef enum {
    DISP_SMALL,
    DISP_MEDIUM,
    DISP_LARGE,
} disp_size_t;

static void profile_create(lv_obj_t* parent);
static void profile_create2(lv_obj_t* parent);

static void chart_event_cb(lv_event_t* e);



static disp_size_t disp_size;

static lv_obj_t* tv;
static lv_obj_t* calendar;
static lv_style_t style_text_muted;
static lv_style_t style_title;
static lv_style_t style_icon;
static lv_style_t style_bullet;


static const lv_font_t* font_large;
static const lv_font_t* font_normal;

void out_queue(lv_timer_t* timer);
extern horizon::vision::BlockingQueue<std::shared_ptr<mytest::GUIVideoData>> in_queue_;
static lv_img_dsc_t my_lv_img_dsc;
//uint8_t* show1_data;



void lv_page(void)
{
    if (LV_HOR_RES <= 320) disp_size = DISP_SMALL;
    else if (LV_HOR_RES < 720) disp_size = DISP_MEDIUM;
    else disp_size = DISP_LARGE;

    font_large = LV_FONT_DEFAULT;
    font_normal = LV_FONT_DEFAULT;

    lv_coord_t tab_h;
    if (disp_size == DISP_LARGE) {
        tab_h = 70;
#if LV_FONT_MONTSERRAT_24
        font_large = &lv_font_montserrat_24;
#else
        LV_LOG_WARN("LV_FONT_MONTSERRAT_24 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead.");
#endif
#if LV_FONT_MONTSERRAT_16
        font_normal = &lv_font_montserrat_16;
#else
        LV_LOG_WARN("LV_FONT_MONTSERRAT_16 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead.");
#endif
    }
    else if (disp_size == DISP_MEDIUM) {
        tab_h = 45;
#if LV_FONT_MONTSERRAT_20
        font_large = &lv_font_montserrat_20;
#else
        LV_LOG_WARN("LV_FONT_MONTSERRAT_20 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead.");
#endif
#if LV_FONT_MONTSERRAT_14
        font_normal = &lv_font_montserrat_14;
#else
        LV_LOG_WARN("LV_FONT_MONTSERRAT_14 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead.");
#endif
    }
    else {   /* disp_size == DISP_SMALL */
        tab_h = 45;
#if LV_FONT_MONTSERRAT_18
        font_large = &lv_font_montserrat_18;
#else
        LV_LOG_WARN("LV_FONT_MONTSERRAT_18 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead.");
#endif
#if LV_FONT_MONTSERRAT_12
        font_normal = &lv_font_montserrat_12;
#else
        LV_LOG_WARN("LV_FONT_MONTSERRAT_12 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead.");
#endif
    }

#if LV_USE_THEME_DEFAULT
    lv_theme_default_init(NULL, lv_palette_main(LV_PALETTE_BLUE), lv_palette_main(LV_PALETTE_RED), LV_THEME_DEFAULT_DARK,
                          font_normal);
#endif

    lv_style_init(&style_text_muted);
    lv_style_set_text_opa(&style_text_muted, LV_OPA_50);

    lv_style_init(&style_title);
    lv_style_set_text_font(&style_title, font_large);

    lv_style_init(&style_icon);
    lv_style_set_text_color(&style_icon, lv_theme_get_color_primary(NULL));
    lv_style_set_text_font(&style_icon, font_large);

    lv_style_init(&style_bullet);
    lv_style_set_border_width(&style_bullet, 0);
    lv_style_set_radius(&style_bullet, LV_RADIUS_CIRCLE);

    tv = lv_tabview_create(lv_scr_act(), LV_DIR_TOP, tab_h);

    lv_obj_set_style_text_font(lv_scr_act(), font_normal, 0);

    if (disp_size == DISP_LARGE) {
        lv_obj_t* tab_btns = lv_tabview_get_tab_btns(tv);
        lv_obj_set_style_pad_left(tab_btns, LV_HOR_RES / 2, 0);
        lv_obj_t* logo = lv_img_create(tab_btns);



    }

    lv_obj_t* t1 = lv_tabview_add_tab(tv, "SCENE1");
    lv_obj_t* t2 = lv_tabview_add_tab(tv, "SCENE2");






    profile_create(t1);
    profile_create2(t2);
}




/**********************
 *   STATIC FUNCTIONS
 **********************/

static void profile_create(lv_obj_t* parent)
{
    lv_obj_t* panel1 = lv_obj_create(parent);
    //lv_obj_set_height(panel1, LV_SIZE_CONTENT);

    lv_obj_t* panel_title = lv_label_create(panel1);
    lv_label_set_text(panel_title, "Wristband");
    lv_obj_add_style(panel_title, &style_title, 0);


    //视频显示
    lv_obj_t* icon = lv_img_create(lv_scr_act());

    //show1_data = (uint8_t*)malloc(sizeof(uchar) * my_lv_img_dsc.data_size);
    lv_img_set_src(icon, &my_lv_img_dsc);


    lv_timer_t* timer1 = lv_timer_create(out_queue, 30, icon);


    /*Create a keyboard*/


    /*Create the second panel*/
    lv_obj_t* panel2 = lv_obj_create(parent);
    //lv_obj_set_height(panel2, LV_SIZE_CONTENT);

    lv_obj_t* panel2_title = lv_label_create(panel2);
    lv_label_set_text(panel2_title, "Body posture");
    lv_obj_add_style(panel2_title, &style_title, 0);



    /*Create the third panel*/
    lv_obj_t* panel3 = lv_obj_create(parent);
    //lv_obj_set_height(panel3, LV_SIZE_CONTENT);

    lv_obj_t* panel3_title = lv_label_create(panel3);
    lv_label_set_text(panel3_title, " Board environment");
    lv_obj_add_style(panel3_title, &style_title, 0);

    /*Create the fourth panel*/
    lv_obj_t* panel4 = lv_obj_create(parent);
    //lv_obj_set_height(panel4, LV_SIZE_CONTENT);

    lv_obj_t* panel4_title = lv_label_create(panel4);
    lv_label_set_text(panel4_title, LV_SYMBOL_LEFT "                                                     Voice                                                  " LV_SYMBOL_RIGHT);
    lv_obj_add_style(panel4_title, &style_title, 0);
    //lv_label_set_text(panel4_title, LV_SYMBOL_LEFT );


    if (disp_size == DISP_LARGE) {
        static lv_coord_t grid_main_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_main_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST };

        /*Create the top panel*/
        static lv_coord_t grid_1_col_dsc[] = { LV_GRID_CONTENT, 5, LV_GRID_CONTENT, LV_GRID_FR(2), LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_1_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, 10, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST };

        static lv_coord_t grid_2_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_2_row_dsc[] = {
                LV_GRID_CONTENT,  /*Title*/
                5,                /*Separator*/
                LV_GRID_CONTENT,  /*Box title*/
                30,               /*Boxes*/
                5,                /*Separator*/
                LV_GRID_CONTENT,  /*Box title*/
                30,               /*Boxes*/
                LV_GRID_TEMPLATE_LAST
        };


        lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc);

        lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_STRETCH, 0, 4);
        lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc);


        lv_obj_set_grid_cell(panel2, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_START, 0, 1);
        lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc);
        lv_obj_set_grid_cell(panel2_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);


        lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_STRETCH, 1, 1);
        lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc);
        lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);

        lv_obj_set_grid_cell(panel4, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_CENTER, 2, 1);
        lv_obj_set_grid_dsc_array(panel4, grid_1_col_dsc, grid_1_row_dsc);

    }
    else if (disp_size == DISP_MEDIUM) {
        static lv_coord_t grid_main_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_main_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST };


        /*Create the top panel*/
        static lv_coord_t grid_1_col_dsc[] = { LV_GRID_CONTENT, 1, LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_1_row_dsc[] = {
                LV_GRID_CONTENT, /*Name*/
                LV_GRID_CONTENT, /*Description*/
                LV_GRID_CONTENT, /*Email*/
                -20,
                LV_GRID_CONTENT, /*Phone*/
                LV_GRID_CONTENT, /*Buttons*/
                LV_GRID_TEMPLATE_LAST
        };

        static lv_coord_t grid_2_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_2_row_dsc[] = {
                LV_GRID_CONTENT,  /*Title*/
                5,                /*Separator*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_TEMPLATE_LAST
        };


        lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc);

        lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);
        lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc);


        lv_obj_set_grid_cell(panel2, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 1, 1);
        lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc);
        lv_obj_set_grid_cell(panel2_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);



        lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_STRETCH, 1, 1);
        lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc);
        lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);

        lv_obj_set_grid_cell(panel4, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);
        lv_obj_set_grid_dsc_array(panel4, grid_1_col_dsc, grid_1_row_dsc);

    }
    else if (disp_size == DISP_SMALL) {
        static lv_coord_t grid_main_col_dsc[] = { LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_main_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST };
        lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc);


        /*Create the top panel*/
        static lv_coord_t grid_1_col_dsc[] = { LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_1_row_dsc[] = { LV_GRID_CONTENT, /*Avatar*/
                                               LV_GRID_CONTENT, /*Name*/
                                               LV_GRID_CONTENT, /*Description*/
                                               LV_GRID_CONTENT, /*Email*/
                                               LV_GRID_CONTENT, /*Phone number*/
                                               LV_GRID_CONTENT, /*Button1*/
                                               LV_GRID_CONTENT, /*Button2*/
                                               LV_GRID_TEMPLATE_LAST
        };

        lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc);


        static lv_coord_t grid_2_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_2_row_dsc[] = {
                LV_GRID_CONTENT,  /*Title*/
                5,                /*Separator*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_CONTENT,  /*Box title*/
                40, LV_GRID_TEMPLATE_LAST               /*Box*/
        };

        lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc);
        lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc);
        lv_obj_set_grid_dsc_array(panel4, grid_2_col_dsc, grid_2_row_dsc);

        lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_CENTER, 0, 1);



        lv_obj_set_grid_cell(panel2, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 1, 1);
        lv_obj_set_grid_cell(panel2_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);



        lv_obj_set_height(panel3, LV_SIZE_CONTENT);
        lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 2, 1);
        lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);

        lv_obj_set_grid_cell(panel4, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_CENTER, 0, 1);


    }
}


/*void out_queue(lv_timer_t* timer)
{
    lv_obj_t* icon = (lv_obj_t*)timer->user_data;
    std::shared_ptr<mytest::GUIVideoData> guiVideoData;
    // std::lock_guard<std::mutex> lk(cache_mtx_);
    auto is_getitem = in_queue_.try_pop(&guiVideoData, std::chrono::microseconds(10));
    if(!is_getitem)
    {
        return;
    }
    memcpy(show1_data,guiVideoData->buffer,my_lv_img_dsc.data_size);
    //free(guiVideoData->buffer);会报错
    my_lv_img_dsc.data = (uint8_t*)show1_data;
    lv_img_set_src(icon, &my_lv_img_dsc);
}*/


static void profile_create2(lv_obj_t* parent)
{
    lv_obj_t* panel1 = lv_obj_create(parent);
    //lv_obj_set_height(panel1, LV_SIZE_CONTENT);

    lv_obj_t* panel_title = lv_label_create(panel1);
    lv_label_set_text(panel_title, "Each other's camera");
    lv_obj_add_style(panel_title, &style_title, 0);

    ////图片
    /*lv_obj_t* img1 = lv_img_create(lv_scr_act());
    lv_img_set_src(img1, &my_picture);
    lv_obj_align(img1, LV_ALIGN_OUT_LEFT_BOTTOM, 25, 100);*/






    /*Create the second panel*/
    lv_obj_t* panel2 = lv_obj_create(parent);
    //lv_obj_set_height(panel2, LV_SIZE_CONTENT);

    lv_obj_t* panel2_title = lv_label_create(panel2);
    lv_label_set_text(panel2_title, "Our camera");
    lv_obj_add_style(panel2_title, &style_title, 0);







    /*Create the third panel*/
    lv_obj_t* panel3 = lv_obj_create(parent);
    //lv_obj_set_height(panel3, LV_SIZE_CONTENT);

    lv_obj_t* panel3_title = lv_label_create(panel3);
    lv_label_set_text(panel3_title, "Video chat");
    lv_obj_add_style(panel3_title, &style_title, 0);

    /*Create the fourth panel*/
    lv_obj_t* panel4 = lv_obj_create(parent);
    //lv_obj_set_height(panel4, LV_SIZE_CONTENT);

    lv_obj_t* panel4_title = lv_label_create(panel4);
    lv_label_set_text(panel4_title, LV_SYMBOL_LEFT "                                                     Voice                                                  " LV_SYMBOL_RIGHT);
    lv_obj_add_style(panel4_title, &style_title, 0);
    //lv_label_set_text(panel4_title, LV_SYMBOL_LEFT );


    if (disp_size == DISP_LARGE) {
        static lv_coord_t grid_main_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_main_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST };

        /*Create the top panel*/
        static lv_coord_t grid_1_col_dsc[] = { LV_GRID_CONTENT, 5, LV_GRID_CONTENT, LV_GRID_FR(2), LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_1_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, 10, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST };

        static lv_coord_t grid_2_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_2_row_dsc[] = {
                LV_GRID_CONTENT,  /*Title*/
                5,                /*Separator*/
                LV_GRID_CONTENT,  /*Box title*/
                30,               /*Boxes*/
                5,                /*Separator*/
                LV_GRID_CONTENT,  /*Box title*/
                30,               /*Boxes*/
                LV_GRID_TEMPLATE_LAST
        };


        lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc);

        lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_STRETCH, 0, 2);
        lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc);


        lv_obj_set_grid_cell(panel2, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_START, 0, 1);
        lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc);
        lv_obj_set_grid_cell(panel2_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);


        lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_STRETCH, 1, 1);
        lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc);
        lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);

        lv_obj_set_grid_cell(panel4, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_CENTER, 2, 1);
        lv_obj_set_grid_dsc_array(panel4, grid_1_col_dsc, grid_1_row_dsc);

    }
    else if (disp_size == DISP_MEDIUM) {
        static lv_coord_t grid_main_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_main_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST };


        /*Create the top panel*/
        static lv_coord_t grid_1_col_dsc[] = { LV_GRID_CONTENT, 1, LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_1_row_dsc[] = {
                LV_GRID_CONTENT, /*Name*/
                LV_GRID_CONTENT, /*Description*/
                LV_GRID_CONTENT, /*Email*/
                -20,
                LV_GRID_CONTENT, /*Phone*/
                LV_GRID_CONTENT, /*Buttons*/
                LV_GRID_TEMPLATE_LAST
        };

        static lv_coord_t grid_2_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_2_row_dsc[] = {
                LV_GRID_CONTENT,  /*Title*/
                5,                /*Separator*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_TEMPLATE_LAST
        };


        lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc);

        lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);
        lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc);


        lv_obj_set_grid_cell(panel2, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 1, 1);
        lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc);
        lv_obj_set_grid_cell(panel2_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);



        lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_STRETCH, 1, 1);
        lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc);
        lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);

        lv_obj_set_grid_cell(panel4, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);
        lv_obj_set_grid_dsc_array(panel4, grid_1_col_dsc, grid_1_row_dsc);

    }
    else if (disp_size == DISP_SMALL) {
        static lv_coord_t grid_main_col_dsc[] = { LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_main_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST };
        lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc);


        /*Create the top panel*/
        static lv_coord_t grid_1_col_dsc[] = { LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_1_row_dsc[] = { LV_GRID_CONTENT, /*Avatar*/
                                               LV_GRID_CONTENT, /*Name*/
                                               LV_GRID_CONTENT, /*Description*/
                                               LV_GRID_CONTENT, /*Email*/
                                               LV_GRID_CONTENT, /*Phone number*/
                                               LV_GRID_CONTENT, /*Button1*/
                                               LV_GRID_CONTENT, /*Button2*/
                                               LV_GRID_TEMPLATE_LAST
        };

        lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc);


        static lv_coord_t grid_2_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_2_row_dsc[] = {
                LV_GRID_CONTENT,  /*Title*/
                5,                /*Separator*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_CONTENT,  /*Box title*/
                40, LV_GRID_TEMPLATE_LAST               /*Box*/
        };

        lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc);
        lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc);
        lv_obj_set_grid_dsc_array(panel4, grid_2_col_dsc, grid_2_row_dsc);

        lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_CENTER, 0, 1);



        lv_obj_set_grid_cell(panel2, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 1, 1);
        lv_obj_set_grid_cell(panel2_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);



        lv_obj_set_height(panel3, LV_SIZE_CONTENT);
        lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 2, 1);
        lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);

        lv_obj_set_grid_cell(panel4, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_CENTER, 0, 1);


    }
}
page_test

 

cd /userdata/01hcl/01myapp/10YLSYS

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/userdata/01hcl/lib:/userdata/01hcl/lib/ffmpeg:/userdata/01hcl/lib/mylibnsor

 

scp -r ./untitled3 root@192.168.1.10:/userdata/01hcl/01myapp/10YLSYS

 

video_test改进代码(有问题)

#include "page_test.h"
#include "opencv2/opencv.hpp"
#include "iostream"
#include <stdio.h>

LV_IMG_DECLARE(my_picture)

#define Image_Width 1920
#define Image_Height 1000



typedef enum {
    DISP_SMALL,
    DISP_MEDIUM,
    DISP_LARGE,
} disp_size_t;

static void profile_create(lv_obj_t* parent);
static void profile_create2(lv_obj_t* parent);

static void chart_event_cb(lv_event_t* e);



static disp_size_t disp_size;

static lv_obj_t* tv;
static lv_obj_t* calendar;
static lv_style_t style_text_muted;
static lv_style_t style_title;
static lv_style_t style_icon;
static lv_style_t style_bullet;


static const lv_font_t* font_large;
static const lv_font_t* font_normal;

void out_queue2(lv_timer_t* timer);


uint8_t* show2_data;
extern horizon::vision::BlockingQueue<std::shared_ptr<mytest::GUIVideoData>> in_queue_;
static lv_img_dsc_t  my_lv_img_dsc;
void image_take2(const char* string);


void lv_page(void)
{
    if (LV_HOR_RES <= 320) disp_size = DISP_SMALL;
    else if (LV_HOR_RES < 720) disp_size = DISP_MEDIUM;
    else disp_size = DISP_LARGE;

    font_large = LV_FONT_DEFAULT;
    font_normal = LV_FONT_DEFAULT;

    lv_coord_t tab_h;
    if (disp_size == DISP_LARGE) {
        tab_h = 70;
#if LV_FONT_MONTSERRAT_24
        font_large = &lv_font_montserrat_24;
#else
        LV_LOG_WARN("LV_FONT_MONTSERRAT_24 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead.");
#endif
#if LV_FONT_MONTSERRAT_16
        font_normal = &lv_font_montserrat_16;
#else
        LV_LOG_WARN("LV_FONT_MONTSERRAT_16 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead.");
#endif
    }
    else if (disp_size == DISP_MEDIUM) {
        tab_h = 45;
#if LV_FONT_MONTSERRAT_20
        font_large = &lv_font_montserrat_20;
#else
        LV_LOG_WARN("LV_FONT_MONTSERRAT_20 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead.");
#endif
#if LV_FONT_MONTSERRAT_14
        font_normal = &lv_font_montserrat_14;
#else
        LV_LOG_WARN("LV_FONT_MONTSERRAT_14 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead.");
#endif
    }
    else {   /* disp_size == DISP_SMALL */
        tab_h = 45;
#if LV_FONT_MONTSERRAT_18
        font_large = &lv_font_montserrat_18;
#else
        LV_LOG_WARN("LV_FONT_MONTSERRAT_18 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead.");
#endif
#if LV_FONT_MONTSERRAT_12
        font_normal = &lv_font_montserrat_12;
#else
        LV_LOG_WARN("LV_FONT_MONTSERRAT_12 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead.");
#endif
    }

#if LV_USE_THEME_DEFAULT
    lv_theme_default_init(NULL, lv_palette_main(LV_PALETTE_BLUE), lv_palette_main(LV_PALETTE_RED), LV_THEME_DEFAULT_DARK,
                          font_normal);
#endif

    lv_style_init(&style_text_muted);
    lv_style_set_text_opa(&style_text_muted, LV_OPA_50);

    lv_style_init(&style_title);
    lv_style_set_text_font(&style_title, font_large);

    lv_style_init(&style_icon);
    lv_style_set_text_color(&style_icon, lv_theme_get_color_primary(NULL));
    lv_style_set_text_font(&style_icon, font_large);

    lv_style_init(&style_bullet);
    lv_style_set_border_width(&style_bullet, 0);
    lv_style_set_radius(&style_bullet, LV_RADIUS_CIRCLE);

    tv = lv_tabview_create(lv_scr_act(), LV_DIR_TOP, tab_h);

    lv_obj_set_style_text_font(lv_scr_act(), font_normal, 0);

    if (disp_size == DISP_LARGE) {
        lv_obj_t* tab_btns = lv_tabview_get_tab_btns(tv);
        lv_obj_set_style_pad_left(tab_btns, LV_HOR_RES / 2, 0);
        lv_obj_t* logo = lv_img_create(tab_btns);
    }

    lv_obj_t* t1 = lv_tabview_add_tab(tv, "SCENE1");
    lv_obj_t* t2 = lv_tabview_add_tab(tv, "SCENE2");



    profile_create(t1);
    profile_create2(t2);
}


void out_queue2(lv_timer_t* timer)
{
    lv_obj_t* icon = (lv_obj_t*)timer->user_data;
    std::shared_ptr<mytest::GUIVideoData> guiVideoData;
    // std::lock_guard<std::mutex> lk(cache_mtx_);
    auto is_getitem = in_queue_.try_pop(&guiVideoData, std::chrono::microseconds(10));
    if(!is_getitem)
    {
        return;
    }
    memcpy(show2_data,guiVideoData->buffer,my_lv_img_dsc.data_size);
    //free(guiVideoData->buffer);会报错
    my_lv_img_dsc.data = (uint8_t*)show2_data;
    lv_img_set_src(icon, &my_lv_img_dsc);
}


/**********************
 *   STATIC FUNCTIONS
 **********************/

static void profile_create(lv_obj_t* parent)
{
    lv_obj_t* panel1 = lv_obj_create(parent);
    //lv_obj_set_height(panel1, LV_SIZE_CONTENT);

    //lv_obj_t* panel_title = lv_label_create(panel1);
    //lv_label_set_text(panel_title, "Wristband");
    //lv_obj_add_style(panel_title, &style_title, 0);


    //视频显示
    lv_obj_t* icon = lv_img_create(panel1);
    lv_obj_set_size(icon,800,700);
    lv_obj_move_foreground(icon);

    //lv_obj_add_flag(lv_layer_top(), LV_OBJ_FLAG_CLICKABLE);
    //lv_obj_move_background(panel1);

    my_lv_img_dsc.header.cf = LV_IMG_CF_TRUE_COLOR;
    my_lv_img_dsc.data_size = Image_Width * Image_Height * LV_COLOR_DEPTH / 80;
    my_lv_img_dsc.header.always_zero = 0;
    my_lv_img_dsc.header.w = Image_Width;
    my_lv_img_dsc.header.h = Image_Height;
    show2_data = (uint8_t*)malloc(sizeof(uchar) * my_lv_img_dsc.data_size);
    //image_take2("111.png");

    lv_img_set_src(icon, &my_lv_img_dsc);

    lv_timer_t* timer1 = lv_timer_create(out_queue2, 30, icon);


    /*Create a keyboard*/


    /*Create the second panel*/
    lv_obj_t* panel2 = lv_obj_create(parent);
    //lv_obj_set_height(panel2, LV_SIZE_CONTENT);

    lv_obj_t* panel2_title = lv_label_create(panel2);
    lv_label_set_text(panel2_title, "Body posture");
    lv_obj_add_style(panel2_title, &style_title, 0);


    /*Create the third panel*/
    lv_obj_t* panel3 = lv_obj_create(parent);
    //lv_obj_set_height(panel3, LV_SIZE_CONTENT);

    lv_obj_t* panel3_title = lv_label_create(panel3);
    lv_label_set_text(panel3_title, " Board environment");
    lv_obj_add_style(panel3_title, &style_title, 0);


    /*Create the fourth panel*/
    lv_obj_t* panel4 = lv_obj_create(parent);
    //lv_obj_set_height(panel4, LV_SIZE_CONTENT);

    lv_obj_t* panel4_title = lv_label_create(panel4);
    lv_label_set_text(panel4_title, LV_SYMBOL_LEFT "                                                     Voice                                                  " LV_SYMBOL_RIGHT);
    lv_obj_add_style(panel4_title, &style_title, 0);
    //lv_label_set_text(panel4_title, LV_SYMBOL_LEFT );


    if (disp_size == DISP_LARGE) {
        static lv_coord_t grid_main_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_main_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST };

        /*Create the top panel*/
        static lv_coord_t grid_1_col_dsc[] = { LV_GRID_CONTENT, 5, LV_GRID_CONTENT, LV_GRID_FR(2), LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_1_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, 10, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST };

        static lv_coord_t grid_2_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_2_row_dsc[] = {
                LV_GRID_CONTENT,  /*Title*/
                5,                /*Separator*/
                LV_GRID_CONTENT,  /*Box title*/
                30,               /*Boxes*/
                5,                /*Separator*/
                LV_GRID_CONTENT,  /*Box title*/
                30,               /*Boxes*/
                LV_GRID_TEMPLATE_LAST
        };


        lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc);

        lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_STRETCH, 0, 3);
        //lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc);


        lv_obj_set_grid_cell(panel2, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_START, 0, 1);
        lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc);
        lv_obj_set_grid_cell(panel2_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);


        lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_STRETCH, 1, 1);
        lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc);
        lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);

        lv_obj_set_grid_cell(panel4, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_CENTER, 2, 1);
        lv_obj_set_grid_dsc_array(panel4, grid_1_col_dsc, grid_1_row_dsc);

    }
    else if (disp_size == DISP_MEDIUM) {
        static lv_coord_t grid_main_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_main_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST };


        /*Create the top panel*/
        static lv_coord_t grid_1_col_dsc[] = { LV_GRID_CONTENT, 1, LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_1_row_dsc[] = {
                LV_GRID_CONTENT, /*Name*/
                LV_GRID_CONTENT, /*Description*/
                LV_GRID_CONTENT, /*Email*/
                -20,
                LV_GRID_CONTENT, /*Phone*/
                LV_GRID_CONTENT, /*Buttons*/
                LV_GRID_TEMPLATE_LAST
        };

        static lv_coord_t grid_2_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_2_row_dsc[] = {
                LV_GRID_CONTENT,  /*Title*/
                5,                /*Separator*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_TEMPLATE_LAST
        };


        lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc);

        lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);
        lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc);


        lv_obj_set_grid_cell(panel2, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 1, 1);
        lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc);
        lv_obj_set_grid_cell(panel2_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);



        lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_STRETCH, 1, 1);
        lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc);
        lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);

        lv_obj_set_grid_cell(panel4, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);
        lv_obj_set_grid_dsc_array(panel4, grid_1_col_dsc, grid_1_row_dsc);

    }
    else if (disp_size == DISP_SMALL) {
        static lv_coord_t grid_main_col_dsc[] = { LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_main_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST };
        lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc);


        /*Create the top panel*/
        static lv_coord_t grid_1_col_dsc[] = { LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_1_row_dsc[] = { LV_GRID_CONTENT, /*Avatar*/
                                               LV_GRID_CONTENT, /*Name*/
                                               LV_GRID_CONTENT, /*Description*/
                                               LV_GRID_CONTENT, /*Email*/
                                               LV_GRID_CONTENT, /*Phone number*/
                                               LV_GRID_CONTENT, /*Button1*/
                                               LV_GRID_CONTENT, /*Button2*/
                                               LV_GRID_TEMPLATE_LAST
        };

        lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc);


        static lv_coord_t grid_2_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_2_row_dsc[] = {
                LV_GRID_CONTENT,  /*Title*/
                5,                /*Separator*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_CONTENT,  /*Box title*/
                40, LV_GRID_TEMPLATE_LAST               /*Box*/
        };

        lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc);
        lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc);
        lv_obj_set_grid_dsc_array(panel4, grid_2_col_dsc, grid_2_row_dsc);

        lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_CENTER, 0, 1);



        lv_obj_set_grid_cell(panel2, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 1, 1);
        lv_obj_set_grid_cell(panel2_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);



        lv_obj_set_height(panel3, LV_SIZE_CONTENT);
        lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 2, 1);
        lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);

        lv_obj_set_grid_cell(panel4, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_CENTER, 0, 1);


    }
}

void image_take2(const char* string)
{
    cv::Mat in_image, out_image;
    in_image = cv::imread(string);
    cv::resize(in_image, out_image, cv::Size(Image_Width, Image_Height));
    uchar* buff = out_image.data;
    int* data32 = (int*)show2_data;
    for(int i = 0; i < Image_Width * Image_Height; i++)
    {
        int color = 0xff000000;
        color |= (buff[i * 3 + 0]) | (buff[i * 3 + 1] << 8) | (buff[i * 3 + 2] << 16);
        data32[i] = color;
    }
    my_lv_img_dsc.data = (uint8_t*)data32;
}



static void profile_create2(lv_obj_t* parent)
{
    lv_obj_t* panel1 = lv_obj_create(parent);
    //lv_obj_set_height(panel1, LV_SIZE_CONTENT);

    lv_obj_t* panel_title = lv_label_create(panel1);
    lv_label_set_text(panel_title, "Each other's camera");
    lv_obj_add_style(panel_title, &style_title, 0);

    ////图片
    /*lv_obj_t* img1 = lv_img_create(lv_scr_act());
    lv_img_set_src(img1, &my_picture);
    lv_obj_align(img1, LV_ALIGN_OUT_LEFT_BOTTOM, 25, 100);*/






    /*Create the second panel*/
    lv_obj_t* panel2 = lv_obj_create(parent);
    //lv_obj_set_height(panel2, LV_SIZE_CONTENT);

    lv_obj_t* panel2_title = lv_label_create(panel2);
    lv_label_set_text(panel2_title, "Our camera");
    lv_obj_add_style(panel2_title, &style_title, 0);







    /*Create the third panel*/
    lv_obj_t* panel3 = lv_obj_create(parent);
    //lv_obj_set_height(panel3, LV_SIZE_CONTENT);

    lv_obj_t* panel3_title = lv_label_create(panel3);
    lv_label_set_text(panel3_title, "Video chat");
    lv_obj_add_style(panel3_title, &style_title, 0);

    /*Create the fourth panel*/
    lv_obj_t* panel4 = lv_obj_create(parent);
    //lv_obj_set_height(panel4, LV_SIZE_CONTENT);

    lv_obj_t* panel4_title = lv_label_create(panel4);
    lv_label_set_text(panel4_title, LV_SYMBOL_LEFT "                                                     Voice                                                  " LV_SYMBOL_RIGHT);
    lv_obj_add_style(panel4_title, &style_title, 0);
    //lv_label_set_text(panel4_title, LV_SYMBOL_LEFT );


    if (disp_size == DISP_LARGE) {
        static lv_coord_t grid_main_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_main_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST };

        /*Create the top panel*/
        static lv_coord_t grid_1_col_dsc[] = { LV_GRID_CONTENT, 5, LV_GRID_CONTENT, LV_GRID_FR(2), LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_1_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, 10, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST };

        static lv_coord_t grid_2_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_2_row_dsc[] = {
                LV_GRID_CONTENT,  /*Title*/
                5,                /*Separator*/
                LV_GRID_CONTENT,  /*Box title*/
                30,               /*Boxes*/
                5,                /*Separator*/
                LV_GRID_CONTENT,  /*Box title*/
                30,               /*Boxes*/
                LV_GRID_TEMPLATE_LAST
        };


        lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc);

        lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_STRETCH, 0, 2);
        lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc);


        lv_obj_set_grid_cell(panel2, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_START, 0, 1);
        lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc);
        lv_obj_set_grid_cell(panel2_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);


        lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_STRETCH, 1, 1);
        lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc);
        lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);

        lv_obj_set_grid_cell(panel4, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_CENTER, 2, 1);
        lv_obj_set_grid_dsc_array(panel4, grid_1_col_dsc, grid_1_row_dsc);

    }
    else if (disp_size == DISP_MEDIUM) {
        static lv_coord_t grid_main_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_main_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST };


        /*Create the top panel*/
        static lv_coord_t grid_1_col_dsc[] = { LV_GRID_CONTENT, 1, LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_1_row_dsc[] = {
                LV_GRID_CONTENT, /*Name*/
                LV_GRID_CONTENT, /*Description*/
                LV_GRID_CONTENT, /*Email*/
                -20,
                LV_GRID_CONTENT, /*Phone*/
                LV_GRID_CONTENT, /*Buttons*/
                LV_GRID_TEMPLATE_LAST
        };

        static lv_coord_t grid_2_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_2_row_dsc[] = {
                LV_GRID_CONTENT,  /*Title*/
                5,                /*Separator*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_TEMPLATE_LAST
        };


        lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc);

        lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);
        lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc);


        lv_obj_set_grid_cell(panel2, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 1, 1);
        lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc);
        lv_obj_set_grid_cell(panel2_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);



        lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_STRETCH, 1, 1);
        lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc);
        lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);

        lv_obj_set_grid_cell(panel4, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);
        lv_obj_set_grid_dsc_array(panel4, grid_1_col_dsc, grid_1_row_dsc);

    }
    else if (disp_size == DISP_SMALL) {
        static lv_coord_t grid_main_col_dsc[] = { LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_main_row_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST };
        lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc);


        /*Create the top panel*/
        static lv_coord_t grid_1_col_dsc[] = { LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_1_row_dsc[] = { LV_GRID_CONTENT, /*Avatar*/
                                               LV_GRID_CONTENT, /*Name*/
                                               LV_GRID_CONTENT, /*Description*/
                                               LV_GRID_CONTENT, /*Email*/
                                               LV_GRID_CONTENT, /*Phone number*/
                                               LV_GRID_CONTENT, /*Button1*/
                                               LV_GRID_CONTENT, /*Button2*/
                                               LV_GRID_TEMPLATE_LAST
        };

        lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc);


        static lv_coord_t grid_2_col_dsc[] = { LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };
        static lv_coord_t grid_2_row_dsc[] = {
                LV_GRID_CONTENT,  /*Title*/
                5,                /*Separator*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_CONTENT,  /*Box title*/
                40,               /*Box*/
                LV_GRID_CONTENT,  /*Box title*/
                40, LV_GRID_TEMPLATE_LAST               /*Box*/
        };

        lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc);
        lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc);
        lv_obj_set_grid_dsc_array(panel4, grid_2_col_dsc, grid_2_row_dsc);

        lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_CENTER, 0, 1);



        lv_obj_set_grid_cell(panel2, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 1, 1);
        lv_obj_set_grid_cell(panel2_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);



        lv_obj_set_height(panel3, LV_SIZE_CONTENT);
        lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_START, 2, 1);
        lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);

        lv_obj_set_grid_cell(panel4, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_CENTER, 0, 1);


    }
}
video_test

 

 

 

 

 

X3 PI

docker run -it --rm -v "D:\Code\xj3\horizon_xj3_open_explorer_v2.2.3_20220617":/open_explorer -v "D:\Code\Linux\datasets":/data/horizon_x3/data -v "D:\Code\xj3\BPUCodes":/data/horizon_x3/codes openexplorer/ai_toolchain_centos_7:v1.13.6

docker run -d -it --name x3pai -p 50001:22-v "D:\Code\xj3\horizon_xj3_open_explorer_v2.2.3_20220617":/open_explorer -v "D:\Code\Linux\datasets":/data/horizon_x3/data -v "D:\Code\xj3\BPUCodes":/data/horizon_x3/codes --privileged=true openexplorer/ai_toolchain_centos_7:v1.13.6 /usr/sbin/init

 

 

 

 

 

 

 

 

 

 

 

 

 

AudioControlEngine audio_engine;
// 获取语音识别结果,假设为cmd_word
if (cmd_word == "打开日历") {
    QObject::connect(&audio_engine, &AudioControlEngine::signalOpenCalendar, w, &MainWindow::openCalendar);
    emit audio_engine.signalOpenCalendar();
}

 

 

 

 

 

在ROS中,实现话题需要创建发布者(Publisher)和订阅者(Subscriber)节点,并定义话题(Topic)以及消息类型(Message Type)等相关信息。以下是一个基本的话题实现流程:

1.定义消息类型

在ROS中,消息类型是指消息的数据结构和格式。每个话题都需要定义一个消息类型,以确保发布者和订阅者可以使用相同的数据格式进行通信。消息类型通常在ROS包中定义,包含一个.msg文件,其中包括消息的字段、类型和注释等信息。

例如,假设我们要实现一个名为/my_topic的话题,并且它将传递一个字符串类型的消息。为此,我们需要在一个ROS包中创建一个名为my_package的包,并在该包中创建一个名为MyMessage.msg的文件,其中包含以下内容:string message

2.创建发布者节点

创建发布者节点通常需要编写一个ROS节点,其中包括一个发布者对象和一个回调函数。在ROS中,发布者对象是由ros::Publisher类实现的,它负责将消息发布到特定的话题上。

例如,假设我们在C++中创建了一个名为my_publisher的节点,并且它要将消息发布到/my_topic话题上。为此,我们需要在节点的代码中包含以下内容:

#include <ros/ros.h>
#include <my_package/MyMessage.h>

int main(int argc, char **argv)
{
  ros::init(argc, argv, "my_publisher");
  ros::NodeHandle nh;
  ros::Publisher pub = nh.advertise<my_package::MyMessage>("/my_topic", 10);

  my_package::MyMessage msg;
  msg.message = "Hello, world!";

  ros::Rate rate(10);
  while (ros::ok())
  {
    pub.publish(msg);
    ros::spinOnce();
    rate.sleep();
  }

  return 0;
}

在上述代码中,我们创建了一个名为pub的发布者对象,并使用nh.advertise()函数将它绑定到/my_topic话题上。在主循环中,我们定义了一个名为msg的消息对象,并将其发布到话题上。

  1. 创建订阅者节点

创建订阅者节点也需要编写一个ROS节点,其中包括一个订阅者对象和一个回调函数。在ROS中,订阅者对象是由ros::Subscriber类实现的,它负责从特定的话题上订阅消息。

例如,假设我们在C++中创建了一个名为my_subscriber的节点,并且它要从/my_topic话题上订阅消息。为此,我们需要在节点的代码中包含以下内容:

ros::NodeHandle nh;
ros::Subscriber sub = nh.subscribe("my_topic", 1000, callback);
void callback(const MyMsg::ConstPtr& msg) {
    ROS_INFO("Name: %s, Age: %d, Height: %.2f", msg->name.c_str(), msg->age, msg->height);
}

上述代码创建了一个订阅者对象,用于订阅名为my_topic的话题,并定义了一个回调函数callback,用于处理接收到的消息。当订阅者接收到消息时,ROS会自动调用回调函数,并将接收到的消息作为参数传递给该函数。

  1. 运行节点

最后,需要运行发布者和订阅者节点,以便它们可以开始发布和订阅消息。可以使用ROS命令行工具或编写launch文件来启动节点。

总之,实现话题需要定义消息类型、创建发布者和订阅者对象,并编写相应的代码来发布和订阅消息。ROS库提供了一组简单的API,使得实现话题变得简单和方便。

这将启动ROS节点,并在话题“/my_topic”上传递消息。发布者节点将会定期发布包含“hello”字符串和一个计数器的自定义消息类型。订阅者节点将从话题上获取这些消息,并在收到消息时将其打印到终端上。

 

posted on 2022-04-13 09:42  ccxwyyjy  阅读(88)  评论(0)    收藏  举报