
软件构建
文章平均质量分 50
highlightz
移动机器人导航开发者和爱好者,长期从事移动机器人视觉导航规划和控制。人工智能坚定不移的追随者。喜欢摆弄C++语言,喜欢研究STL。崇尚开源文化,并愿意为机器人社区做出贡献。
展开
-
Ubuntu命令行中重复执行一个程序
以下示例中,执行program 10次,并将运行日志以追加的方式重定向到log.txt文件中,progam的入口参数是param。for i in {1..10}; do ./program param >> ~/log.txt; done原创 2020-08-14 11:45:35 · 1595 阅读 · 0 评论 -
《代码大全》(Code Complete)书摘
上次更新时间:2016年1月20日应该首先为人编写代码,其次才是为机器。表驱动法:将复杂的逻辑判断转换为查表,从而简化代码的编写与维护。防御式编程存在的理由:应对严酷的充斥非法数据的真实世界。许多强大的编程技术在被编程领域的大众接触之前,都已在学术论文和期刊界尘封了多年。对于需求,人们可以自以为是而不去潜心分析;对于架构,人们可以偷工减料而不去精心设计;对于测试,人们可以短斤少两甚至跳...原创 2020-04-11 15:52:57 · 398 阅读 · 0 评论 -
关于optimized out
根据网络上的说法,调试期间如果一个变量的值显示“optimized out”,那么就表明编译器将该变量进行了优化,导致其值不可见。解决的方法是,设置编译优化选项,禁止相关的优化。可以尝试的方式为:add_compile_options(-g O0)...原创 2020-01-15 21:26:03 · 15141 阅读 · 4 评论 -
Shell中变量的引用
#!/bin/shmyvar=“Hi jjjwwwwjjwww”echo myvarecho"myvarecho "myvarecho"myvar"echo ‘$myvar’echo $myvarecho Enter some different textread myvarecho ‘$myvar’ now equals $myvarexit 0原创 2019-11-30 12:51:00 · 218 阅读 · 0 评论 -
arctan对照表
注:实际调用的是C++的atan2接口。arctan(y,x)resultstd::cout << atan2(0, 1) << std::endl;0std::cout << atan2(0.707, 0.707) << std::endl;0.785398163std::cout << atan2...原创 2019-11-10 15:13:53 · 22460 阅读 · 0 评论 -
关于Mat的引用计数机制
由于引用计数机制的存在,如下所示,返回函数局部作用域中声明的Mat,是安全且高效的。/** Mat类:矩阵头中存放指针,指向矩阵元素本身。* 各个Mat实例的矩阵头共同维护一块矩阵元素内存。*/#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>// A safe ...原创 2018-04-21 12:06:55 · 720 阅读 · 0 评论 -
不用+的加法
// 利用位运算int get_sum( int a, int b ) { // Iterate till there is no carry while ( 0 != b ) { // carry now contains common set bits of a and b int carry = a & b; //转载 2017-03-17 09:02:13 · 236 阅读 · 0 评论 -
计算两个正整数的最大公约数
#include <iostream>using namespace std;int greatest_common_divisor( int a, int b ){ while ( a != b ) { if ( a > b ) a -= b; else b -= a; }原创 2017-04-04 10:34:29 · 1279 阅读 · 0 评论 -
Linux系统下兼容多版本OpenCV的方法
OpenCV的多版本会影响ROS package的编译。 解决方案:自行编译的OpenCV安装到自定义路径,并在CMake工程中声明该路径。 操作步骤: # Build$ cd OPENCV_SRC$ mkdir build$ cd build$ mkdir installed$ cmake -DCMAKE_INSTALL_PREFIX=OPENCV_SRC/build/instal转载 2017-10-31 17:34:19 · 859 阅读 · 0 评论 -
CMake中调用自定义安装位置Eigen库的方法
首先,Eigen是一个C++模板库,只有头文件,没有库文件。因此,只要解压到系统中某个位置即可。这里假定下载的Eigen压缩包路径为EIGEN_SRC。 使用中,若想在CMake工程中调用该库,则只需在CMakeLists文件中添加如下行:include_directories( "EIGEN_SEC/" )这样,可以灵活地调用多个不同版本的Eigen库,只要设置相应的解压路径即可。原创 2017-10-31 18:40:29 · 7491 阅读 · 3 评论 -
C++中重载operator( )构成仿函数
/** 仿函数(functor)就是使用起来像函数一样的东西。* 如果针对某个类进行operator( )重载,它就成为一个仿函数。* 至于要成为一个可配接的仿函数,还需要一些额外的努力。*/#include <iostream>using namespace std;template < typename T >struct plus{ T operator( )( cons转载 2017-03-17 08:58:42 · 1688 阅读 · 0 评论 -
Makefile范例
源码#include <stdio.h>int main( void ){ printf( "hello world\n" ); return 0;}Makefile文件CC=gccCFLAGS=-g -ansihello: hello.c $(CC) $(CFLAGS) -o hello hello.cclean: rm -f hello原创 2017-03-17 08:55:56 · 255 阅读 · 0 评论 -
C++ auto_ptr的用法
// 很多时候,我们在使用某个数据,但并不十分关心其类型是什么。#include <memory>#include <string>#include <iostream>using namespace std;int main( ){ auto_ptr< string > ps( new string( "clark" ) ); cout << *ps << endl;原创 2017-04-09 11:18:53 · 394 阅读 · 0 评论 -
OpenCV基本数据结构操作
#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <iostream>using namespace std;int main( ){ cv::Point_< double > pt2d( 3.0, 3.0 ); cout << pt2d.x << " " << pt原创 2017-03-07 20:15:39 · 258 阅读 · 0 评论 -
Eigen基本用法
#include <iostream>using namespace std;#include <Eigen/Core>#include <Eigen/Dense>int main( ){ // 矩阵类模板的前三个参数为:数据类型,行,列 Eigen::Matrix< float, 2, 3 > matrix_23; // 填充数据 matrix_23 << 1原创 2017-03-19 14:51:05 · 2141 阅读 · 0 评论 -
C++返回指针的函数范例
#include <iostream>using std::cout;using std::endl;// Function to treble a valuedouble* treble( double data ){ double* result( new double( 0.0 ) ); *result = 3.0 * data; return resu原创 2017-03-04 17:44:18 · 379 阅读 · 0 评论 -
PCL生成.PCD文件
#include <pcl/io/pcd_io.h>#include <pcl/point_types.h>#include <opencv2/core/core.hpp>#include <string>using namespace std;int main( ){ string setting_file("..\\config\\setting.yaml"); // The o转载 2017-02-15 20:07:41 · 1779 阅读 · 2 评论 -
STL vector基本用法示例
/// Compile script: /// $ g++ -std=c++11 test_vector.cc#include <vector>#include <iostream>#include <string>using std::vector;using std::cout;using std::endl;using std::stri...原创 2018-03-31 12:27:03 · 238 阅读 · 0 评论 -
研发原则
代码维护Git规则之:写完而未经测试通过的节点禁止提交和推送;或者说,每一个提交节点都应当保证是可运行/交付的。应当妥善利用git的贮藏(stash)功能。Do not refact code until it is available and stable.务必写详细的构建文档,保证任何一个对接者都能自行上手。写专业的代码,悄无声息(零warning)地正确编译。去掉工作空间中无...原创 2018-04-17 23:18:47 · 317 阅读 · 0 评论 -
protobuf使用经验小结
proto文件本身是按照层次结构组织的嵌套结构的proto编译方法:$ ./protoc --proto_path=proto_src_dir --cpp_out=proto_generated_dir proto_src_dir/*/*.proto原创 2018-04-18 08:21:14 · 838 阅读 · 0 评论 -
Eigen使用技巧
Eigen/src/Core/util/Macros.h可以检查Eigen的版本号。原创 2019-03-11 22:40:11 · 276 阅读 · 1 评论 -
算法优化的思考框架
芯片和指令集层面特定芯片的SDK,例如,PowerSDKneon指令集(32 bit/64 bit)操作系统层面CPU亲和操作(set_affinity)线程调度方案设计,例如,锁的作用域的精准设置第三方依赖库层面库编译选项,例如OpenCV的neon编译设置g2o的OpenMP编译设置Eigen的并行编译设置算法设计层面...原创 2019-03-08 19:30:04 · 166 阅读 · 0 评论 -
求两个数中的较大者
value_type max_value = ( ( a + b ) + abs( a - b ) ) / 2;转载 2019-02-16 11:17:28 · 507 阅读 · 0 评论 -
Python中的注释
#coding=utf-8# 为使用中文注释,必须声明编码系统# Single line commentprint "Single Comment"'''Multi comment'''print "Multi comment""""Multi comment"""print "Another multi comment"...转载 2018-12-28 15:14:34 · 685 阅读 · 0 评论 -
代码优化经验
Eigen变量的计算,可用noalias()进行优化(官方文档的建议)。剔除for循环中的冗余计算。原创 2018-12-28 15:10:11 · 187 阅读 · 0 评论 -
[代码段] OpenMP test
#include &lt;omp.h&gt;#include &lt;stdio.h&gt;int main(void){#pragma omp parallel printf("Hello, world.\n"); return 0;}原创 2018-12-28 14:50:36 · 152 阅读 · 0 评论 -
[代码段] CPU亲和操作
#include <sys/syscall.h>#include <pthread.h>#include <stdio.h>void setCurrentThreadAffinityMask(int mask){ int err, syscallres; pid_t pid = gettid(); syscallres = sy...转载 2018-12-28 14:48:44 · 443 阅读 · 0 评论 -
常用Shell指令
df -h 以人类易读的方式呈现磁盘的占用情况scp file xs@192.168.2.123:/home/xs 从本机拷贝文件file到主机为192.168.2.123,用户为xs的家目录中scp -r folder xs@192.168.2.123:/home/xs 递归拷贝...原创 2018-09-01 19:29:17 · 213 阅读 · 0 评论 -
Android平台开发经验
Android Studio使用经验快捷键去某行 Ctrl+G回到上一编辑位置 View | Toolbarduplicates当前行或选中块 Ctrl+D特性Project页面,便于查看生成的.so库原创 2018-06-03 14:08:14 · 1220 阅读 · 0 评论 -
编程工具箱
设计工具伪代码设计类封装全局数据Strategy模式使用typedef自定义数据类型,隐藏真实的数据类型面向接口编程,遵守接口契约,维持接口的稳定性可变性与不变性分析测试工具测试者思维模式:常规,极端,非法。优先测试物质流/能量流/信息流的连通性,比如,电源是否接通,网络是否连通,数据是否正确传入等。实用数字2的幂表 速算实例: 一个将每个32位整数...原创 2018-04-26 22:37:49 · 518 阅读 · 0 评论 -
iOS平台移植策略小结
参考cmake的依赖项,设置target的源文件。构建一个target的基本操作 新建group(不带文件夹),再添加文件夹Product中设置为ReleaseSDK选择iOS设置framework搜索路径设置头文件搜索路径设置库文件搜索路径添加源文件到Compile Source添加库文件到Link Binary库生成路径可设置,便于多工程自动协同CMake工程转化为XC...原创 2018-04-19 23:07:46 · 277 阅读 · 0 评论 -
git使用经验
常用指令拉取远程分支并更新的流程:$ git clone ssh://git@package_path/package_name.git$ cd package_name$ git checkout -b branch_of_package origin/branch_of_package$ git add .$ git commit -m "info"$ git pus...原创 2017-12-21 22:00:31 · 232 阅读 · 2 评论 -
判断一棵二叉树是否平衡
注:算法引自《程序员面试白皮书》。/** 二叉树平衡的定义:* 一棵二叉树是平衡的,当且仅当左右两棵子树的高度差的绝对值不超过1,* 并且左右两棵子树都是一棵平衡二叉树。* 同时,空树是一棵平衡二叉树。*//** 计算树高度的子函数也可递归实现。* 首先,考虑递归的出口:当node为空时,高度为0.* 其次,当node不为空,这棵树的高度为左右子树中的高度较高者加1.*/temp转载 2017-02-24 09:58:00 · 336 阅读 · 0 评论 -
利用Shell语言批量有序命名某一文件夹下的所有文件
#! /bin/sh# name: rename_photos.sh# author: Weihong Guan (aGuegu) http://aguegu.net# date: 2012-11-25# usage: $./rename_photos path extension_name# example: $ ./rename_photos.sh ~/Pictures/2012-11转载 2017-03-02 19:32:41 · 512 阅读 · 0 评论 -
C++检测文件的后缀名
#include <string>#include <iostream>bool has_suffix( const std::string& filename, const std::string& suffix ) { std::size_t index = filename.find( suffix, filename.size( ) - suffix.size( ) ); ret原创 2017-01-12 12:42:39 · 1614 阅读 · 0 评论 -
STL中的统计算法
统计数组中某个数字出现的次数#include <algorithm>#include <iostream>#include <vector>int main(){ double data[] = { 1.1, 2.1, 3.1, 4.1, 4.1, 3, 7, 8, 9, 10 }; std::vector<double> v(data, data+10); double原创 2017-01-16 23:24:43 · 678 阅读 · 0 评论 -
构建fabMap过程中可能遇到的错误
1.When OpenCV2.4.9 is not installed, the system has OpenCV2.4.8 pre-installed in /usr/lib/x86_64-linux-gnu/ and /usr/include, where there is no opencv_nonfree include files or libray files. The follow原创 2017-01-11 20:39:59 · 1909 阅读 · 1 评论 -
C++静态整型成员数据在类内初始化
#include <iostream>using namespace std;template < typename T >class TestClass{public: static const int _datai = 5; static const long _datal = 5876L; static const char _datac = 'c';};in原创 2017-01-16 10:21:38 · 347 阅读 · 0 评论 -
MATLAB将图像序列转换成avi视频
% 声明视频写入器outputVideo = VideoWriter( fullfile( 'C:\Users\robot\Documents\MATLAB', 'test.avi' ) );% 设置写入器的参数outputVideo.FrameRate = 24;outputVideo.Quality = 100% 启动写入器open( outputVideo )% 准备图像im原创 2017-01-14 12:15:21 · 3351 阅读 · 0 评论 -
Python对象方法两种调用方式
#coding=utf-8class Fish: def eat( self, food ): if food is not None: self.hungry = Falsef = Fish( )# 对象方法的两种等价调用方式Fish.eat( f, "earthworm" )f.eat( "earthworm" )原创 2017-01-14 12:13:16 · 1498 阅读 · 0 评论