最近使用了意法半导体的LSM303DLH六轴角度传感器,使用软件IIC通讯,我主要使用Z轴加速度计算垂直方向倾角,使用磁场传感器计算水平旋转角。

//LSM303DLH.c

/************************************************************************************************************** 文件名:         LSM303DLH.c* 功能:            LSM303DLH驱动* 作者:            cp1300@139.com* 创建时间:      2019-01-10* 最后修改时间: 2019-01-10* 详细:         LSM303DLH六轴角度传感器依赖SoftwareIIC
*************************************************************************************************************/
#include "system.h"
#include "LSM303DLH.h"
#include "math.h"
#include <stdio.h>
#include "SoftwareIIC.h"//调试宏开关
#define LSM303DLH_DBUG  1
#if LSM303DLH_DBUG#include "system.h"#define LSM303DLH_Debug(format,...)  uart_printf(format,##__VA_ARGS__)
#else#define LSM303DLH_Debug(format,...)    /\
/
#endif  //LSM303DLH_DBUG#define PI 3.1415926535898u8 LSM303DLH_ReadOneReg(LSM303DLH_HANDLE *pHandle,LSM303DLH_REG_TYPE RegAddr);                                    //LSM303DLH读取一个寄存器
void LSM303DLH_ReadMultReg(LSM303DLH_HANDLE *pHandle,LSM303DLH_REG_TYPE RegAddr, u8 RegNum, u8 DataBuff[]);     //LSM303DLH读取多个寄存器
void LSM303DLH_WriteOneReg(LSM303DLH_HANDLE *pHandle,LSM303DLH_REG_TYPE RegAddr,u8 data);                       //LSM303DLH写一个寄存器/*************************************************************************************************************************
*函数         :   LSM303DLH_Init(LSM303DLH_HANDLE *pHandle, u8 SlaveAddr)
*功能         :   LSM303DLH初始化
*参数         :   pHandle:句柄;SlaveAddr_A:加速度传感器通讯地址;SlaveAddr_M:磁场传感器通讯地址;
*返回         :   TRUE:初始化成功;FALSE:初始化失败
*依赖         :   底层宏定义
*作者         :   cp1300@139.com
*时间             :   2019-01-30
*最后修改时间 :   2019-01-30
*说明         :
*************************************************************************************************************************/
bool LSM303DLH_Init(LSM303DLH_HANDLE *pHandle, u8 SlaveAddr_A, u8 SlaveAddr_M)
{u8 temp;u8 retry = 0;if(pHandle == NULL) return FALSE;pHandle->SlaveAddr_A = SlaveAddr_A;               //加速度传感器通讯地址pHandle->SlaveAddr_M = SlaveAddr_M;             //磁场传感器通讯地址for(retry = 0;retry < 3;retry ++){LSM303DLH_WriteOneReg(pHandle, LSM303_CTRL_REG1_A_0x20, 0x27);       //正常模式,50Hz速度SYS_DelayMS(1);                                                     //延时3mstemp = LSM303DLH_ReadOneReg(pHandle, LSM303_CTRL_REG1_A_0x20);      //读取0x20寄存器,默认值为0x07if(temp != 0x27)    //值不对{uart_printf("初始化失败,LSM303_CTRL_REG1_A_0x20默认值错误:0x%02X\r\n", temp);SYS_DelayMS(10);   }else break;}if(temp != 0x27)  //值不对{return FALSE;}SYS_DelayMS(1);                                 //延时1msfor(retry = 0;retry < 3;retry ++){LSM303DLH_WriteOneReg(pHandle, LSM303_CRA_REG_M_0x00, 0x10);     //磁场传感器15Hz,正常测量SYS_DelayMS(1);                                 //延时1msLSM303DLH_WriteOneReg(pHandle, LSM303_MR_REG_M_0x02, 0x00);          //磁场传感器连续转换模式SYS_DelayMS(1);                                    //延时1mstemp = LSM303DLH_ReadOneReg(pHandle, LSM303_MR_REG_M_0x02);     if(temp != 0)  //值不对{uart_printf("初始化失败,LSM303_MR_REG_M_0x02值错误:0x%02X\r\n", temp);SYS_DelayMS(10);    }else break;}return TRUE;
}/*************************************************************************************************************************
*函数         :   u8 LSM303DLH_ReadOneReg(LSM303DLH_HANDLE *pHandle,LSM303DLH_REG_TYPE RegAddr)
*功能         :   LSM303DLH读取一个寄存器
*参数         :   pHandle:句柄;RegAddr:寄存器地址
*返回         :   读取的寄存器值
*依赖         :   底层宏定义
*作者         :   cp1300@139.com
*时间             :   2018-04-09
*最后修改时间 :   2018-04-09
*说明         :
*************************************************************************************************************************/
u8 LSM303DLH_ReadOneReg(LSM303DLH_HANDLE *pHandle,LSM303DLH_REG_TYPE RegAddr)
{u8 data;u8 SlaveAddr = (RegAddr>0x19)?pHandle->SlaveAddr_A:pHandle->SlaveAddr_M; //大于0x19的寄存器是加速度传感器SIIC_Start(&pHandle->IIC_Handle);                             //产生IIC起始信号if(SIIC_SendByte(&pHandle->IIC_Handle, SlaveAddr) == FALSE)     //发送设备地址+写信号{DEBUG("没有收到ACK\r\n");}SIIC_SendByte(&pHandle->IIC_Handle, RegAddr);                  //发送寄存器地址SIIC_Start(&pHandle->IIC_Handle);                               //产生IIC起始信号SIIC_SendByte(&pHandle->IIC_Handle, SlaveAddr|BIT0);          //发送设备地址+读信号data = SIIC_ReadByte(&pHandle->IIC_Handle, TRUE);              //SIIC读取一个字节SIIC_Stop(&pHandle->IIC_Handle);                             //产生IIC停止信号return data;
}/*************************************************************************************************************************
*函数         :   void LSM303DLH_ReadMultReg(LSM303DLH_HANDLE *pHandle,LSM303DLH_REG_TYPE RegAddr, u8 RegNum, u8 DataBuff[])
*功能         :   LSM303DLH读取多个寄存器
*参数         :   pHandle:句柄;RegAddr:寄存器地址;RegNum:寄存器数量;DataBuff:返回结果缓冲区
*返回         :   无
*依赖         :   底层宏定义
*作者         :   cp1300@139.com
*时间             :   2018-04-09
*最后修改时间 :   2018-04-09
*说明         :
*************************************************************************************************************************/
void LSM303DLH_ReadMultReg(LSM303DLH_HANDLE *pHandle,LSM303DLH_REG_TYPE RegAddr, u8 RegNum, u8 DataBuff[])
{u8 i;u8 SlaveAddr = (RegAddr>0x19)?pHandle->SlaveAddr_A:pHandle->SlaveAddr_M;    //大于0x19的寄存器是加速度传感器SIIC_Start(&pHandle->IIC_Handle);                                 //产生IIC起始信号SIIC_SendByte(&pHandle->IIC_Handle, SlaveAddr);                       //发送设备地址+写信号SIIC_SendByte(&pHandle->IIC_Handle, RegAddr|BIT7);                  //发送寄存器地址,地址最高位为1意味着连续读取SIIC_Start(&pHandle->IIC_Handle);                                    //产生IIC起始信号SIIC_SendByte(&pHandle->IIC_Handle, SlaveAddr|BIT0);              //发送设备地址+读信号for(i = 0;i < RegNum;i ++){if(i == (RegNum-1)) //最后一字节不响应ACK{DataBuff[i] = SIIC_ReadByte(&pHandle->IIC_Handle, FALSE); //SIIC读取一个字节-NAK}else{DataBuff[i] = SIIC_ReadByte(&pHandle->IIC_Handle, TRUE);  //SIIC读取一个字节-ACK}   }SIIC_Stop(&pHandle->IIC_Handle);                                    //产生IIC停止信号
}/*************************************************************************************************************************
*函数         :   void LSM303DLH_WriteOneReg(LSM303DLH_HANDLE *pHandle,LSM303DLH_REG_TYPE RegAddr,u8 data)
*功能         :   LSM303DLH写一个寄存器
*参数         :   pHandle:句柄;RegAddr:寄存器地址;data:要写入的值
*返回         :   无
*依赖         :   底层宏定义
*作者         :   cp1300@139.com
*时间             :   2018-04-09
*最后修改时间 :   2018-04-09
*说明         :
*************************************************************************************************************************/
void LSM303DLH_WriteOneReg(LSM303DLH_HANDLE *pHandle,LSM303DLH_REG_TYPE RegAddr,u8 data)
{u8 SlaveAddr = (RegAddr>0x19)?pHandle->SlaveAddr_A:pHandle->SlaveAddr_M; //大于0x19的寄存器是加速度传感器SIIC_Start(&pHandle->IIC_Handle);                             //产生IIC起始信号SIIC_SendByte(&pHandle->IIC_Handle, SlaveAddr);                   //发送设备地址+写信号SIIC_SendByte(&pHandle->IIC_Handle, RegAddr);                   //发送寄存器地址SIIC_SendByte(&pHandle->IIC_Handle, data);                      //发送要写入的数据SIIC_Stop(&pHandle->IIC_Handle);                               //产生IIC停止信号
}/*************************************************************************************************************************
*函数         :   bool LSM303DLH_ReadAcceleration(LSM303DLH_HANDLE *pHandle, s16 *pXa,s16 *pYa, s16 *pZa)
*功能         :   LSM303DLH 读取三轴加速度
*参数         :   pHandle:句柄;pXa:返回X轴加速度;pYa:返回Y轴加速度;pZa:返回Z轴加速度
*返回         :   TRUE:成功;FALSE:失败
*依赖         :   底层宏定义
*作者         :   cp1300@139.com
*时间             :   2019-01-30
*最后修改时间 :   2019-01-30
*说明         :   返回的数据直接就是有符号数,无需处理
*************************************************************************************************************************/
bool LSM303DLH_ReadAcceleration(LSM303DLH_HANDLE *pHandle, s16 *pXa,s16 *pYa, s16 *pZa)
{u8 buff[6];s16 temp;LSM303DLH_ReadMultReg(pHandle, LSM303_OUT_X_L_A_0x28, 6, buff);    //读取数据temp = buff[1];temp<<=8;temp|= buff[0];*pXa = temp; //X轴temp = buff[3];temp<<=8;temp|= buff[2];*pYa = temp;   //Y轴temp = buff[5];temp<<=8;temp|= buff[4];*pZa = temp;   //Z轴return TRUE;
}/*************************************************************************************************************************
*函数         :   bool LSM303DLH_ReadMagnetic(LSM303DLH_HANDLE *pHandle, s16 *pXm,s16 *pYm, s16 *pZm)
*功能         :   LSM303DLH 读取磁场强度值
*参数         :   pHandle:句柄;pXm:返回X轴磁场强度;pYm:返回Y轴磁场强度;pZm:返回Z轴磁场强度
*返回         :   TRUE:成功;FALSE:失败
*依赖         :   底层宏定义
*作者         :   cp1300@139.com
*时间             :   2019-01-30
*最后修改时间 :   2019-01-30
*说明         :   返回的数据直接就是有符号数,无需处理
*************************************************************************************************************************/
bool LSM303DLH_ReadMagnetic(LSM303DLH_HANDLE *pHandle, s16 *pXm,s16 *pYm, s16 *pZm)
{u8 buff[6];s16 temp;LSM303DLH_ReadMultReg(pHandle, LSM303_OUT_X_H_M_0x03, 6, buff);    //读取数据temp = buff[0];temp<<=8;temp|= buff[1];*pXm = temp; //X轴temp = buff[2];temp<<=8;temp|= buff[3];*pYm = temp;   //Y轴temp = buff[4];temp<<=8;temp|= buff[5];*pZm = temp;   //Z轴return TRUE;
}/*************************************************************************************************************************
*函数         :   int LSM303DLH_CalculationZAxisAngle(s16 Ax, s16 Ay, s16 Az)
*功能         :   LSM303DLH 计算Z轴倾角(扩大100倍)
*参数         :   Ax,Ay,Az:3个轴的加速度;
*返回         :   Z轴倾角
*依赖         :   底层宏定义
*作者         :   cp1300@139.com
*时间             :   2019-01-30
*最后修改时间 :   2019-01-30
*说明         :
*************************************************************************************************************************/
int LSM303DLH_CalculationZAxisAngle(s16 Ax, s16 Ay, s16 Az)
{double A;float fx,fy,fz;A = sqrt((int)Ax*Ax + (int)Ay*Ay + (int)Az*Az); //计算角加速度的矢量模长 |A|=根号下(X*X+Y*Y+Z*Z)fx = Ax/A;fy = Ay/A;fz = Az/A;//Z方向A = fx*fx+fy*fy;A = sqrt(A);A = (double)A/fz;A = atan(A); A = A*180/PI;if(A < 0){A += 90;A = 0-A;}else{A = 90-A;}/*uart_printf("temp=%d  Az=%d\r\n",(int)A, Az);A = atan(Az/A);A = 90-A*360/PI;*/return A*100;
}/*************************************************************************************************************************
*函数         :   int LSM303DLH_CalculationXAxisAngle(s16 Ax, s16 Ay, s16 Az)
*功能         :   LSM303DLH 计算X轴倾角(扩大100倍)
*参数         :   Ax,Ay,Az:3个轴的加速度;
*返回         :   Z轴倾角
*依赖         :   底层宏定义
*作者         :   cp1300@139.com
*时间             :   2019-01-30
*最后修改时间 :   2019-01-30
*说明         :
*************************************************************************************************************************/
int LSM303DLH_CalculationXAxisAngle(s16 Ax, s16 Ay, s16 Az)
{double A;float fx,fy,fz;A = sqrt((int)Ax*Ax + (int)Ay*Ay + (int)Az*Az); //计算角加速度的矢量模长 |A|=根号下(X*X+Y*Y+Z*Z)fx = Ax/A;fy = Ay/A;fz = Az/A;//X方向A = fz*fz+fy*fy;A = sqrt(A);A = (double)A/fx;A = atan(A); A = A*180/PI;if(A < 0){A += 90; //向上为正}else{A = 90-A;A = 0-A; //向下为负}/*uart_printf("temp=%d  Az=%d\r\n",(int)A, Az);A = atan(Az/A);A = 90-A*360/PI;*/return A*100;
}

