【Apollo学习笔记】—— 相机仿真

在这里插入图片描述

文章目录

  • 前言
    • 相关代码整理
  • 测试实践
    • 文件目录
    • 包管理BUILD文件以及cyberfile.xml文件
    • 源程序
    • BUILD
    • 运行
    • 结果
    • 其他参考
    • Camera
      • Output channels
      • 启动camera驱动
      • 启动camera + video compression驱动

前言

本文是对Cyber RT的学习记录,文章可能存在不严谨、不完善、有缺漏的部分,还请大家多多指出。这一章的内容还是比较简单的,直接上代码与结果。
课程地址: https://apollo.baidu.com/community/course/outline/329?activeId=10200
更多还请参考:
[1] Apollo星火计划学习笔记——第三讲(Apollo Cyber RT 模块详解与实战)https://blog.csdn.net/sinat_52032317/article/details/126924375
[2] 【Apollo星火计划】—— Cyber基础概念|通信机制
https://blog.csdn.net/sinat_52032317/article/details/131878429?spm=1001.2014.3001.5501
[3] 第一章:Cyber RT基础入门与实践https://apollo.baidu.com/community/article/1093
[4] 第二章:Cyber RT通信机制解析与实践https://apollo.baidu.com/community/article/1094
[5] 第三章:Component组件认知与实践https://apollo.baidu.com/community/article/1103
[6] 第四章:Cyber RT之调度简介与实践https://apollo.baidu.com/community/article/1106
[7] 第五章:使用Cyber RT进行相机仿真https://apollo.baidu.com/community/article/1105

相关代码整理

链接: https://pan.baidu.com/s/1ENgXE4yQ1v4nJRjcfZtd8w?pwd=ht4c 提取码: ht4c

测试实践

文件目录

参考以下文件目录进行

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

包管理BUILD文件以及cyberfile.xml文件

参考之前的文章https://blog.csdn.net/sinat_52032317/article/details/131878429?spm=1001.2014.3001.5501

源程序

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;
}

BUILD

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 = "*",
)

记得修改包管理BUILD中的deps

运行

 ./bazel-bin/test/test_camera/camera_driver

另开一个终端打开DreamView

aem bootstrap start

选定合适的camera channel

结果

在这里插入图片描述

其他参考

apollo相机驱动在modules/drivers/camera文件目录下,需要设置好相应的配置文件,才能进行正常驱动。下面贴出文档中的README部分

Camera

camera包是基于V4L USB相机设备实现封装,提供图像采集及发布的功能。本驱动中使用了一台长焦相机和一台短焦相机。

Output channels

  • /apollo/sensor/camera/front_12mm/image
  • /apollo/sensor/camera/front_6mm/image
  • /apollo/sensor/camera/front_fisheye/image
  • /apollo/sensor/camera/left_fisheye/image
  • /apollo/sensor/camera/right_fisheye/image
  • /apollo/sensor/camera/rear_6mm/image

启动camera驱动

请先修改并确认launch文件中的参数与实际车辆相对应

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

启动camera + video compression驱动

请先修改并确认launch文件中的参数与实际车辆相对应

# 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

camera 驱动解释可以参考这篇博客Apollo camera驱动分析(二十九)
实践例子可参考自动驾驶开发者说|框架|如何在apollo中添加自己的USB摄像头?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/52771.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Posix API原理返回值说明

文章目录 1、概述2、connect函数3、listen函数4、accept返回值处理5、recv返回值处理5.1、LT\ET模式读取数据 6、send返回值处理 1、概述 主要介绍网络编程中&#xff0c;使用到的一些系统调用解释&#xff0c;以及返回值的说明 2、connect函数 connect函数功能为&#xff0c;客…

WiFi无线组网温湿度实时监测系统

近年来随着我国电子技术和无线通信技术的快速发展&#xff0c;远距离数据采集传输被应用到众多领域&#xff0c;由于事关环境安全和生命健康&#xff0c;受到了各行各界的关注。在温湿度监测中&#xff0c;目前采用的通信技术主要是4G、WiFi、以太网、LoRa等&#xff0c;今天&a…

