东风草堂博客

公众号:开发者来风

在生活当中,我们会碰到很多人突然之间得了大病,一下子拿不出那么多钱来治病,不得不投向于轻松筹、水滴筹缓解一点经济压力,看到这样的例子,我会感觉到害怕,一是类似于癌症这样的病症往往需要花费大量的财力物力,普通家庭一般都负担不起,二是人人都不知道明天到来的是意外还是惊喜,怕这样的事情发生在自己身上,精神和身体都备受折磨。

害怕之余,结合自己近端时间学习的保险知识,觉得很有必要为自己购置一份合适的保险,目的是为了转移风险,对的,保险的本质就是为了转移风险,包括风险来临时我们能够病有所医、亲有所养、老有所医等,不至于花光自己辛辛苦苦大半辈子积累的积蓄。

还有一个认知非常重要,就是保险越早买越划算,要知道保险公司不是慈善机构,保险是一种商业行为,保险公司是要赚钱的,所以保险公司的精算师会根据年龄的不同计算出每年的保费,一般年龄越大保费就越贵,但我们购买长期型保险是每年的保费其实是一样的,那是因为保险师把后续高的保费平均到了年轻的时候,所以你越年轻买,平均下来的保费就越便宜;另外还有一点,保险都有它的现金价值,买保险后越往后现金价值越高,主要的原因为保费的资产是有复利作用的,前期作用几乎看不出来,越往后就越明显,故也能抵消掉一部分后期高昂的保费,所以你越早买保费作为资产复利的作用就越明显,跟投资理财越早是一样的道理。

当然,保险涉及到的知识很多,如果你对这一块不是很熟,很有可能购买到的产品不适合自己,最后的结果可能为,真正出了事,赔付的保额很低,简直是杯水车薪,或者是前期告知的不是很清楚,理赔的时候被拒等等,所以主动弄清楚保险相关的知识很重要。为什么要主动去学习,有几个原因,1)保险公司业务人员都是要吃饭的,他们往往会站在业务的角度去给你推荐保险,比如一些投资理财型的产品,这种产品保险不够,投资不足,对于真正想保险的不是刚需。2)现在购置保险的渠道非常多,互联网保险越来越多,我们可以自己通过互联网找到一些性价比很高的产品,而且这种产品跟你在业务员那里购买的理赔时间等都是一样的,但是有一点,你要自己分析,根据自身的经济和需求情况,购置真正适合自己的保险,所以自己懂很重要,真正懂了才敢下手,否则购置保险一直停留在口头上。

学习保险相关的途径很多,我推荐一些比较牛叉的公众号可以关注一下,比如深蓝保、关哥说险,但是如果需要系统性的学习保险知识,建议还是报一些保险相关的课程,比如长投学堂,以上纯属个人推荐,因为实际用过觉得比较好。系统学习过再去看一些公众号的文章就会觉得比较亲近,能够更好的梳理知识脉络。

阅读全文 »

消息:pixhawk网站搬迁至px4.io !!!

前段时间linux崩溃了,桌面进去后只有背景,折腾好久没搞定,为了节省时间索性重装了系统,同时也借这个机会从头记载一下作为初学者的学习过程。主要是按PX4的官网初学者教程进行,把其中遇到的一些初学者容易遇到的问题罗列出来,由于对于国内这方面的资料相对缺乏,希望能给大家提供一些帮助,也算是自我学习的一个整理。

如果你还不是很了解关于飞行器的这个项目PX4,建议迅速跳到PX4的官网一探究竟。简单来说,PX4是一个软、硬件开源项目(遵守BSD协议),目的在于为学术、爱好和工业团体提供一款低成本高性能的高端的自驾仪。这个项目源于 ETH Zurich (苏黎世联邦理工大学)的计算机视觉与几何实验室PIXHAWK项目、并得到了自主系统实验室自动控制实验室的支持 ,以及一些出色的个人(Contact and Credits)也参与其中,包括 3D Roboticsinternational 3DR distributors的成员。


# 前期准备 为了让大家能与我的学习保持同步,先介绍一下在搭建这个PX4环境前我已经做好的工作:
  1. 硬件一套,包括DJI F450机架、Pixhawk 2.4.6 mini飞控、好盈乐天20A电调、1045正反桨、银燕电机2216、天地飞6通道遥控器。详情见淘宝链接里的套餐方案
  2. 软件环境,使用的最新发行版Ubuntu 15.10操作系统。