//LSM303DLH.h

/************************************************************************************************************** 文件名:         LSM303DLH.h* 功能:            LSM303DLH驱动* 作者:            cp1300@139.com* 创建时间:      2019-01-10* 最后修改时间: 2019-01-10* 详细:         LSM303DLH六轴角度传感器依赖SoftwareIIC
*************************************************************************************************************/
#ifndef _LSM303DLH_H_
#define _LSM303DLH_H_
#include "system.h"
#include "SoftwareIIC.h"//LSM303DLH 寄存器定义
typedef enum
{//罗盘LSM303_CRA_REG_M_0x00              =  0x00,   //RWLSM303_CRB_REG_M_0x01               =  0x01,   //RWLSM303_MR_REG_M_0x02                =  0x02,   //RWLSM303_OUT_X_H_M_0x03               =  0x03,   //RLSM303_OUT_X_L_M_0x04                =  0x04,   //RLSM303_OUT_Y_H_M_0x05                =  0x05,   //RLSM303_OUT_Y_L_M_0x06                =  0x06,   //RLSM303_OUT_Z_H_M_0x07                =  0x07,   //RLSM303_OUT_Z_L_M_0x08                =  0x08,   //RLSM303_SR_REG_Mg_0x09                =  0x09,   //RLSM303_IRA_REG_M_0x0A                =  0x0A,   //RLSM303_IRB_REG_M_0x0B                =  0x0B,   //RLSM303_IRC_REG_M_0x0C                =  0x0C,   //R//加速度LSM303_CTRL_REG1_A_0x20             =  0x20,   //RWLSM303_CTRL_REG2_A_0x21             =  0x21,   //RWLSM303_CTRL_REG3_A_0x22             =  0x22,   //RWLSM303_CTRL_REG4_A_0x23             =  0x23,   //RWLSM303_CTRL_REG5_A_0x24             =  0x24,   //RWLSM303_HP_FILTER_RESET_A_0x25       =  0x25,   //RLSM303_REFERENCE_A_0x26              =  0x26,   //RWLSM303_STATUS_REG_A_0x27            =  0x27,   //RLSM303_OUT_X_L_A_0x28                =  0x28,   //RLSM303_OUT_X_H_A_0x29                =  0x29,   //RLSM303_OUT_Y_L_A_0x2A                =  0x2A,   //RLSM303_OUT_Y_H_A_0x2B                =  0x2B,   //RLSM303_OUT_Z_L_A_0x2C                =  0x2C,   //RLSM303_OUT_Z_H_A_0x2D                =  0x2D,   //RLSM303_INT1_CFG_A_0x30               =  0x30,   //RWLSM303_INT1_SOURCE_A_0x31           =  0x31,   //RLSM303_INT1_THS_A_0x32               =  0x32,   //RWLSM303_INT1_DURATION_A_0x33         =  0x33,   //RWLSM303_INT2_CFG_A_0x34              =  0x34,   //RWLSM303_INT2_SOURCE_A_0x35           =  0x35,   //RLSM303_INT2_THS_A_0x36               =  0x36,   //RWLSM303_INT2_DURATION_A_0x37         =  0x37,   //RW
}LSM303DLH_REG_TYPE;//LSM303DLH 句柄
typedef struct
{SIIC_HANDLE IIC_Handle;            //IIC接口u8 SlaveAddr_A;                  //加速度传感器通讯地址u8 SlaveAddr_M;                 //磁场传感器通讯地址
}LSM303DLH_HANDLE;bool LSM303DLH_Init(LSM303DLH_HANDLE *pHandle, u8 SlaveAddr_A, u8 SlaveAddr_M);               //LSM303DLH初始化
bool LSM303DLH_ReadAcceleration(LSM303DLH_HANDLE *pHandle, s16 *pXa,s16 *pYa, s16 *pZa);    //LSM303DLH 读取三轴加速度
bool LSM303DLH_ReadMagnetic(LSM303DLH_HANDLE *pHandle, s16 *pXm,s16 *pYm, s16 *pZm);        //LSM303DLH 读取磁场强度值
int LSM303DLH_CalculationZAxisAngle(s16 Ax, s16 Ay, s16 Az);                                //LSM303DLH 计算Z轴倾角(扩大100倍)
int LSM303DLH_CalculationXAxisAngle(s16 Ax, s16 Ay, s16 Az);                                //LSM303DLH 计算X轴倾角(扩大100倍)#endif /*_LSM303DLH_H_*/

