博客
关于我
CyberRT使用笔记
阅读量:237 次
发布时间:2019-03-01

本文共 3303 字,大约阅读时间需要 11 分钟。

项目代码解析与实现

1. 头文件包含

#include 
#include
#include

2. 预定义与类型声明

using apollo::cyber::Writer;using apollo::cyber::Reader;using apollo::cyber::Time;using apollo::cyber::Node;using apollo::drivers::Gps;using apollo::drivers::Image;using apollo::drivers::Imu;using apollo::drivers::PCLPointCloud2Array;using apollo::cyber::record::RecordReader;using apollo::cyber::record::RecordViewer;

3. 读取数据的实现

std::shared_ptr
record_reader_ptr = std::make_shared
(file_path);std::set
channel_list = record_reader_ptr->GetChannelList();std::shared_ptr
recorder_viewer = std::make_shared
(record_reader_ptr);for (const auto& msg : *recorder_viewer) { if (msg.channel_name == channel_name_) { double time = msg.time; Gps gps_msg; gps_msg.ParseFromString(msg.content); }}

4. 节点初始化与数据处理

class Scheduler {public:    Scheduler();    ~Scheduler();    void initialize(const std::vector
& params); void run();private: void imuHandler(const std::shared_ptr
& msg); void gpsHandler(const std::shared_ptr
& msg); void cloudHandler(const std::shared_ptr
& msg);private: std::unique_ptr
node_; GpsReaderPtr gps_reader_; PointCloud2ArrayReaderPtr cloud_reader_;};

5. 初始化节点

void Scheduler::initialize() {    gps_reader_ = node_->CreateReader
("gps_topic", 5, [this](const std::shared_ptr
& msg) { gpsHandler(msg); }); cloud_reader_ = node_->CreateReader
("cloud_topic", 5, [this](const std::shared_ptr
& msg) { cloudHandler(msg); }); imu_reader_ = node_->CreateReader
("imu_topic", 10, [this](const std::shared_ptr
& msg) { imuHandler(msg); });}

6. 回调函数实现

void Scheduler::gpsHandler(const std::shared_ptr
& msg) { double x = pose_msg->pos().x(); double y = pose_msg->pos().y(); double z = pose_msg->pos().z();}void Scheduler::cloudHandler(const std::shared_ptr
& msg) { pcl::PointCloud
::Ptr cloud(new pcl::PointCloud
()); adlab::common::util::fromProto(*(msg->mutable_clouds(0)), *cloud->get());}void Scheduler::imuHandler(const std::shared_ptr
& msg) { double time = static_cast
(msg->utime()) * 1e-6; const auto& acc = msg->linear_accel(); Eigen::Vector3d acceleration(acc.x(), acc.y(), acc.z()); const auto& omega = msg->rotation_rate(); Eigen::Vector3d angular_velocity(omega.x(), omega.y(), omega.z());}

7. 主函数实现

#include 
#include
DEFINE_string(configs, "configs.yaml", "");int main(int argc, char** argv) { google::ParseCommandLineFlags(&argc, &argv, true); std::vector
arguments; arguments.push_back(FLAGS_configs); adlab::cyber::Init(argv[0]); google::SetLogDestination(google::INFO, ""); ros::init(argc, argv, "node"); Scheduler scheduler; scheduler.initialize(arguments); adlab::cyber::Rate rate(10); while (adlab::cyber::OK()) { scheduler.run(); rate.Sleep(); } adlab::cyber::WaitForShutdown(); return 0;}

操作指南

1. 播放记录

cyber_record play -f data

2. 查看记录信息

cyber_record info data

转载地址:http://whgv.baihongyu.com/

你可能感兴趣的文章
Objective-C实现nested brackets嵌套括号算法(附完整源码)
查看>>
Objective-C实现nevilles method多项式插值算法(附完整源码)
查看>>
Objective-C实现newtons second law of motion牛顿第二运动定律算法(附完整源码)
查看>>
Objective-C实现newton_raphson牛顿拉夫森算法(附完整源码)
查看>>
Objective-C实现NLP中文分词(附完整源码)
查看>>
Objective-C实现NLP中文分词(附完整源码)
查看>>
Objective-C实现not gate非门算法(附完整源码)
查看>>
Objective-C实现number of digits解字符数算法(附完整源码)
查看>>
Objective-C实现NumberOfIslands岛屿的个数算法(附完整源码)
查看>>
Objective-C实现n皇后问题算法(附完整源码)
查看>>
Objective-C实现OCR文字识别(附完整源码)
查看>>
Objective-C实现odd even sort奇偶排序算法(附完整源码)
查看>>
Objective-C实现page rank算法(附完整源码)
查看>>
Objective-C实现PageRank算法(附完整源码)
查看>>
Objective-C实现pascalTriangle帕斯卡三角形算法(附完整源码)
查看>>
Objective-C实现perfect cube完全立方数算法(附完整源码)
查看>>
Objective-C实现PNG图片格式转换BMP图片格式(附完整源码)
查看>>
Objective-C实现pollard rho大数分解算法(附完整源码)
查看>>
Objective-C实现quick select快速选择算法(附完整源码)
查看>>
Objective-C实现recursive bubble sor递归冒泡排序算法(附完整源码)
查看>>