Directorio de artículos
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/1105Acabado 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
otras referencias
El controlador de la cámara apolo se encuentra en modules/drivers/camera
el 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?