//测试

DS18B20_HANDLE DS18B20Handle;        //DS18B20句柄
s16 DeviceTemp;
s16 Xa, Ya, Za;
int zDipAngle;LSM303DLH_DeInit();                   //LSM303DLH硬件初始化//软件IIC初始化if(SIIC_Init(&g_SysFlag.LSM303DLH_Handle.IIC_Handle, LSM303DLH_SDA_GPIOX, LSM303DLH_SCL_GPIOX, LSM303DLH_SDA_GPIO_BIT, LSM303DLH_SCL_GPIO_BIT, 10) == FALSE)    {DEBUG("软件IIC初始化失败!\r\n");}
LSM303DLH_Init(&g_SysFlag.LSM303DLH_Handle, 0x30, 0x3C);                        //LSM303DLH初始化LSM303DLH_ReadAcceleration(&g_SysFlag.LSM303DLH_Handle, &Xa, &Ya, &Za);                                   //LSM303DLH 读取三轴加速度zDipAngle = LSM303DLH_CalculationZAxisAngle( Xa, Ya, Za);                                               //LSM303DLH 计算Z轴倾角(扩大100倍)//uart_printf("X:%d;Y:%d;Z:%d; \t",Xa,Ya,Za);uart_printf("Z倾角:%d.%02d; \t", zDipAngle/100, abs(zDipAngle)%100);g_SysFlag.Angle = zDipAngle = LSM303DLH_CalculationXAxisAngle(Xa, Ya, Za);                                //LSM303DLH 计算X轴倾角(扩大100倍)uart_printf("X倾角:%d.%02d; \t", zDipAngle/100, abs(zDipAngle)%100);LSM303DLH_ReadMagnetic(&g_SysFlag.LSM303DLH_Handle, &Xa, &Ya, &Za);        //LSM303DLH 读取磁场强度值uart_printf("X:%d;Y:%d;Z:%d;\r\n",Xa,Ya,Za);

