自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Robin's Home

将互联网,5G,人工智能技术应用于工业互联网,智能制造领域,助力中国制造2025

  • 博客(99)
  • 收藏
  • 关注

原创 Ubuntu18.04 addr2line 用法与乱码问题解决

addr2line可以将指定的行号转换为对应的文件名和行号,常用于分析和定位内存访问错误的问题。在C/C++编程时,经常出现bug导致系统崩溃的情况。这是一般产生core文件,使用GDB调试。但是,有些情况下,可能没有产生core文件或者core文件丢失,这是怎么确定问题呢?可以使用addr2line命令。首先,运行dmesg,会输出系统日志,如下图,里面会输出产生错误时的地址,红色方框1的IP地址。 注意的是,在64位Ubuntu系统上,这个地址是绝对地址,addr2line命令需要输入相对地址。相对地址

2022-09-23 15:42:45 1616 1

原创 软件架构模式-读书笔记(5)-基于空间的架构

在一个高并发大容量的应用中,数据库通常是决定应用能够支持多少用户同时在线的关键因素。虽然各种缓存技术和数据库伸缩产品都在帮助解决这个问题,但数据库难以伸缩的现实并没有改变。基于空间的架构模型是专门为了解决伸缩性和并发问题而设计的。它对于用户数量不可预测且数量级经常变化的情况同样适用。在架构级别来解决这个伸缩性问题通常是比增加服务器数量或者提高缓存技术更好的解决办法。6.1 模型介绍基于空间的模型(有时也称为云架构模型)旨在减少限制应用伸缩的因素。模型的名字来源于分布式共享内存中的tuple sp

2021-04-14 11:14:21 806 1

原创 软件架构模式-读书笔记(4)-微服务架构

微服务架构模式作为替代单体应用和面向服务架构的一个可行的选择,在业内迅速取得进展。微服务架构的每个组件都作为一个独立单元进行部署,让每个单元可以通过有效、简化的传输管道进行通信,同时它还有很强的扩展性,应用和组件之间高度解耦,使得部署更为简单。要理解这种模式,最重要的概念就是服务组件(service component)。模式拓扑虽然有很多方法来实现微服务架构模式,但三个主要的拓扑结构为:基于REST API的拓扑结构,基于REST的应用拓扑结构和集中式消息拓扑结构。1)基于RE...

2021-04-14 11:11:48 460 1

原创 软件架构模式-读书笔记(3)-微内核架构

