前言
本文是對(duì)Cyber RT的學(xué)習(xí)記錄,文章可能存在不嚴(yán)謹(jǐn)、不完善、有缺漏的部分,還請(qǐng)大家多多指出。這一章的內(nèi)容還是比較簡(jiǎn)單的,直接上代碼與結(jié)果。
課程地址: https://apollo.baidu.com/community/course/outline/329?activeId=10200
更多還請(qǐng)參考:
[1] Apollo星火計(jì)劃學(xué)習(xí)筆記——第三講(Apollo Cyber RT 模塊詳解與實(shí)戰(zhàn))https://blog.csdn.net/sinat_52032317/article/details/126924375
[2] 【Apollo星火計(jì)劃】—— Cyber基礎(chǔ)概念|通信機(jī)制
https://blog.csdn.net/sinat_52032317/article/details/131878429?spm=1001.2014.3001.5501
[3] 第一章:Cyber RT基礎(chǔ)入門與實(shí)踐https://apollo.baidu.com/community/article/1093
[4] 第二章:Cyber RT通信機(jī)制解析與實(shí)踐https://apollo.baidu.com/community/article/1094
[5] 第三章:Component組件認(rèn)知與實(shí)踐https://apollo.baidu.com/community/article/1103
[6] 第四章:Cyber RT之調(diào)度簡(jiǎn)介與實(shí)踐https://apollo.baidu.com/community/article/1106
[7] 第五章:使用Cyber RT進(jìn)行相機(jī)仿真https://apollo.baidu.com/community/article/1105相關(guān)代碼整理
鏈接: https://pan.baidu.com/s/1ENgXE4yQ1v4nJRjcfZtd8w?pwd=ht4c 提取碼: ht4c
測(cè)試實(shí)踐
文件目錄
參考以下文件目錄進(jìn)行
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
/*
需求: 發(fā)布攝像頭仿真數(shù)據(jù)。
實(shí)現(xiàn):
1.頭文件;
2.初始化 cyber 框架;
3.創(chuàng)建節(jié)點(diǎn);
4.創(chuàng)建發(fā)布者;
5.組織數(shù)據(jù)并發(fā)布;
6.等待關(guān)閉。
*/
#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.創(chuàng)建節(jié)點(diǎn);
auto talker_node = apollo::cyber::CreateNode("camear_sim_node");
// 4.創(chuàng)建發(fā)布者;
auto talker = talker_node->CreateWriter<Image>("/image_sim");
// 5.組織數(shù)據(jù)并發(fā)布;
size_t width = 500;
size_t height = 350;
size_t cell = 50; // 單元格寬度
size_t step = width * 3; // 一行像素?cái)?shù)
char black = 200;
char white = 10;
apollo::cyber::Rate rate(10.0);
while (apollo::cyber::OK()){
// 組織數(shù)據(jù)
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); // 一圖片行的元素個(gè)數(shù)
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++){ // 遍歷列
// 當(dāng)前字節(jié)索引 value[i * step + j]
int index = i * step + j;
// 行賦值
if (i / cell % 2 == 0){ // 偶數(shù)行
value[index] = black;
}
else {
value[index] = white;
}
// 列賦值
// 偶數(shù)列,無(wú)需更改
if (j / 3 / cell % 2 == 1) {// 奇數(shù)列,取反
value[index] = value[index] == white ? black : white;
}
}
}
msg->set_data(value);
//發(fā)布
talker->Write(msg);
rate.Sleep();
}
// 6.等待關(guān)閉。
apollo::cyber::WaitForShutdown();
return 0;
}
BUILD
load("@rules_cc//cc:defs.bzl", "cc_binary", "cc_library")
load("http://tools/install:install.bzl", "install", "install_src_files")
load("http://tools:cpplint.bzl", "cpplint")
package(default_visibility = ["http://visibility:public"])
cc_binary(
name = "camera_driver",
srcs = ["camera_driver.cc"],
deps = ["http://cyber",
"http://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
運(yùn)行
./bazel-bin/test/test_camera/camera_driver
另開(kāi)一個(gè)終端打開(kāi)DreamView
aem bootstrap start
選定合適的camera channel
結(jié)果
其他參考
apollo相機(jī)驅(qū)動(dòng)在modules/drivers/camera
文件目錄下,需要設(shè)置好相應(yīng)的配置文件,才能進(jìn)行正常驅(qū)動(dòng)。下面貼出文檔中的README部分
Camera
camera包是基于V4L USB相機(jī)設(shè)備實(shí)現(xiàn)封裝,提供圖像采集及發(fā)布的功能。本驅(qū)動(dòng)中使用了一臺(tái)長(zhǎng)焦相機(jī)和一臺(tái)短焦相機(jī)。
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
啟動(dòng)camera驅(qū)動(dòng)
請(qǐng)先修改并確認(rèn)launch文件中的參數(shù)與實(shí)際車輛相對(duì)應(yīng)
# in docker
bash /apollo/scripts/camera.sh
# or
cd /apollo && cyber_launch start modules/drivers/camera/launch/camera.launch
啟動(dòng)camera + video compression驅(qū)動(dòng)
請(qǐng)先修改并確認(rèn)launch文件中的參數(shù)與實(shí)際車輛相對(duì)應(yīng)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-638227.html
# in docker
bash /apollo/scripts/camera_and_video.sh
# or
cd /apollo && cyber_launch start modules/drivers/camera/launch/camera_and_video.launch
### 常見(jiàn)問(wèn)題
1. 如果出現(xiàn)報(bào)錯(cuò)“sh: 1: v4l2-ctl: not found”,需要安裝v4l2庫(kù)。
```bash
sudo apt-get install v4l-utils
camera 驅(qū)動(dòng)解釋可以參考這篇博客Apollo camera驅(qū)動(dòng)分析(二十九)
實(shí)踐例子可參考自動(dòng)駕駛開(kāi)發(fā)者說(shuō)|框架|如何在apollo中添加自己的USB攝像頭?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-638227.html
到了這里,關(guān)于【Apollo學(xué)習(xí)筆記】—— 相機(jī)仿真的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!