【Notas de estudio de Apollo】——Simulación de cámara

inserte la descripción de la imagen aquí

prefacio

Este artículo es un registro de estudio de Cyber ​​RT. Puede haber algunas partes imprecisas, incompletas o faltantes en el artículo. Por favor, indíquelo. El contenido de este capítulo es relativamente simple, directamente sobre el código y los resultados.
Dirección del curso : https://apollo.baidu.com/community/course/outline/329?activeId=10200
Para obtener más información, consulte :
[1] Notas de estudio del proyecto Apollo Spark—Clase 3 (módulo Apollo Cyber ​​​​RT explicación detallada y combate real) https://blog.csdn.net/sinat_52032317/article/details/126924375
[2] [Proyecto Apollo Spark] - Concepto básico cibernético | Mecanismo de comunicación
https://blog.csdn.net/ sinat_52032317/article/details /131878429?spm=1001.2014.3001.5501
[3] Capítulo 1: Introducción básica y práctica de Cyber ​​RT https://apollo.baidu.com/community/article/1093
[4] Capítulo 2: Análisis y práctica del mecanismo de comunicación Cyber ​​​​RT https://apollo.baidu.com/community/article/1094
[5] Capítulo 3: cognición y práctica de componentes https://apollo.baidu.com/community/article/1103
[ 6] Capítulo 4: Introducción y práctica de Cyber ​​​​RT Schedulinghttps://apollo.baidu.com/community/article/1106
[7] Capítulo 5: Uso de Cyber ​​RT para simulación de cámara https://apollo.baidu.com/community/article/1105

Acabado de código relacionado

Enlace: https://pan.baidu.com/s/1ENgXE4yQ1v4nJRjcfZtd8w?pwd=ht4c Código de extracción: ht4c

práctica de prueba

Directorio de archivos

Consulte el siguiente directorio de archivos para

camera_demo
|-- driver
    |-- camera_sim
    |   |-- BUILD
    |   |-- camera_driver.cc
|--BUILD
|--camera_demo.BUILD
|--cyberfile.xml

Gestión de paquetes Archivo BUILD y archivo cyberfile.xml

Consulte el artículo anterior https://blog.csdn.net/sinat_52032317/article/details/131878429?spm=1001.2014.3001.5501

programa fuente

camera_driver.cc

/*  
    需求: 发布摄像头仿真数据。
    实现:
        1.头文件;
        2.初始化 cyber 框架;
        3.创建节点;
        4.创建发布者;
        5.组织数据并发布;
        6.等待关闭。
*/
#include "cyber/cyber.h"
#include "modules/common_msgs/sensor_msgs/sensor_image.pb.h"

using apollo::drivers::Image;

int main(int argc, char *argv[])
{
    
    
    apollo::cyber::Init(argv[0]);

    // 3.创建节点;
    auto talker_node = apollo::cyber::CreateNode("camear_sim_node");
    // 4.创建发布者;
    auto talker = talker_node->CreateWriter<Image>("/image_sim");
    // 5.组织数据并发布;
    
    size_t width = 500;
    size_t height = 350;

    size_t cell = 50; // 单元格宽度
    size_t step = width * 3; // 一行像素数

    char black = 200;
    char white = 10;
    
    apollo::cyber::Rate rate(10.0);
    while (apollo::cyber::OK()){
    
    
        // 组织数据
        auto msg = std::make_shared<Image>();
        
        msg->set_frame_id("camera");
        auto now = apollo::cyber::Time::Now();
        msg->set_measurement_time(now.ToSecond());

        msg->set_width(width);
        msg->set_height(height);

        msg->set_encoding("rgb8");
        msg->set_step(msg->width() * 3); // 一图片行的元素个数
        
        size_t length = msg->width() * msg->height() * 3;
        char value[length]; 
        for (size_t i = 0; i < height; i++){
    
     // 遍历像素行
            for (size_t j = 0; j < step; j++){
    
     // 遍历列
                // 当前字节索引 value[i * step + j]
                int index = i * step + j;
                // 行赋值
                if (i / cell % 2 == 0){
    
     // 偶数行
                    value[index] = black;
                } 
                else {
    
    
                    value[index] = white;
                }
                // 列赋值
                // 偶数列,无需更改
                if (j / 3 / cell % 2 == 1) {
    
    // 奇数列,取反
                    value[index] = value[index] == white ? black : white;
                }
            }
        }
        msg->set_data(value);
        //发布
        talker->Write(msg);
        rate.Sleep();
    }
    // 6.等待关闭。
    apollo::cyber::WaitForShutdown();
    return 0;
}

CONSTRUIR

load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library")
load("//tools/install:install.bzl", "install", "install_src_files")
load("//tools:cpplint.bzl", "cpplint")
package(default_visibility = ["//visibility:public"])

cc_binary(
    name = "camera_driver",
    srcs = ["camera_driver.cc"],
    deps = ["//cyber",
            "//modules/common_msgs/sensor_msgs:sensor_image_cc_proto",
            ], 
)

install(
    name = "install",
    runtime_dest = "camera_demo/bin",
    targets = [
    ":camera_driver"
        ],
)

install_src_files(
    name = "install_src",
    src_dir = ["."],
    dest = "camera_demo/src/cyberatest",
    filter = "*",
)

Recuerda modificar las deps en la gestión de paquetes BUILD

correr

 ./bazel-bin/test/test_camera/camera_driver

Abra otra terminal para abrir DreamView

aem bootstrap start

Seleccione el canal de cámara apropiado

resultado

inserte la descripción de la imagen aquí

otras referencias

El controlador de la cámara apolo se encuentra en modules/drivers/camerael directorio de archivos, y el archivo de configuración correspondiente debe configurarse para funcionar normalmente. La sección README del documento se publica a continuación

Cámara

El paquete de la cámara está empaquetado en función del dispositivo de cámara USB V4L, que proporciona las funciones de recopilación y liberación de imágenes. En este controlador se utilizan una cámara de teleobjetivo y una cámara de enfoque corto.

Canales de salida

  • /apollo/sensor/cámara/front_12mm/imagen
  • /apollo/sensor/cámara/frontal_6mm/imagen
  • /apollo/sensor/cámara/front_fisheye/imagen
  • /apollo/sensor/cámara/left_fisheye/imagen
  • /apollo/sensor/cámara/right_fisheye/imagen
  • /apollo/sensor/cámara/rear_6mm/imagen

Inicie el controlador de la cámara

Modifique y confirme que los parámetros en el archivo de lanzamiento corresponden al vehículo real

# in docker
bash /apollo/scripts/camera.sh
# or
cd /apollo && cyber_launch start modules/drivers/camera/launch/camera.launch

Iniciar cámara + controlador de compresión de video

Modifique y confirme que los parámetros en el archivo de lanzamiento corresponden al vehículo real

# in docker
bash /apollo/scripts/camera_and_video.sh
# or
cd /apollo && cyber_launch start modules/drivers/camera/launch/camera_and_video.launch

### 常见问题
1. 如果出现报错“sh: 1: v4l2-ctl: not found”,需要安装v4l2库。

```bash
sudo apt-get install v4l-utils

Para obtener una explicación del controlador de la cámara, consulte este blogAnálisis del controlador de la cámara Apollo (29) Para obtener
ejemplos prácticos, consulte Autopilot Developers | Framework | ¿Cómo agregar su propia cámara USB en apollo?

Supongo que te gusta

Origin blog.csdn.net/sinat_52032317/article/details/132081793
Recomendado
Clasificación