微内核架构模式(也称为插件化应用架构)对于基于产品的应用程序来说是一个很自然的选择。基于产品的应用是指一个经过打包的、可以通过版本下载的一个典型的第三方产品。然而,很多公司也会开发和发布他们的内部商业软件,完整的版本号、发布日志和可插拔的新特性,这些就非常符合微内核架构的思想。微内核架构模式可以通过插件的形式添加额外的特性到核心系统中,这提供了很好的扩展性,也使得新特性与核心系统隔离开来。(比如,著名的Eclipse IDE就是基于插件化开发的,eclipse核心更像是一个微内核,或者我们可把它叫做开放平台

2021-04-14 11:09:32 317

原创 软件架构模式-读书笔记(2)-事件驱动架构

事件驱动架构模式是一种主流的异步分发事件架构模式,常用于设计高度可拓展的应用。当然了,它有很高的适应性,使得它在小型应用、大型应用、复杂应用中都能表现得很好。事件驱动架构模式由高度解耦、单一目的的事件处理组件构成,这些组件负责异步接收和处理事件。事件驱动架构模式包含了两种主要的拓扑结构:中介(mediator)拓扑结构和代理(broker)拓扑结构。 mediator 拓扑结构通常在你需要在事件内使用一个核心中介分配、协调多个步骤间的关系、执行顺序时使用;而代理拓扑结构则在你...

2021-04-14 11:07:27 341

原创 软件架构模式-读书笔记(1)-分层架构

软件架构模式(Software Architecture Pattern)是Mark Richards编写的介绍各种软件架构设计模式的书,目的是给架构师足够的信息去做出正确的架构决策。1 简介应用程序缺乏合理的架构一般会导致程序过度耦合、容易被破坏、难以应对变化,同时很难有一个清晰的版本或者方向性。这样的结果是,如果你没有充分理解程序系统里每个组件和模块,就很难定义这个程序的结构特征。有关于程序的部署和维护的基本问题都难以回答,比如:程序架构是什么规模?应用程序有什么性能特点?应用程序有多容易应对变

2021-04-14 11:04:48 678 1

原创 架构师都需要了解的康威定律(Konway‘s Law)

Mel Conway(个人主页:http://www.melconway.com/Home/Home.html)康威在加利福尼亚理工学院获得物理学硕士学位,在凯斯西储大学获得数学博士学位。毕业之后,他参与了很多知名的软件项目,如 Pascal 编辑器。1康威定律的来历在他的职业生涯中,康威观察到一个现象:软件团队开发的产品是对公司组织架构的反映。于是,1967 年他针对这个现象提交了一篇论文(http://www.melconway.com/Home/Committees_Paper.html)

2021-04-13 11:30:45 2649 1

原创 开源JSON库Rapidjson与cJSON对比

项目需要解析和构造JSON格式的数据,由于项目使用C++编程,所以比较了一下基于C/C++的开源JSON解析库。当前,差不多40多种基于C/C++的开源JSON库在使用,经过一番比较,最终决定在RapidJson和cJSON中选择一个。下面是对这两个库的一个比较详细的对比

2021-03-25 11:11:26 5055 3

原创 Docker Image,Container,Repository的概念理解

在Docker的使用过程中,我们经常说Image,Container,Repository, 他们之间具体是一个什么的关系,又是如何使用的,这里基于自己的理解整理一下。1 Image 镜像1.1 说明Image(镜像):是一个只读的特殊的文件系统,它提供容器运行时所需的程序、库、资源、配置等文件,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。Image采用分层设计,每一层称为“layer”,这些layer存放在/var/lib/docker/<storag.

2021-03-19 16:42:57 2484

原创 Docker network driver分类及介绍 Bridge、host、overlay、macvlan(1)

https://docs.docker.com/network/1 分类Docker中的网络驱动(network driver)是可插拔的,docker中默认已经存在了几种网络驱动以提供核心的网络功能,主要有以下几类:bridge: docker 默认的network driver。如果不显示指定driver类型,docker默认会使用bridge模式的network。通常,当应用程序运行在独立的容器中,并且要相互通信,可以使用bridge模式。Bridge模式下容器与docker hos...

2021-03-19 16:39:16 7322

原创 Docker Compose network配置

这里是对docker compose 网络配置的一些说明,详细的文档参考:https://docs.docker.com/compose/networking/1 default network如果不显式指定,Compose会为每一个app设置一个default网络。每个service的container会加入这个default网络并且能够被这个网络上的其他container访问到,hostname就是container的name,通过这个hostname可以发现container。注意:

2021-01-26 14:28:16 12641

原创 node-red 安装和使用实例

Node-RED是一个可视化物联网编排工具,可基于浏览器的流程编辑器连接设备、服务器和 API 应用。本文介绍在Ubuntu18.04 上的安装和使用。详细的官方文档可以查看https://nodered.org/docs/

2021-01-06 20:43:26 5136

原创 2020,我的CSDN博文之路

参加工作十几年了,一直从事软件研发工作。我一直认为,作为一名技术人员,分享和交流对于一个人技术的进步是非常重要的,我也一直是这样做的。但是,以前都是在线下和同事之间的分享交流,从来没想过在网络上发表技术文章。 2019年换了新的工作,总结这些年的工作经验,发现没有一个可以系统汇总自己技术经验的地方。经过一番调研,我最终选定CSDN博客专栏来进行博文写作,一是为了进行技术总结,二是通过互联网进行更广泛的技术分享。 基于现在的工作内容,我主要设置了两个专...

2020-12-28 14:06:03 144

原创 ROS 使用GDB调试详解

介绍如何使用GDB来进行ROS C++ node的调试。包括catkin_make编译时如何开启debug选项,launch 文件中如何添加GDB调试参数,linux系统中core文件的设置以及列出了GDB常用的调试命令。

2020-12-14 14:11:11 2633

原创 Python的协程与GIL

1 协程是什么?我们知道多线程 / 多进程模型,是解决并发问题的经典模型之一。但是随刻客户端数量达到一定量级,进程上下文切换占用了大量的资源,线程也顶不住如此巨大的压力,对于多线程应用,CPU通过切片的方式来切换线程间的执行,线程切换时需要耗时(保存状态,下次继续)。协程,又称为微线程,它是实现多任务的另一种方式,只不过是比线程更小的执行单元。因为它自带CPU的上下文,这样只要在合适的时机,我们可以把一个协程切换到另一个协程。协程,只使用一个线程,在一个线程中规定某个代码块执行顺序。线程是抢占式的.

2020-12-09 14:06:15 874

原创 Influxdb python API使用说明

InfluxDB官方支持的client库有Arduino, C#, Go, Java, JavaScript, PHP, Python, Ruby. 可以通过连接https://docs.influxdata.com/influxdb/v1.8/tools/api_client_libraries/ 获得说明。这里介绍Python版本的使用。1 下载安装通过github https://github.com/influxdata/influxdb-client-python下载代码包, In

2020-11-30 11:15:06 2764

原创 InfluxDB配置总结-通过配置参数和Curl命令

InfluxDB的配置参数位于/etc/influxdb/influxdb.conf0 禁止向influxdb公司汇报信息Influxdb 安装之后,每24小时会自动搜集系统信息发往usage.influxdata.com。关闭此功能,使用参数reporting-disabled。默认值是false, 发送数据。可以改为true,则禁止发送数据。reporting-disabled = false1 开启logLog的开启分两部分,一个是在[logging]部分设置全局的log,另一个在

2020-11-30 10:07:48 1525

原创 python的@classmethod和@staticmethod详解

Python面向对象编程中,类中定义的方法有的使用@classmethod 修饰,有的使用@staticmethod 修饰,还有的不带任何修饰方法。他们之间具体有哪些区别,具体的使用场景是怎么样的,这里使用例子解释一下。只是基于自己在使用过程中的理解,如果有误欢迎指正。

2020-11-05 10:17:38 1229 1

原创 python获取CPU和操作系统类型

python作为跨平台的语言,大部分情况下不需要考虑不同平台的区别,但是,对于一些跨平台的应用,系统级或者CPU级的操作,还是需要明确知道系统类型,针对不同的CPU架构和操作系统采取不同的实现。那么,使用python编程,如何或许系统的CPU类型和操作系统类型?可以使用platform模块。platform模块的完整手册可以参见https://docs.python.org/3.6/library/platform.html这里只介绍三个与CPU和操作系统有关的方法。system():返

2020-11-04 16:34:59 4511 1

原创 InfluxDB C++ client支持windows和c++11

influxdb c++ windows库influxdb支持c++11

2020-10-30 09:54:33 1438 3

原创 工业数据存储数据库选型比较

我们将工业互联网、工业大数据首先需要把数据从工业现场采集上来,这是第一步也是基础。海量的数据从工业现场采集之后存在哪里呢?使用什么样的存储方式对后面的数据分析和计算有重要影响。这里对数据库方式的存储进行了一个选型比较。当前的数据库按类型分可以分为实时数据库,时序数据库,NoSQL数据库,关系型数据库。实时数据库是工业领域长时间以来的数据存储方式,很多传统的工业软件厂商都提供实时数据库。今年来,随着物联网的发展,时序数据库的应用也越来越广。1 实时数据库一般具备的特点高速写入的能.

2020-10-22 15:01:31 5994 3

原创 Odoo14.0源码安装和系统搭建配置

Odoo 是基于Python写的一系列开源ERP应用程序套装,前身是OpenERP。此套装可满足中小型企业的一切应用需求,例如,企业基本的进销存、采购、销售、MRP生产制造、品保质量保障、企业招聘、员工合同、休假、午餐管理、内部论坛、车队管理、内部聊天IM沟通、客诉追溯管理、CRM客户关系管理、VOIP、E-Shop电子商务、网店、企业官方网站,财务会计、银行对账、资产管理、HR工资管理、预算管理、WMS仓库库存管理、POS街边小摊、社区商店、项目管理、条码、PLM等等这里介绍如何通过源码安装和搭建

2020-10-21 17:19:48 9784 3

原创 InfluxDB C++库介绍和使用

InfluxDB C++库介绍和使用InfluxDB是现在使用排名最高的开源时序数据库,官方提供很多种语言的API进行库操作,包括Go、Java、JavaScript、JavaScript (Node.js)、PHP、Python等等,但是却不提供C++的支持。对于需要使用C++语言操作InfluxDB的场景,就有点麻烦。还好,gitbub上Influxdb-cxx项目提供了C++的方案。这里介绍一下Influxdb-cxx的编译、裁剪和使用。需要注意的是,Influxdb-cxx需要使用支持C++

2020-10-19 10:50:44 6390 11

原创 深入理解右值引用(&&)、std::move()、移动构造函数,移动复制运算符

C++11引入了右值引用(&&),移动构造函数,移动复制运算符以及std::move, 对于它们之间的关系和具体应用场景很多人还是云里雾里,这里结合具体的例子谈一下自己的看法。1 拷贝构造函数、赋值构造函数和深浅拷贝要理解右值引用(&&),移动构造函数,移动复制运算符以及std::move, 首先需要理解拷贝构造、赋值构造和深浅拷贝。1.1 例子看下面的例子:#include <iostream>#include <u..

2020-10-15 13:18:29 1157 3

原创 snap7与西门子PLC连接配置

S7协议是西门子PLC使用的通信协议,可以使用开源的Snap7库实现上位机与西门子PLC之间的通信。并不是所有的西门子PLC都可以用Snap7通信,比如S7 300/400/WinAC CPU可以完全支持S7, S7 1200/1500 CPU支持扩展的S7而且需要在TIA博图中做一些额为配置才能使用。本文就是介绍如何通过TIA博图配置PLC,以能够通过snap7读写PLC

2020-09-08 14:29:15 5124

翻译 pytorch 入门(1): pytorch库基本用法举例

这一系列文章是对pytorch 入门教程的翻译和学习总结。英文原版可以从以下网址获得:https://pytorch.org/tutorials/beginner/deep_learning_60min_blitz.html目标:理解Pytorch Tensor 库和神经网络 训练一个小的神经网络来分类图片。本手册假定你对numpy库有一个基本的了解。注意:确保你的测试环境已经安装了torch 和 torchvision 包Pytorch是什么?Pytoch...

2020-09-02 22:57:30 786

原创 python虚拟环境virtualenvwrapper&virtualenv & venv & pipenv 之间的联系与区别

Python应用程序有时会需要包或者模块的特定版本,如应用程序A需要特定模块的1.0版本但应用程序B需要2.0版本。这意味着只安装其中一个版本可能无法满足每个应用程序的要求,当我们同时开发多个python工程时,不同的工程会将第三方的包存放在相同的路径下。这就意味着,如果有两个工程依赖同一个包,但是所需要的版本却不一样。由于Python无法根据版本来区分包的安装路径,所以就会发生版本冲突。Python虚拟环境就是为了给不同的工程创建互相独立的运行环境。在虚拟环境下,每一个工程都有自己的依赖包,而与其它的

2020-08-27 11:48:26 938

原创 Jetson Nano上pytorch 1.6.0 wheel安装包下载

Jetson Nano上pytorch 1.6.0安装包下载

2020-08-26 14:51:38 3088 4

原创 Nvidia Nano上从头构建Jetbot镜像安装指南

JetBot 项目是NVIDIA(英伟达)基于Jetson Nano开发套件而设计的一款开源智能车项目。 它提供了基于视觉的自主避障,物体跟随,路径跟踪以及人脸识别等功能。对于AI初学者来说,Jetbot是一个很好的入门途径。Nvidia官方提供了完整的硬件和软件列表,参考https://github.com/NVIDIA-AI-IOT/jetbot/wiki, 可以自行组装jetbot小车。但是,自己采购零件还是很麻烦,国内的微雪公司提供了完整的小车方案,可以直接从https://www.wavesh

2020-08-26 14:22:30 4356 3

原创 Glog在linux和windows下的编译安装和使用

Glog是google推出的一个log库,可以运行在linux和windows下。对于需要跨平台运行的C++程序使用glog作为log库是一个不错的选择。这里简单介绍下glog在linux和windows下编译和使用1 linux编译Download https://github.com/google/glogUnzip glog-master.zipThen cd glog-master directory./autogen.sh && ./configure &amp

2020-08-24 17:10:42 2352 3

原创 Protobuf linux和windows下编译与使用

Google的probobuf是一个非常好用的序列化和反序列化库,而且它是跨平台的。如果应用需要在linux和windows下跨平台运行, protobuf是一个不错的选择。这里介绍一下Protobuf linux和windows下编译与使用。

2020-08-24 17:06:36 1548

原创 对强化学习理解及其与有监督学习和无监督学习的比较

机器学习可以分为有监督学习,无监督学习和强化学习.强化学习是机器学习的一个重要分支,本文重点谈一下对于强化学习的理解.

2020-08-05 22:29:44 3815

原创 机器学习-深度学习的关系思维导图

人工智能中关于机器学习,深度学习,强化学习,深度强化学习等各种算法的关系一直是新手入门迷惑的地方。这里做了一个思维导图,试图解释清楚彼此之间的关系。

2020-07-27 16:12:58 1277

原创 ROS中多个工作空间同时工作

ROS开发中,有时需要建多个工作空间, 将不同的功能包区别开来. 但是,多个工作空间会存在相互影响的情况,如何让它们能同时工作且相互不影响,需要技巧. 这里需要清楚ROS工作空间的工作原理. 本文做个详细介绍.

2020-07-19 22:30:22 5684 15

原创 Cartographer ROS上的编译安装和配置

Cartographer是google推出的基于激光雷达的SLAM算法。Cartographer官方的编译安装步骤可以在https://google-cartographer-ros.readthedocs.io/en/latest/compilation.html#上查看。但是在国内由于网络的原因,这个步骤并不适用。这里介绍它在国内网络环境下的安装和配置。首先需要安装ROS,这里就不涉及,可以参考ROS的文档进行。ROS具体的版本没有影响,可以是Kinetic或者Melodic。

2020-07-10 17:16:10 2164

原创 LPMS-CU2 IMU在 Nvidia Xavier安装配置

LPMS-CU2 是一种小型惯性测量单元(IMU)/姿态航向参考系统(AHRS)。在ROS中使用此款IMU时,需要进行相关的安装和配置, 具体可以参考https://bitbucket.org/lpresearch/openzenros/src/master/。1 依赖编译此ROS包需要G++ version>= 7.0, cmake version >= 3.10. 如果编译器低于此版本,则需要升级到最新版本,并运行如下命令:catkin_make -DCMAKE_C_COMP.

2020-07-10 17:11:05 950

原创 Nvidia Xavier(ARM64)上安装openresty

OpenResty官方提供了大多数Linux发行版的预编译的包,所以安装非常简单,可以直接参考http://openresty.org/cn/installation.html 进行安装。但是官方的二进制包只支持X86_64 和AMD64 的CPU,如果需要在ARM CPU上安装openresty就需要从源码开始安装了。这里介绍在Nvidia的Jetson Xavier 套件上安装openrety的方法, 使用的操作系统为ubuntu18.04。

2020-07-10 17:07:38 1074

原创 python文件编译与pyc反编译

pyc是编译py之后生成的二进制文件。当我们发布系统的时候不想让别人看到源代码,就需要将py文件编译生成pyc文件,对外只提供pyc文件。同样,如果拿到一个python程序,只有pyc文件,我们就无法看到源码,希望有办法反编译pyc文件以获得源码。既然有反编译的需求,为了保护pyc文件不被反编译,我们又希望找到一个方法来防止pyc文件被反编译。本文介绍了如何将py文件编译成pyc和pyo文件,也介绍了如何反编译pyc文件, 又给出了一种字节码混淆方法来防止pyc文件被反编译。

2020-07-10 17:02:41 16884 1

原创 ROS Navigation源代码剖析(6)-move_base 代价地图costmap_2d工作流程

4.2.4 costmap_2d工作过程http://wiki.ros.org/costmap_2d/4.2.0节描述了MoveBase启动过程中创建和初始化global planner的costmap的过程。planner_costmap_ros_ = new costmap_2d::Costmap2DROS("global_costmap", tf_);planner_costmap_ros_->pause(); //先暂定运行costmap的动态库位于 /opt/ros/k.

2020-06-16 22:32:40 3142

原创 ROS Navigation源代码剖析(5)-move_base 全局规划器GlobalPlanner流程

4.2.3 GlobalPlanner工作过程MoveBase的全局规划线程通过调用配置的实际全局规划器的makePlan方法来计算全局路径规划。基类是class BaseGlobalPlanner(navigation-kinetic\nav_core\include\nav_core\ base_global_planner.h), 具体的全局规划器需要继承此基类。 例如,GlobalPlanner就继承此基类,并实现相应的方法。class GlobalPlanner : public nav_

2020-06-16 22:03:38 3656 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除