阅读全文 »

JLinkGDBServer调试

添加JLink到STM32F405RG,确保Vsupply接口存在电压。打开服务器端,这是arm-none-eabi-gdb调试的后台,如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
JLinkGDBServer -if SWD -device STM32F405RG

SEGGER J-Link GDB Server V5.12g Command Line Version

JLinkARM.dll V5.12g (DLL compiled May 27 2016 17:03:38)

-----GDB Server start settings-----
GDBInit file: none
GDB Server Listening port: 2331
SWO raw output listening port: 2332
Terminal I/O port: 2333
Accept remote connection: yes
Generate logfile: off
Verify download: off
Init regs on start: off
Silent mode: off
Single run mode: off
Target connection timeout: 0 ms
------J-Link related settings------
J-Link Host interface: USB
J-Link script: none
J-Link settings file: none
------Target related settings------
Target device: STM32F405RG
Target interface: SWD
Target interface speed: 1000kHz
Target endian: little

Connecting to J-Link...
J-Link is connected.
Firmware: J-Link ARM V8 compiled Nov 28 2014 13:44:46
Hardware: V8.00
S/N: 20121126
Feature(s): RDI,FlashDL,FlashBP,JFlash
Checking target voltage...
Target voltage: 3.31 V
Listening on TCP/IP port 2331
Connecting to target...Connected to target
Waiting for GDB connection...

# 开始GDB调试 注意如下,在用户目录下面创建.gdbinit文件。 To enable execution of this file add add-auto-load-safe-path /home/nephne/src/Bootloader/.gdbinit line to your configuration file "/home/nephne/.gdbinit".

编写工程目录下面的.gdbinit文件。

阅读全文 »

编译pixhawk环境搭建

参考原网页进行说明,有两种搭建环境的方式。

第一种为自动执行脚本(推荐),较为方便,但有问题需解决。

由于使用apt-get update时部分文件无法下载,导致脚本执行不完整,故可将ardupilot/Tools/scripts/install-prereqs-ubuntu.sh文件里的$APT_GET update行用#注释掉。

然后操作如下:

阅读全文 »

代码调用关系可使用doxygen工具,cmake中使用doxygen,总体的代码结果图如下:

具体可参考APM飞控浅析


# ArduPilot编程库 这些[库](https://github.com/diydrones/ardupilot/tree/master/libraries)是和Copter, Plane and Rover共享的,具体的库及功能可见[原文](http://dev.ardupilot.com/wiki/apmcopter-programming-libraries/)。
  • 核心库
  • AP_AHRS —— 使用DCM或扩展卡尔曼滤波姿态估计
  • AP_Common —— 所有草图和库所需要的核心包括
  • AP_math —— 各种数学函数尤其对向量操作有用
  • AC_PID —— PID控制器库
  • AP_InertialNav —— 惯性导航库,用于融合加速度计、gps和气压计的数据输入
  • AC_AttitudeControl —— 姿态控制库
  • AP_WPNav —— 航点导航库
  • AP_Motors —— 多轴和传统的直升机电机混合
  • RC_Channel —— 这个库将更多的转换为PWM输入/输出,将来自APM_RC的数据转换为内部单位,如角度
  • AP_HAL, AP_HAL_AVR, AP_HAL_PX4 —— 这库实现“硬件抽象层”,这向高级别代码提供了一个相同的接口,以便它可更容易地移植到不同的板
  • 传感器库
  • AP_InertialSensor —— 读取陀螺和加速度计数据,执行校准和以标准单位(度/秒,米/秒),向主代码和其它库提供数据
  • AP_RangeFinder —— 声纳和红外距离传感器接口库
  • AP_Baro —— 气压计接口库
  • AP_GPS —— gps接口库
  • AP_Compass —— 3轴罗盘接口库
  • AP_OpticalFlow —— 光学流量传感器接口库
  • 其他库
  • AP_Mount, AP_Camera, AP_Relay —— 摄像头安装控件库,相机的快门控制库
  • AP_Mission —— 从EEPROM存储/检索任务的命令
  • AP_Buffer —— 与惯性导航使用的简单FIFO缓冲区

