可峰科技
1-不要试图去证明自己比别人能力强,
是因为不自信的人才去证明自己的能力,
大家要记住,
就是你在团队不要找同样的人,
团队应该找不同样的人,
就是你把自己的能力放下,
你是要有一种新的能力 把大家团结起来,
赋能别人的能力,
唯一的办法,
这帮聪明的人没有办法一起工作,
但是我在 就可以让他们一起工作,
这是一个强大的Leadership能力。
2-读书读的好的人,很少会想到去创业,而读书读的差的人,没人要他,他容易去创业,
所以不管你会读书不会读书,你有资源没有资源,机会都有,天生我材必有用,
你今天去想清楚,这世界成功的不是一条路,有很多的路
3-学些经济知识
展开
-
单个反光柱作为landmark,因输入角度异常导致ceres后端崩溃
使用ComputeUnscaledErrorWithoutRotation替换原先的ComputeUnscaledError。现在后端优化不会再抛出-nan的错误了。原创 2024-06-04 08:41:04 · 190 阅读 · 0 评论 -
cartographer ceres后端优化
这里引用一篇文章作用一:用户可以选择使用Problem::AddParameterBlock显式添加参数块;在显式添加的时候ceres会内部进行额外的正确性检查。当Problem::AddParameterBlock()不存在时,Problem::AddResidualBlock()会隐式添加参数块,因此不需要显式调用Problem::AddParameterBlock()函数。ps:类似构造函数,显式构造函数。原创 2024-02-28 16:24:43 · 539 阅读 · 0 评论 -
cartographer切换地图显示问题,临时解决方案
切换地图原创 2024-01-03 19:14:01 · 592 阅读 · 0 评论 -
windows使用vs2015编译grpc
妥妥的来2篇参考文章1-Windows+VS2015使用gRPC2-VS2015 编译和使用 gRPC基本上照着2篇博客来的说一下坑1-Active State Perl安装失败,这个原因是新版本的网络下载问题,建议直接下载完全安装版(30M左右)即可,不要下载简易安装版(5M左右)2-golang下载使用choco方式也是直接pass,后来从go中国网址上可以下载安装包,分享如下3-下载grpc直接从下官网比较慢,很奇怪用自带的Git Bash 直接git clone 反而下载很快。其他待原创 2021-01-26 20:43:46 · 241 阅读 · 0 评论 -
async_grpc探索
也许以后并不一定会用async_grpc,先来探索一下来篇科普参考,知道什么是同步什么是异步?什么是 RPC ?原创 2021-01-28 14:45:26 · 412 阅读 · 0 评论 -
cartographer proto文件使用
参考文章https://blog.csdn.net/aaa123524457/article/details/80592915举例切换到cartographer-master目录下,生成pb.cc和pb.h文件protoc -I=/home/peak/Downloads/cartographer-master/ --cpp_out=/home/peak/cartographer_grpc /home/peak/Downloads/cartographer-master/cartographer/clo原创 2020-10-23 09:52:15 · 564 阅读 · 0 评论 -
cartographer_grpc_server代码流程分析
map_builder_server_main.cc 还是Run函数第一句 cartographer::cloud::Run(FLAGS_configuration_directory, FLAGS_configuration_basename);继续跟进,Run函数里构造了MapBuilder,这个变量可以直接给cartographer_ros模块使用,而在这里成为了MapBuilderServer的成员变量。void Run(const s原创 2020-11-19 18:19:09 · 445 阅读 · 0 评论 -
cartographer遇到的问题小记
1、写完grpc客户端类,记得要在map_builder_server里面注册。例如 server_builder.RegisterHandler<handlers::OKagvWaitTrajectoryHandler>();2、一个函数里面不能出现2个枷锁,absl::MutexLock lock(&mutex_);原创 2020-10-22 21:23:40 · 310 阅读 · 0 评论 -
基于gRPC的保存地图和纯定位
保存地图# Finish the first trajectory. No further data will be accepted on it.rosservice call /finish_trajectory 0# Ask Cartographer to serialize its current state.# (press tab to quickly expand the parameter syntax)rosservice call /write_state "{filenam原创 2020-11-19 18:19:33 · 230 阅读 · 0 评论 -
cartographer实现对动态环境的子图优化(对变化大的区域添加新的子图,移除完全变化的子图)
slam,地图自动更新原创 2022-11-14 16:53:56 · 1327 阅读 · 13 评论 -
cartographer导航时优化速度间隔多少合适?
cartographer原创 2022-09-20 17:27:20 · 546 阅读 · 0 评论 -
cartographer线程池ThreadPool::DoWork()
cartographer 线程池原创 2022-08-18 17:44:56 · 365 阅读 · 0 评论 -
cartographer之OrderedMultiQueue::Dispatch()
先来看代码void OrderedMultiQueue::Dispatch() { while (true) { const Data* next_data = nullptr; Queue* next_queue = nullptr; QueueKey next_queue_key; // check data is coming or not //LOG(INFO) << "okagv enter forloop"; // must s原创 2022-05-19 20:35:30 · 611 阅读 · 0 评论 -
cartographer之pose_extrapolator
pose_extrapolator实现了订阅imu、odom、scan的匹配结果进行位姿的推断,我们先分析一下它的类,几个重要的外部接口,就是public的方法 // Returns the time of the last added pose or Time::min() if no pose was added // yet. common::Time GetLastPoseTime() const override; common::Time GetLastExtrapolatedT原创 2022-05-01 19:45:03 · 1202 阅读 · 4 评论 -
cartographer订阅话题的函数封装
template <typename MessageType>::ros::Subscriber SubscribeWithHandler( void (Node::*handler)(int, const std::string&, const typename MessageType::ConstPtr&), const int trajectory_id, const std::string& t原创 2021-09-24 14:05:15 · 325 阅读 · 0 评论 -
cartographer ceres匹配参数怎么调节?
感觉默认是最好的,真的TRAJECTORY_BUILDER_2D.ceres_scan_matcher.occupied_space_weight = 1. --1.TRAJECTORY_BUILDER_2D.ceres_scan_matcher.translation_weight = 10. --10.TRAJECTORY_BUILDER_2D.ceres_scan_matcher.rotation_weight = 40. --40.原创 2022-01-21 23:29:08 · 815 阅读 · 1 评论 -
cartographer点云匹配时为什么要重力对齐?
AddAccumulatedRangeData里面的这行代码的含义在这里插入代码片 const transform::Rigid2d pose_prediction = transform::Project2D( non_gravity_aligned_pose_prediction * gravity_alignment.inverse());```表面上只是重力对齐以后再处理,其实这里面还为后续的匹配与查找减轻了查找范围,因为* gravity_alignment.inverse()原创 2022-01-16 06:41:07 · 5283 阅读 · 3 评论 -
cartographer添加自己的grpc服务函数
第一步:在cartographer/cloud/proto的map_builder_service.proto文件中添加request和responce数据结构,如下,然后编译生成。message agv_UpdateTrajectoryRequest{ cartographer.transform.proto.Rigid3d initial_pose = 1; string trajectory_id = 2; bool use_initial_pose = 3;}message ag原创 2021-12-01 16:52:23 · 576 阅读 · 0 评论 -
导航的时候自动更新地图的思路,附使用cartographer的解决方案
首先说下原来错误的思路:就是新地图匹配上旧地图,然后就把旧地图替换,或者更新旧地图,这种思路错误的原因是,任何的匹配都是有匹配误差的,从1月份一直匹配到12月份,就算一个月的累积误差是1mm,12个月后也有1cm的误差了,这显然不是自动更新想看到的。那后来怎样的思路呢?这里我们总想着要扔掉旧地图,这就是错误的根源(死胡同),扔掉了旧地图就会出现上面的问题,1天不会有太大的误差,一个星期后就不好说喽,特别是环境变化大的场地。那这就遇到了似乎永远解决不了的难题,其实是我们进入了一个死胡同,那就是我们惯性思维原创 2021-10-17 23:30:19 · 2325 阅读 · 8 评论 -
cartographer里面约束的图示
在进行后端优化的时候,里面的约束关系像个蜘蛛网一样,一不小心就搞错了,这里画个图示有助于理解。先来解释一下intra和interintra-submap (where node ‘j’ was inserted into // submap ‘i’)node在submap里面的时候,node和submap之间的关系表示为intraintra --在内,内部inter-submap constraints (where node ‘j’ was not inserted // into subm原创 2021-10-01 17:34:18 · 922 阅读 · 0 评论 -
cartographer导航的时候更新地图
我的方案,1- 使用谷歌作者的overlapping_submaps_trimmer_2d来缩减地图,但是这个计算量太大了,我使用了局部计算来代替全局计算,这样间隔一段时间就缩减1-2个地图,计算量有所降低,其实还有更低的(还未实现,思路是不重复计算所有地图,维护一个数据,每次只更新新增的部分) std::vector<SubmapId> near_submap; if(newly_finished_submap_flag) { cartog原创 2021-10-01 16:11:36 · 1421 阅读 · 2 评论 -
cartographer之TrimSubmap
我们知道移除一个子图时最重要的是如何把约束关系移除,我们看看作者的思路,难道他写错了? 我们知道每一个子图中有固定数量的node_id,INTRA关系下不包含submap_id,则应该是除了自己本身以外的所有node_id std::set<NodeId> nodes_to_retain; for (const Constraint& constraint : parent_->data_.constraints) { if (constraint.tag ==原创 2021-09-30 21:15:37 · 619 阅读 · 0 评论 -
SLAM-2D激光畸变矫正
这个小伙子写的还可以,激光畸变矫正又叫激光运动畸变矫正,就是激光在扫描的时候激光头也在运动造成的点云数据误差,如何矫正呢?这里有答案https://github.com/LiuLimingCode/lidar_undistortion_2d这个已经无限接近正确答案了,就是最后的显示不太对,这里改一下, //作者的数据要这样显示 //double angle = (angles[alpha] < 0 || tfFuzzyZero(angles[alp原创 2021-09-11 15:23:55 · 666 阅读 · 4 评论 -
cartographer之CMakeList.txt
CMakeList.txt主要生成了库文件和可执行文件,介绍了如何预处理proto文件,以及后续的打包发布,这个里面可以看到程序使用了哪些第三方库,还有就是生成的库如何方便其他人调用。主要是方便软件编译和后期打包发布。ok,简单写下重要的注释# Copyright 2016 The Cartographer Authors## Licensed under the Apache License, Version 2.0 (the "License");# you may not use this f原创 2021-09-01 15:06:49 · 674 阅读 · 0 评论 -
cartographer之Node和submap
Node比较简单,先来看,在代码里这是TrajectoryNodenamespace cartographer{namespace mapping{struct TrajectoryNodePose{ struct ConstantPoseDate { common::time time; transform::Rigid local_pose; } transform::Rigid3d global_pose; absl::optional<Con原创 2021-07-28 22:15:49 · 741 阅读 · 0 评论 -
cartographer架构设计图
自己手绘了一张,图糙理不糙其实里面还有大量细节没有展示这里简单介绍一下:我们都知道运行cartographer的ros程序有2个包一个是cartographer自己的库文件,还有一个是接收ros话题然后传给cartographer的node包。而cartographer在代码架构上是如何处理数据并显示的呢?这里展开叙述一下:1-数据先传递给GlobalTrajectory类,然后GlobalTrajectory类传递给LocalTrajectory类,2-LocalTrajectory类中使用原创 2021-07-27 16:09:12 · 1085 阅读 · 0 评论 -
cartographer给ros开放的接口
通过查询Interface, cartograher给ros端留了3个接口:1-cartographer::mapping::MapBuilderInterface2-cartographer::mapping::PoseGraphInterface3-cartographer::mapping::TrajectoryBuilderInterface主要是2个,MapBuilderInterface,TrajectoryBuilderInterface,我们看看MapBuilderInterfac原创 2021-07-24 18:02:37 · 529 阅读 · 0 评论 -
cartographer离线利用pbstream生成ros标准格式地图
参考文章https://blog.csdn.net/xiekaikaibing/article/details/80320822自己测试rosrun cartographer_ros cartographer_pbstream_to_ros_map -map_filestem=/home/cabin/Desktop/carto_map_define -pbstream_filename=/home/cabin/Desktop/carto_map.pbstream -resolution=0.05生原创 2021-07-23 08:42:23 · 554 阅读 · 0 评论 -
cartographer地图自动定时更新,初版
我是怀着激动的心情写这篇博客的,之前写了一个接口自动比较新老地图,然后在某个位置自动更新地图,测试结果还算满意。更新匹配的非常好,已经平稳运行3天,在更新的地方有些地图偏移,但偏移很小不影响运行。cartographer给你点个赞!这篇博客的目的是,写一个定时器,让程序间隔一段时间自动更新(就不需要在某个地方停下来,单独更新地图),在程序里为了不影响主程序运行,这里需要拷贝一份地图数据用于更新线程,拷贝部分已经写完,测试成功,主要代码如下void PoseGraph2D::TrimmingHandle原创 2021-07-01 20:36:54 · 1554 阅读 · 2 评论 -
cartographer自动更新地图 初探
其实cartographer的地图更新,就是用新扫描的地图替换老地图,这里在加载老地图的时候,要加载TrajectoryState::FROZEN状态的地图,这样新地图就按照老地图为坐标系进行匹配和导航了。cartographer里面自带的移除老地图的功能是考虑建图模式的情况,所以在导航模式时,我们不能任性移除老地图,因为这样会带来定位灾难(老地图可能因为移除局部而整体变形)所以我们加载老地图的时候,加载模式为TrajectoryState::FROZEN状态,所以我们只要在结束导航的时候,自己写一个接原创 2021-06-22 15:36:57 · 1752 阅读 · 9 评论 -
cartographer再看线程池(有图)
结束建图代码cartographer_ros_msgs::StatusResponse Node::FinishTrajectoryUnderLock( const int trajectory_id) { cartographer_ros_msgs::StatusResponse status_response; if (trajectories_scheduled_for_finish_.count(trajectory_id)) { status_response.messa原创 2021-04-20 17:10:28 · 426 阅读 · 0 评论 -
cartographer不经过线程池,直接的删除路径
1-首先是结束建图路径void PoseGraph2D::FinishTrajectory(const int trajectory_id) { /* AddWorkItem([this, trajectory_id]() LOCKS_EXCLUDED(mutex_) { absl::MutexLock locker(&mutex_); CHECK(!IsTrajectoryFinished(trajectory_id)); data_.trajectories_s原创 2021-04-19 17:11:30 · 498 阅读 · 0 评论 -
cartographer WritePbstream分析
先来保存代码void WritePbStream( const mapping::PoseGraph& pose_graph, const std::map<int, mapping::proto::TrajectoryBuilderOptionsWithSensorIds>& trajectory_builder_options, ProtoStreamWriterInterface* const writer, bool includ原创 2021-03-26 15:09:25 · 423 阅读 · 0 评论 -
cartographer程序移植到空白环境的电脑
把已经打包安装的cartographer程序放到新的环境中需要安装哪些库文件呢?我们一边运行一边看结果1-第一个报错的是glog文件,图我没有拍安装这个解决:sudo apt-get install libgoogle-glog-dev2-第二个报错的是这个安装这个解决:sudo apt-get install libsuitesparse-dev3-第三个报错的是这个安装protobuf解决,这里有个小插曲,因为之前安装过程序,所以原包中包含生成的中间文件,所以在新电脑中怎么都安装不原创 2021-03-22 19:37:59 · 303 阅读 · 2 评论 -
cartographer中ros和grpc交互的使用办法
注释:这篇文章是写给自己的,由于cartographer的grpc服务器需要客户端上传激光数据给服务器,所以作者实例化了MapBuilderStub并传递给map_builder_server。对于我来说只有一台设备,就不想搞这么麻烦,就把MapBuilder实例化并传给map_builder_server,这样就不需要激光数据打包再拆包的过程了,cpu明显降低。这里和本话题有点关系,但是并不大。grpc的好处是可以高效的上传图像数据,我们就可以在任何地方绘图显示,但是cartographer的前端又做了原创 2021-03-19 08:35:01 · 1090 阅读 · 0 评论 -
SLAM系统产品化设计
巴拉巴拉不知道怎么设计。。。参考一下其他家产品原创 2021-03-17 08:35:41 · 339 阅读 · 0 评论 -
cartographer占用CPU过高?那只是作者留了道练习题
cartographer的博物馆demo之所以cpu过高,是因为他的前端和后端都使用了比较冗余的计算参数,其实有些是不必要的,比如可以把激光的采样间隔设置大一些,demo的帧率为30Hz,设置为0.25则变成12Hz,够用。 rangefinder_sampling_ratio = 0.25, --1.前端不要使用CSM,有IMU的情况不用使用CSM激光匹配。TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = false接原创 2021-03-12 17:57:20 · 2718 阅读 · 10 评论 -
cartographer的后端核心,后端优化OptimizationProblem2D::Solve
简介:cartograoher使用位姿图优化来slam,从代码上来看是一股脑的处理所有数据,这样当数据不断增长时就很不利,可以试试因子图的方案,或者是vins的策略。cartographer也不是一点也没有,他使用了frozen_trajectories的策略,就是该路径不需要再优化就设置为frozen,但是何时设置为Frozen呢?这是个问题,所以cartographer是希望大地图是由小地图拼起来的,每次建小地图然后保存,然后再加载时设置为frozen,然后再建新图再一起保存。虽然功能上还是有些可以优原创 2021-03-11 14:25:03 · 1131 阅读 · 0 评论 -
cartographer参数不够用?自己自定义参数
比如我想在pose_graph_2d.cc中新增一个参数控制系统后端优化的频率,怎么添加呢?第一步:pose_graph_options.proto添加新变量double local_constraint_search_after_n_seconds = 12;12是proto文件的序号,每个参数不同即可。然后编译程序。一般为cmake .. makesudo make intsall第2步 在pose_graph.cc文件中添加要加载的该变量 options.set_local_c原创 2021-03-11 09:33:55 · 394 阅读 · 0 评论 -
cartographer自动更新地图有没有可能?答案是:Yes
cartographer更新地图的机制:通过使用overlapping_submaps_trimmer_2d.cc来移除重复子图(大部分面积被其他子图覆盖)来实现,并保留最新的子图。talk is cheap, show other’s code#include "cartographer/mapping/internal/2d/overlapping_submaps_trimmer_2d.h"#include <algorithm>#include "cartographer/ma原创 2021-03-10 14:25:02 · 1575 阅读 · 16 评论