C++多线程环境下的单例类对象创建

使用C无锁编程实现多线程下的单例模式 贺志国 2023.8.1 在多线程环境下创建一个类的单例对象&#xff0c;要比单线程环境下要复杂很多。下面介绍在多线程环境下实现单例模式的几种方法。 一、尺寸较小的类单例对象创建 如果待创建的单例类SingletonForMultithread内包含的成…

kernel pwn入门

Linux Kernel 介绍 Linux 内核是 Linux 操作系统的核心组件&#xff0c;它提供了操作系统的基本功能和服务。它是一个开源软件&#xff0c;由 Linus Torvalds 在 1991 年开始开发&#xff0c;并得到了全球广泛的贡献和支持。 Linux 内核的主要功能包括进程管理、内存管理、文…

命令模式 Command Pattern 《游戏设计模式》学习笔记

对于一般的按键输入&#xff0c;我们通常这么做&#xff0c;直接if按了什么键&#xff0c;就执行相应的操作 在这里我们是将用户的输入和程序行为硬编码在一起&#xff0c;这是我们很自然就想到的最快的做法。 但是如果这是一个大型游戏&#xff0c;往往我们需要实现一个按键…

电气防火限流式保护器在汽车充电桩使用上的作用

【摘要】 随着电动汽车行业的不断发展&#xff0c;电动汽车充电设施的使用会变得越来越频繁和广泛。根据中汽协数据显示&#xff0c;2022年上半年&#xff0c;我国新能源汽车产销分别完成266.1万辆和260万辆,同比均增长1.2倍,市场渗透率达21.6%。因此&#xff0c;电动汽车的安全…

【ChatGPT 指令大全】怎么使用ChatGPT写履历和通过面试

目录 怎么使用ChatGPT写履历 寻求履历的反馈 为履历加上量化数据 把经历修精简 为不同公司客制化撰写履历 怎么使用ChatGPT通过面试 汇整面试题目 给予回馈 提供追问的问题 用 STAR 原则回答面试问题 感谢面试官的 email 总结 在职场竞争激烈的今天&#xff0c;写一…

OpenSource - 分布式重试平台

文章目录 概述重试方案对比设计思想流量管理平台预览场景应用强通知场景发送MQ场景回调场景异步场景 概述 在当前广泛流行的分布式系统中&#xff0c;确保系统数据的一致性和正确性是一项重大挑战。为了解决分布式事务问题&#xff0c;涌现了许多理论和业务实践&#xff0c;其…

Android Studio 屏幕适配

Android开发屏幕适配流程 首先studio中没有ScreenMatch这个插件的&#xff0c;下去现在这个插件 点击File->settings->Plugins->(搜索ScreenMatch插件)&#xff0c;点击下载&#xff0c;应用重启Studio即可&#xff0c;如下图 在values下 创建dimens.xml&#xff0c…

IO进程线程day7(2023.8.4)

一、Xmind整理&#xff1a; 二、课上练习&#xff1a; 练习1&#xff1a;创建两个线程&#xff1a;其中一个线程拷贝前半部分&#xff0c;另一个线程拷贝后半部分。 只允许开一份资源&#xff0c;且用互斥锁方式实现。 提示&#xff1a;找临界区--->找临界资源。 #includ…

面试热题(最长回文子串)

给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串 输入&#xff1a;s "babad" 输出&#xff1a;"bab" 最长回文子串以前的博客已经讲过KMP算法以及比较不常见的Manacher算法…

Gartner发布《2023年全球RPA魔力象限》:90%RPA厂商,将提供生成式AI自动化

8月3日&#xff0c;全球著名咨询调查机构Gartner发布了《2023年全球RPA魔力象限》&#xff0c;通过产品能力、技术创新、市场影响力等维度&#xff0c;对全球16家卓越RPA厂商进行了深度评估。 弘玑Cyclone&#xff08;Cyclone Robotics&#xff09;、来也&#xff08;Laiye&am…