# 姿态控制 代码结构如图所示
阅读全文 »

资源http://www.cplusplus.com


# 阅读笔记 - 才发现CC为标准UNIX C++编译器,而cc为标准UNIX C编译器。g++为GNU C++编译器,而GNU C++编译器的MS-DOS版本名为gpp。comeau编译器最为严格、标准。都是先生成.o文件,再生成.out文件。 - 在C中,main函数括号为空表示对是否接受参数保持沉默,而在C++中为空与跟void一样。C++中main函数默认返回0。 - cout是可扩展的,允许自行开发新的数据类型。 - short至少16位;int至少和short一样长;long至少32位,且至少与int一样长。 - sizeof对类型名使用时,必须加上括号。 - C++使用前一(两)位来标识数字常量的基数。如果第一位是1~9,则基数为10;如果第一位为0,第二位为1~7,则基数为8;如果前两位为0x或0X,则基数为16。 - 数据后缀标识存储的类型,如2344L,默认情况下为int型,除非太大,int装不下。 - char在默认情况下既不是有符号,也不是没符号。在符号很重要的情况下,一定要特别声明。 - E表示法适合于非常大和非常小的浮点数。如:+3.45E+6指的是3.45与1000000相乘的结果,E后为负数代表除以10的乘方。 - cout.setf(ios_base::fixed, ios_base::floatfield);,这样可以显示浮点数多余的零。 - 赋值计算在类型转换时,较大的数转换为较小的数时,原来的值可能超过目标类型的取值范围,这种情况结果将是不可确定的。将浮点型转换为整形时,C++采取截取(丢弃小数部分),而不是四舍五入。 - true被转换为1,false被转换为0,这些转换称为整形提升(int类型计算速度更快)。 - 传统C语言总是将float提升为double,即使两个操作数都是float。 - 强制类型转换的格式为:(typeName)value/typeName(value),第一种来自C语言,第二种来自C++语言。 - 用引号括起的字符串隐式的包括了结尾的空字符。如“S”表示两个字符,而‘S’单表示一个字符,更糟糕的是,“S”表示的是一个内存的地址。 - strlen函数返回的是存储在数组中字符串的长度,而不是数组本身的长度。另外strlen不会计算空字符。 - 为了能够输入多个单词,可以使用cin.getline()函数和cin.get()函数,getline丢弃了换行符,存储时用空字符替换,而get保留在了输入序列中,所以在使用这种方法时,需要不带任何参数的cin.get()调用读取下一个字符,也可以连续调用,如cin.get(name, ArSize).get()。 - string在C++中是作为类出现。string类具有自动调整大小的功能。输入字符串的方法为getline(cin, str)。
1
2
3
4
5
for (int i = 0; i < SIZE; i++)
{
cout << i + 1 << ": ";
getline(cin, list[i]);
}
- C++允许在结构声明中省略关键字struct,结构体成员中也能进行赋值操作。 - 结构中的位字段:字段的类型应该为整形或枚举型,接下来是冒号,冒号后面是一个数字,它指定了使用的位数。通常用在低级编程中。 - 匿名共用体:将共用体用于结构体中,它们的地址相同,所以不需要中间标识符。 - 枚举、枚举量:默认情况,第一个枚举量为0。另外枚举变量只定义了赋值运算,没有定义算术运算。可自动转换为int型。如果只打算使用常量,而不创建枚举类型的变量,则可以省略枚举类型的名称。可以创建多个值相同的枚举量。可以将在取值范围内的任意整数赋给枚举量。 - 面向对象编程和传统的过程性编程的区别在于,OOP强调的是在运行阶段(而不是编译阶段)进行决策。动态联编/静态联编。 - 如果给cout提供一个地址,如果指针的类型为char *,则cout将显示字符串,如果要显示字符串的地址,应该使用int *。 - cout.setf(ios::boolalpha)函数调用设置了一个标记,该标记命令cout显示true和false,而不是1和0。 - C++规定,逗号表达式的值是第二部分的值。如cats = (17, 24)为24。 - C-风格字符串是通过结尾的空值字符定义的,而不是由其所在数组的长度定义的。这意味着两个字符串即使被存储在长度不同的数组中,也可能是相同的。 - cin将忽略空格和换行,如需读取,请使用cin.get(ch),其返回的是cin对象,在需要bool值的地方可以自动转换。相当于C规则的getchar(ch) - ctrl + D/Z相当于EOF,可以使用cin.eof()/cin.fail()返回的bool值进行检测,输入错误和EOF都将导致cin返回false,可以用cin.clear()进行清除然后重新输入。 - 从存储空间的角度来讲,指针数组比char数组的数组更为经济。 - if(17 < age < 35)的含义为if((17 < age) < 35),所以一直为真。 - &&的优先级高于||,但是c++实际运行时是按顺序的,如果||在前面就先执行前面的,比如++x||++y&&z++。 -
阅读全文 »