//硬件接口宏定义


/
//LSM303DLH支持
//IO支持
#define LSM303DLH_SCL_GPIOX     GPIOB       //SCL GPIO
#define LSM303DLH_SCL_GPIO_BIT  5           //SCL 引脚位
#define LSM303DLH_SDA_GPIOX     GPIOB       //SDA GPIO
#define LSM303DLH_SDA_GPIO_BIT  6           //SDA 引脚位
#define LSM303DLH_SA0_A         PBout(7)    //地址选择//IO初始化函数
__inline void LSM303DLH_DeInit(void)
{SYS_DeviceClockEnable(DEV_GPIOB,TRUE);                 //GPIO B 时钟使能SYS_GPIOx_OneInit(GPIOB ,7 , OUT_PP, SPEED_25M);LSM303DLH_SA0_A = 0;                                  //地址输出0
}

附上软件IIC接口:https://blog.csdn.net/cp1300/article/details/75644988

LSM303DLH六轴角度传感器驱动相关推荐

  1. abb机器人旋转六轴角度指令_ABB-120型号机器人的6个轴运动的角度范围各是多少?...

    [单选题]设有程序段 int x=10; while (x=0) x=x-1; 则下面描述中正确的是 [单选题]若有整型变量x初值是3,则下列语句段的输出结果是( ). do cout< [单选 ...

  2. 两个软件相互交换数据_六轴算法机软件使用说明

    RAA (1.00a) ( Robot Arm Algorithms 1.00a 六轴算法机软件使用说明 : 作者觉得,在实际应用中,正逆解求解工具可以理解为一个类似数学计算器的 东西:不需要每个研究 ...

  3. 六轴机器人 宝元系统_庆云大国重器上线六轴智能焊接机器人,锻造高质量发展硬核...

    在大国重器坚持创新发展道路上,不断"借智"发展,提升科研保障能力,追求国际先进水平,为企业发展提供强劲动能. 六轴智能焊接机器人 六轴智能焊接机器人是大国重器自动化设备股份有限公司 ...

  4. 如何利用小熊派获取MPU6050六轴原始数据

    摘要:使用小熊派开发板,通过硬件IIC与MPU6050六轴传感器模块通信,完成相应寄存器配置,成功获取陀螺仪.加速度计数据. 本问主要讲述使用小熊派开发板+MPU6050六轴传感器,获取加速度计以及陀 ...

  5. 机器人建模中移动关节如何建立坐标系_解析:四轴机器人和六轴机器人有什么区别?---徕深科技...

    工业机器人的轴,可以用专业的名词"自由度"来解释.合理推测就是,当机器人的轴数增加,机器人就有更高的灵活性.四轴SCARA机器人(以下简称四轴机器人)和六轴关节式机器人(以下简称六 ...

  6. 六轴机器人光机_四轴机器人与六轴机器人有什么区别?

    小型装配机器人之所以获得越来越多包装企业的青睐,正在于它如今已可以胜任包括装配在内的各种包装生产任务,包括所有材料的处理,如取放.装卸.包装成型等包装前端流程相关的工序,以及打标签.检验.抽样等加工工 ...

  7. 维特智能六轴姿态传感器JY61P_stm32f1xx驱动代码解析

    目录 硬件准备/上位机直连 代码驱动 关于官方给出的示例 代码功能及其走位 1.怎样不依托代码验证传感器的某个功能是否有效或者能用? 2.写寄存器的方式 3.为什么不使用WIT私有协议中的关闭上电输出 ...

  8. 编写简单的六轴机械臂

    一.关键词: link 连杆 joint 连轴 orgin 原点 axis 轴 visual 视觉 geometry 几何 material 材料 collision 碰撞 inertial 惯量 f ...

  9. 面阵相机与六轴机器人之间通过偏差移动

    面阵相机与六轴机器人之间通过偏差移动 相机拍照位固定,机器人安装固定①通过相机与机器人进行坐标系标定计算出像素分辨率②通过模板标定记录下机器人在拍照位的坐标和CCD检测特征点的坐标③检测时候只需要计算 ...

最新文章

  1. 深入理解SpringCloud之配置刷新
  2. 将近400篇原创后,有三AI喊你正式加入来不来?
  3. 下拉加载 实现 java_[Java教程]iscroll5实现一个下拉刷新上拉加载的效果
  4. [蓝桥杯][2016年第七届真题]压缩变换(主席树求区间不同数的个数)
  5. android ota更新app,企业 OTA 更新  |  Android 开源项目  |  Android Open Source Project
  6. angular js 使用pdf.js_排名靠前的几个JS框架发展趋势和前景
  7. ArcGIS学习路线
  8. SLAM学习笔记 - ORB_SLAM2源码运行及分析
  9. UnityWebPlayer打开文件
  10. Windows镜像文件下载速度太慢?告诉你个小妙招
  11. 文件版本转换( AutoCAD、3dMax、SketchUp高版本转低版本 )
  12. LeetCode 69. x的平方根
  13. windows 搭建Web服务器和连接局域网打印机
  14. Python经典面试题解析:实现斐波那契数列
  15. HDU-4747 Mex
  16. vidda系统+android系统,海信电视精简教程,去除电视多余应用,换桌面!
  17. 为什么有全连接层的卷积网络输入图片尺寸需要固定的
  18. webservice的安全问题
  19. 《人月神话》作者去世,我们都曾读过他的书
  20. 如何把token存储到本地和headers中

热门文章

  1. 《高楼的性能工程实战课》学习所推荐的知识点
  2. 使用爬虫爬取天气历史数据(https://lishi.tianqi.com/)
  3. python爬取好友微信地区_python爬取微信信息--显示性别/地域/词云(附代码)
  4. 使用 canvas 和面向对象思想绘制流星动画
  5. 全国计算机等级考试一级(WIN7+OFFICE2010)作题练习指导
  6. 会PLC也能玩转机器视觉(一)
  7. Matlab 绘制双纵轴图
  8. [Ubuntu]使用DataDog集成跟踪Django项目
  9. 给 App 提速:Android 性能优化总结
  10. 微信web开发者工具-移动调试iphone端的调试