这段时间又参与了一个新的小项目,简单概括为蓝牙、智能、家居吧,虽然时间有点紧,还是希望能把这一些东西记录下来。


# BLE 什么是BLE?参考这篇[文章](http://www.mianfeiwendang.com/doc/e5f0219633d14d7b2d6ac032)做如下总结。 中文名称为蓝牙低功耗。主要特点为低成本、超低功耗、短距离、标准接口和可互操作性强,并且工作在免许可的2.4GHz ISM射频段,需要支持蓝牙4.0(系统为Android4.3及以上)的主机设备才能与其连接。

目前生产BLE芯片的厂家主要有CSR、TI、Nodic和NXP(QN902x),各个厂家芯片对比如下图

s

从如上图对比可以看出,NXP的QN902x在功耗方面比CSR和TI更省电,在接收灵敏度和模式方面比Nodic的胜一筹,它的从设备相比其它几家可以连接的更多,共有8个,这也算是蓝牙4.0的一大特色吧,并且NXP的芯片已经过了MFI认证,直接能与苹果设备相连接,因为这种认证也是挺贵的。

阅读全文 »

环境搭建

参考官网,注意这里需要采用Ubuntu15.10或者16.04。
具体命令简写如下:

1
2
3
4
5
6
7
8
9
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
sudo apt-get update
sudo apt-get install ros-kinetic-desktop-full
sudo rosdep init
rosdep update
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
sudo apt-get install python-rosinstall

基础ROS操作教程

开始基本操作

阅读全文 »

由于sublime的多平台性,以及也有很多强悍的插件可供使用,是我不得不将兴趣移植这个编辑器上面来。将查看代码而言,在linux下也可以通过wine安装sourceinsight,但是对于安装跟使用来说不是很方便,特别是有git项目的时候。


# 安装 首先下载安装[文件](http://www.sublimetext.com/2)。将下载好的文件解压至/opt,然后创建链接文件。
1
$ ln -s /opt/Sublime\ Text\ 2/sublime_text /usr/bin/

下面解决不能输入中文的问题
保存下面的代码到文件sublime_imfix.c(位于~目录,即主文件夹目录)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <gtk/gtkimcontext.h>

void gtk_im_context_set_client_window (GtkIMContext *context,
GdkWindow *window)
{
GtkIMContextClass *klass;
g_return_if_fail (GTK_IS_IM_CONTEXT (context));
klass = GTK_IM_CONTEXT_GET_CLASS (context);

if (klass->set_client_window)
klass->set_client_window (context, window);

g_object_set_data(G_OBJECT(context),"window",window);

if(!GDK_IS_WINDOW (window))
return;

int width = gdk_window_get_width(window);
int height = gdk_window_get_height(window);
if(width != 0 && height !=0)
gtk_im_context_focus_in(context);
}
阅读全文 »

本文将一个新手学习px4入门,装机,PID调节过程,以及试飞注意事项陈述如下:


# 器件准备

硬件一套,包括DJI F450机架、Pixhawk 2.4.6 mini飞控、好盈乐天20A电调、1045正反桨、银燕电机2216、天地飞6通道遥控器。详情见淘宝链接里的套餐方案

这些是PX4自动驾驶仪的元件要求:

  • 1x Pixhawk 或者 FMU + IO Kit (Pixhawk 和FMU + IO是一样的)
  • 1x u-blox GPS模块
  • 1x RC 接收器
  • 1x 无线数传
  • 多块3300 mAh LiPo电池,至少能提供25A/30A电流。最好是买几个相同的电池为了保持直升飞机更换电池的重量恒定。
阅读全文 »
0%