ROS URDF添加传感器模型 ROS URDF添加传感器模型添加传感器模型添加摄像头对应的模型文件是camera.xacro, 内容如下<?xml version="1.0"?><robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="camera"> <xacro:macro name="usb_camera" params="prefix:=camera"> <link name="${prefix}
ROS URDF机器人建模 ROS URDF机器人建模创建URDF模型(1)创建机器人描述功能包catkin_create_pkg mrobot_description urdf xacro(2)mrobot_description下创建urdf, launch文件夹,在urdf文件夹内放置机器人模型的URDF或xacro文件。launch文件夹内放置相关启动文件。URDF例子mrobot_chassis.urdf:<?xml version="1.0" ?><robot name="mrobot_
人工智能-生物神经网络 人工智能-生物神经网络引言(1)从解剖学和生理学来看,人脑是一个复杂的并行系统,它 不同于传统的 Neumann式计算机,更重要的是它具有“认 知”“意识”和“感情”等高级脑功能。(2)人工方法摸拟这些功能,毫无疑问,有助于加深对思维及 智能的认识。因为我们通过人工的方法模拟大脑的功能,(3)神经网络是一门活跃的边缘性交叉学科,可用来描述认知、 决策及控制的智能行为,其中心问题是智能的认知和模拟。(4) 20世纪80年代初,神经网络开始崛起,对认知和智力本质 的基础研究乃至计算机产业都产生了空前的
人工智能-基本概念 人工智能–基本概念基本概念智能目前智能是一个科技热词。人工智能、智能手机、智能手表、智能交通、智 能建筑、智能招聘、智能投影仪、智能眼镜、智 能电视、智能电网。。。显然,“智能”是一种高级的智慧能力,一旦它与 各种已有工具相结合,就给后者赋予了高级的、 类似人类的功能。关于”智能“不同的著作有以下几种描述。什么是智能:智能主要是指人类的自然智能,其确切定义 还有待于对人脑奥秘的彻底揭示。一般认为, 智能是一种认识客观事物和运用知识解决问题 的综合能力。–王万森《人工智能原理及其应用》智
连续微小线段速度前瞻规划算法 连续微小线段速度前瞻规划算法研究现状速度前瞻规划是指预先分析后续路径,获取路径长度和速度约束条件等信息,并根据这些信息进行自适应速度调整,从而尽可能地提高加工速度。速度前瞻规划可以有效地缩短加工时间,减小机床振动,保护刀具以及提高加工质量,是保证速度平稳性和提高加工效率的重要途径,也是机床实现高速高平稳加工的一个不可或缺的过程。速度前瞻规划是高速高平稳数控系统必不可少的算法,部分国外、国内数控系统应用速度前瞻的情况分别如下表所示。复杂型面的数控加工普遍采用CAM编程,这时型面通常会被逼近成大量小线
遗传算法简介 遗传算法简介1美国Michigan大学的Holland教授及其学生收到生物模拟技术的启发,创造出了一种基于生物遗传和进化机制的适合与复杂系统优化的自适应概率优化技术–遗传算法。1967年,Holland的学生Bagley在其博士论文中首次提出了“遗传算法”一词。遗传算法的优点(1)对可行域表示的广泛性。遗传算法处理的对象不是参数本身,而是针对那些通过参数集进行编码得到的基因个体。编码操作使得遗传算法可以直接对结构对象进行操作。(2)群体搜索特性。这一特点使遗传算法具有较好的全局搜索性能,也是的遗传算
开源单元测试工具汇总 开源单元测试工具/框架汇总作为开源软件的爱好者,了解了单元测试这概念后,自然忍不住去找找有什么开源单元测试工具。下面列出了30款1,不分先后顺序。1. NoSQL的单元测试工具 NoSQLUnit 单元测试工具授权协议:Apache开发语言:Java操作系统:跨平台NoSQLUnit 详细介绍NoSQLUnit 是一个 JUnit 的扩展,用来为那些使用了 NoSQL 后端的应用提供单元测试和集成测试的工具。使用示例:@UsingDataSet(locations="my_data_s
常见单元测试工具 常见软件单元测试工具发表于:2010-2-05 13:22 作者:未知 来源:51Testing软件测试网采编Parasoft Jtest是第一个自动化Java单元[测试](javascript:;)工具。 Jtest自动测试任何Java类或部件,而不需要您写一个测试用例、驱动程序或桩函数。只要点击一个按钮,Jtest自动测试代码构造([白盒测试](javascript:????)、测试代码功能性([黑盒测试](javascript:????)、维护代码完整性(回归测试)和静态分析(编程标准执
Matlab目录操作及fgetl函数 Matlab目录操作及fgetl函数获取当前目录pwd命令a=pwd();进入指定目录a='F:\code';cd(a);或者cd 'F:\code'matlab如何读取文本文件并逐行显示以下是自己写的一个函数,在窗口输出显示指定文件中的内容%显示日志文件(所有文本文件)的内容function showlogfile(logfile)fid=fopen(logfile,'r');if fid==-1 fprintf('erro:%s can not open
matlab-python修改ABAQUS的inp计算文件 python修改ABAQUS的inp计算文件这里的函数可以与上一个博客Matlab-python-ABAQUS数据交互及联合使用的函数接口相互配合和集成,实现matlab与Abaqus进行联合仿真计算,大体思路如下图所示。因此这里matlab和python各写一个接口函数,实现对数据的处理。matlab函数function modify(Path,InpFile,NewData)%modify.m%libing403,2017-05-09ReqFile=[Path,'\modify.txt'
Matlab-python-ABAQUS数据交互及联合使用 Matlab-python-ABAQUS数据交互及联合使用在Matlab可以方便地实现各种优化算法,ABAQUS可以方便地进行有限元建模及求解,有时候两者结合可以更方便做一些自己想做的事,例如通过遗传算法,神经网络等算法进行参数反演,确定本构模型的参数。ABAQUS/CAE的内核语言是Python,通过Python可以方便地读取ABAQUS的结果数据库odb的数据。这里介绍一些关于如何进行三者的交互,编写交互的方法与经验。通过matlab提交inp文件给ABAQUS计算可以在matlab里面直接通过
《高效程序员的45个习惯——敏捷开发修炼之道》读书笔记 《高效程序员的45个习惯——敏捷开发修炼之道》的读书笔记《高效程序员的45个习惯——敏捷开发修炼之道》[美]Venkat Subramaniam / Andy Hunt 著 钱安川 郑柯 译(1)整体来说,这本书到底在谈些什么?作者是在企业从事软件开发的,可以想到作者必定是做了大量的实践而不是理论的研究,从作者简介、推荐序就可以了解到,这本书并不是在论述“敏捷开发”这样的一个方法论,而是较全面论述如何在实践“敏捷开发”,从题目的“45个习惯”就可知道这是告诉了我们敏捷开发的具体行动是什么,如何运用这
《程序员修炼之道–从小工到专家》读书笔记 《程序员修炼之道–从小工到专家》的读书笔记《程序员修炼之道–从小工到专家》[美]Andrew Hunt / David Thomas 著 马维达 译看这本书主要使用了检视阅读中略读的方法,大体了解本书所讲的主要内容。(1)整体来说,这本书到底在谈些什么?本书围绕“注重实效”讲述了关于编程的各种话题,个人责任、拽光弹开发、调试策略、元程序设计、按合约设计、重构、无情的测试,等等。作者认为注重实效的程序员的特征是程序员在处理问题、寻找解决方案时的态度、风格、哲学,他们能够超越直接的问题去思考,总是设法
ABAQUS提取截面节点的分析结果 ABAQUS提取截面节点集的输出结果引言ABAQUS提供了很多工具来实现对分析结果的可视化分析。也可以从分析结果数据库中把历史输出和场输出到处到excle或txt文件,进行更精细的分析。下面介绍一种方法,较方便从结果数据库中导出数据到txt文件,当然这只是其中的一种方法,肯定还有很多其他方法可以实现。操作流程大家都知道,ABAQUS需要在step中设置历史输出和场输出,这样才有可能输出你需要的数据,否则默认的输出结果不一定符合你的要求,这是要注意的。然后就是怎么把指定截面的节点结果输出到txt文件,
Modern Robotics单个刚体的动力学 Modern Robotics单个刚体的动力学基本公式考虑刚体由质量为mim_imi的一系列质点iii组成,总质量为m=∑imi\text m=\sum_i\text m_im=∑imi。物体坐标系原点建立在刚体质心处ri=(xi,yi,zi)r_i=(x_i,y_i,z_i)ri=(xi,yi,zi),则有∑imiri=0\sum_i\text m_ir_i=0∑imiri=0.设一个刚体的运动旋量为Vb=(ωb,vb)\mathcal V_b=(\omega_b,v_b)Vb
Modern Robotics串联机器人常见的奇异构型 Modern Robotics串联机器人常见的奇异构型奇异点的数学定义机器人末端执行器失去瞬间向一个或多个方向移动的能力时的姿态称为运动学奇异点(kinematic singularity), 或简称奇异点(singularity)。雅可比矩阵使我们能够识别的奇异点。从数学角度看,一个奇异点在雅可比Jb(θ)J_b(\theta)Jb(θ)不能达到最大秩的构型。考虑物体雅可比,列用Jbi,i=1,...,nJ_{bi},i=1,...,nJbi,i=1,...,n表示,那么有Vb=[Jb1(θ)⋯
雅可比矩阵小结 雅可比矩阵小结(1)描述末端速度与关节速度的变换关系。雅可比矩阵描述机器人末端线速度和角速度与关节速度的变换关系。计算雅可比矩阵的其中一种方法是从线速度和角速度出发,推导得到。pe˙=∑i=1n∂pe∂qiq˙i=∑i=1nJPiqiwe=wn=∑i=1nJOiq˙i\dot {\mathbf p_e}=\sum_{i=1}^n{\frac{\partial \mathbf p_e}{\partial q_i}\dot q_i}=\sum_{i=1}^n \mathbf J_{P_i}q_i\\\
基于单位四元数的姿态插补算法 基于单位四元数的姿态插补算法文章目录基于单位四元数的姿态插补算法摘要单位四元数空间与欧式空间的转化四元数的旋转变换表示空间定点旋转两个姿态间的插补仿真验证小结摘要现代制造领域对工业机器人的需求越来越多,对工业机器人性能要求也越来越苛刻。机器人运动轨迹插补算法是决定机器人性能的核心技术之一,直接影响着机器人的运动精度、速度和平滑性等主要性能。在曲面、曲线加工,喷涂、弧焊等领域,机器人的轨迹插补,尤其是姿态插补对加工质量和加工效率起到决定性作用。目前对机器人的姿态描述主要使用欧拉法,此类方法存在奇异性以
Modern Robotics逆运动学数值解法及SVD算法 Modern Robotics运动学数值解法及SVD算法文章目录Modern Robotics运动学数值解法及SVD算法前言数值逆运动学牛顿-拉普森方法数值逆运动学算法奇异值(SVD)分解算法基于SVD分解计算伪逆矩阵(C语言)计算伪逆算法的测试验证一般机器人逆运动学数值解法实现Example1: 2R机械臂逆解Example2: UR3机械臂逆解(1)初始状态螺旋轴表示(2)轨迹点描述(3)逆解关节位置(4)运动仿真小结前言这半个月的业余时间研究了机器人逆运动学的解析解法和迭代数值解法,并用程序实
Modern Robotics指数坐标推导雅可比(Jacobian) Modern Robotics指数坐标推导雅可比(Jacobian)空间雅可比(Space Jacobian)假设一个开链机构的正运动学以指数积形式写成T(θ)=e[S1]θ1…e[Sn]θnM.T(\theta)=e^{[\mathcal S_1]\theta_1}\dots e^{[\mathcal S_n]\theta_n}M.T(θ)=e[S1]θ1…e[Sn]θnM.空间雅可比Js(θ)∈R6×nJ_s(\theta)\in \mathbb R^{6\times n}Js(
Modern Robotics正运动学(forward kinematics) 机器人学之正运动学(forward kinematics)关键概念对于一个开链机器人,给定一个固定参考系{s}和一个固定于连杆的连杆的坐标系{b}, 该坐标系表示机器人末端。正运动学(forward kinematics)是从关节变量θ\thetaθ到坐标系{b}在坐标系{s}中的位置和方向的映射T(θ)T(\theta)T(θ)。开链机器人正运动学的D-H(Denavit{Hartenberg )表示,是从固定于每个连杆的参考坐标系的相对位移描述的,若连杆坐标系标号为{0},…\dots… ,{
Modern Robotics刚体运动算法(C语言) 机器人运动学之刚体运动算法(C语言)摘要在上一篇博客 刚体运动的矩阵表示和指数坐标表示总结了刚体运动的矩阵表示和指数坐标表示,介绍了它们之间的联系和相互转换的。这些算法在教材《 Modern Robotics Mechanics,Planning , and Control》给出了Matlab和python语言的实现。我在这里再给出这些算法的C语言实现。欢迎反馈存在的bug。 源码不断更新完善,最新代码可从gihub 下载–链接头文件提供的算法函数包括如下头文件AlgorithmModule.h声
Modern Robotics刚体运动的矩阵表示和指数坐标表示 Modern Robotics刚体运动的矩阵表示和指数坐标表示##摘要表示三维空间运动的刚体的位置和姿态至少需要6个参数。可以通过固连于刚体的坐标系描述其位置和方向相对于一个固定坐标系的位置和方向,物体坐标系相对于固定坐标系的的构型(或者说位姿)可以表达为一个4×44\times 44×4的矩阵。矩阵表示刚体的6维构型空间实际上是一种隐式表示法,使用了具有10个约束的4×44\times 44×4的实矩阵的16维空间描述。刚体运动可以用的指数坐标表示(旋量表示),这是一种显式表示法。例如刚体的速度可以
Modern Robotics:机器人的构型空间 Modern Robotics:机器人的构型空间机器人的构型(configuration)是一个机器人所有点的位置。描述机器人构型的最小实数坐标的个数n是机器人的自由度的数目。这个n维空间包括着机器人所有可能的构型(configurations)称为机器人的构型空间(configuration space,C-space)。机器人的构型可以由它的构型空间里的一个点描述。机器人的自由度机器人常见的关节如下图所示旋转关节(revolute joint,R),平移关节(prismatic joint,P
机器人学--运动学基础概念 机器人学–运动学的相关定义及定理一些专业的定义或定理可以对事物的规律进行简洁的描述,揭示规律的本质,因此,随着对机器人运动学研究的深入,很有必要温习一下运动学的相关定义及定理。基础定义定义2.1:一个系统(system)是空间 X\mathbf XX中的一个点集。定义2.2:一个系统的位形(configuration)是指系统中各点的位置。定义2.3:位形空间(configuration)是给定系统的全部位形组成的一个度量空间。定义2.4:一个系统的自由度(degrees of freedom
速度和静力 速度和静力位置矢量的微分下面表示某个矢量的微分BVQ=ddt BQ=limΔt→0BQ(t+Δt)−BQ(t)Δt(5-1)^{B}V_Q={\frac{d}{dt}}\ ^{B}Q=\lim_{\Delta{t \to 0}}\frac{^BQ(t+\Delta{t})-^BQ(t)}{\Delta t}\tag{5-1}BVQ=dtd BQ=Δt→0limΔtBQ(t+Δt)−BQ(t)(5-1)位置矢量的速度可以看成是用位置矢量描述的空间一点的线速度。重要
Python数据类型和表达式 Python数据类型和表达式标识符(Identifier)‣由程序员定义的名字;‣ 允许采用大写字母、小写字母、数字、下划线(_)和汉字等字 符,但标识符的首字符不能是数字,中间不能出现空格;‣大小写敏感;‣ 不能与保留字相同;‣允许使用汉字标识符,但我们不建议这么做。‣ 五个不同的合法标识符:Python_3_7, python_你好, _python_ABCPython_3、python_3、PYTHON_3、PyThOn_3、pYtHoN_3保留字(Keyword)‣编程语言
学习python的准备 学习Python的准备本文是学堂在线的课堂笔记python的下载和安装安装:1.下载适当版本: 本课程选择Windows平台上的 python 3.7版本。下载地址: http://www.python.org/downloads2.以管理员身份安装程序。3.重新启动Windows系统。 环境变量等都已设置好。Python开发环境命令行:在命令行中执行Python集成开发环境:Python自带的IDLE集成开发环境 PyCharm,Spyder ,Eclipse + PyDev, Atom
S型速度规划 S型速度规划摘要梯形速度曲线出现加速度不连续的情形,这样会导致机械系统出现冲击或不可预料的振动效应。因此有必要定义一种更加平滑的运动曲线,例如采用连续的,线性的加速度曲线,如下图所示,速度曲线抛物线过渡的线段组成。由于速度曲线的形状,这个轨迹称为双S速度曲线。这个轨迹有七段加加速度恒定的轨迹组成,因此又叫七段式轨迹。分析讨论假设jmin=−jmax,amin=−amax,vmin=−vmaxj_{min}=-j_{max},\text a_{min}=-\text a_{max},v_{min
梯形加减速 梯形加减速引例获取连续速度曲线的常用的方法是使用带有抛物线过渡的线性轨迹,这就是典型的梯形速度曲线。]这种轨迹分为三个部分。假设位移是正的,即q1>q0q_1>q_0q1>q0。若位移是负的,只需改变对应的加速度和速度的符号。第一部分,加速度恒定,速度是时间的线性函数,位移是时间的抛物线函数;第二部分,加速度为0,速度恒定,位移是时间的线性函数;第三部分,加速度为恒定的负值,速度线性减小,位移是时间的二次多项式。一般假设加速段TaT_aTa和减速段时间TdT_dTd相等[1]
力域中的雅可比 力域中的雅可比功被定义为作用力通过一定距离,它是以能量为单位的标量。如果令位移趋向于无穷小,就可以用虚功原理来描述静止的情况。功具有能量的单位,所以它在任何广义坐标系下的测量值都相同。特别是在笛卡尔空间做的功等于关节空间做的功。在多维空间,功是一个力或力矩矢量与位移矢量的点积,因此有f⋅δχ=τ⋅δΘ(5-91)f\cdot \delta\chi=\tau\cdot\delta\Theta \tag{5-91}f⋅δχ=τ⋅δΘ(5-91)式中fff是一个作用在末端执行器上的6×16\times
机械手末端速度计算(实例) 机械手末端速度计算(实例)上一篇博文已经推导了相邻连杆i和连杆i+1间速度的传递连杆i+1为旋转关节时有i+1wi+1=ii+1R iwi+θ˙i+1 i+1Z^i+1(5-45)^{i+1}w_{i+1}=^{i+1}_iR \ ^iw_i+\dot\theta{i+1}\ ^{i+1}\widehat Z{i+1}\tag{5-45}i+1wi+1=ii+1R iwi+θ˙i+1 i+1Zi+1(5-45)i+1vi+1=ii+1R(ivi
机械臂动力学--加速度计算 #机械臂动力学–加速度线加速在博客《速度与矢量的微分》的式(5-12)描述了坐标系{A}下的速度矢量BQ^B QBQ,当坐标系{A}的原点与坐标系{B}的原点重合时,速度矢量BQ^BQBQ可以表示为AVQ= BARBVQ+AΩB× BAR BQ(6-5)^AV_Q=\ ^A_BR^BV_Q+^A\Omega_B\times \ ^A_BR\ ^BQ \tag{6-5}AVQ= BARBVQ+AΩB× BAR BQ(6-5)方程
机械臂的速度与静力习题 速度与静力习题5.1 用在坐标系{0}中表达的雅可比矩阵重做例5.3。是否与例5.3的结果一致?解答:坐标系{0}到坐标系{3}的坐标变换为30T= 10T 21T 32T=[c12−s120l2c12+l1c1s12c120l2s12+l1s100100001]^0_3T=\ ^0_1T\ ^1_2T\ ^2_3T=\left [ \begin{matrix}c_{12} &-s_{12} & 0 &l_2c_{12}+l_1c_1\\
机械臂的牛顿-欧拉动力学方程 机械臂的牛顿-欧拉动力学方程一般把机械臂的连杆看作刚体,如果知道了连杆质心的位置和惯性张量,那么它的质量分布特征就完全确定了。要使连杆运动,必须对连杆进行加速和减速。连杆运动所需的力是关于连杆期望加速度及质量分布的函数。牛顿方程有以及描述旋转运动的欧拉方程描述了力、惯量和加速度之间的关系。牛顿方程作用在质心的力FFF引起刚体的加速度为F=mv˙c(6-29)F=m\dot v_c \tag{6-29}F=mv˙c(6-29)式中mmm代表刚体的总质量。欧拉方程设刚体的角速度和角加速度分
机械臂的静力计算 机械臂的静力计算公式推导对于操作臂的静力,首先锁定所有的关节以使操作臂的结构固定。然后对这周结构中的连杆进行讨论,写出力和力矩对于各个连杆坐标系的平衡关系。最后,为了保持操作臂的静态平衡,计算出需要对各个关节轴一次施加多大的静力矩。通过这种方法,可以求出为了使末端执行器支承住某个静负载所需的一组关节力矩。这里不考虑作用在连杆上的重力,讨论的关节尽力和精力矩是有施加在最后一个连杆上的静力或静力矩(或者两者共同)引起的。定义如下符号fi=连杆i−1施加在连杆i上的力,ni=连杆i−1施加在连杆i上的力矩
动力学习题 动力学习题6.1 求一均质的、坐标原点建立在其质心的刚性圆柱体的惯性张量。解:假设圆柱体的半径为RRR,高为hhh,密度为ρ\rhoρ,则其总质量M=12πR2hρM=\frac{1}{2}\pi R^2h\rhoM=21πR2hρ。建立柱坐标系,则有x=rcosθy=rsinθz=zdv=rdθdrdzx=rcos\theta\\y=rsin\theta \\z=z\\dv=rd\theta drdzx=rcosθy=rsinθz=zdv=rdθdrdzIxx=∫∫∫V(z2+y2)
连杆间的速度传递 连杆间的速度传递连杆i+1i+1i+1的速度就是连杆iii的速度加上那些附加到关节i+1i+1i+1的新的速度分量。注意线速度是相对于一点的的,而角速度是相对于一个物体的,因此,“连杆的速度”指的是连杆坐标系原点的线速度和连杆的角速度。如上图所示,将机构的每一个连杆看作为一个刚体,可以用线速度矢量和角速度矢量描述其运动。可以用连杆坐标系本身描述这些速度,而不用基坐标系。当两个www矢量都是相对于同一个坐标系时,那么这些角速度能够相加。因此,连杆i+1i+1i+1的角速度等于连杆iii的角速度加上一个
操作臂的运动学 操作臂的运动学文章目录操作臂的运动学2.1 连杆的描述2.2 操作臂的运动学2.2.1 连杆变换2.2.2例子:PUMA560连杆参数参考文献2.1 连杆的描述 机器人中每个连杆都可以用四个运行学参数来描述,其中两个描述连杆本身,另外两个用于描述连杆之间的连接关系。为了是问题简化,通常设定Z^0{{\widehat{Z}}_{0}}Z0沿关节轴1的方向,并且当关节变量1为0时,设定关节参考坐标系{0}和坐标系{1}重合,按照这个规定总会有a0=0.0{{a}_{0}}=0.0a0=0.0,α0=
空间描述和变换 空间描述和变换文章目录空间描述和变换1.1位置描述1.2 姿态描述1.3 坐标系的描述1.4坐标系的一般映射:齐次矩阵变换1.5 变换算法1.5.1混合变换1.5.2 逆变换1.6变换方程1.7 姿态的其他描述方法1.7.1固定角坐标系1.7.2 X-Y-Z欧拉角1.7.3 Z-Y-Z欧拉角1.7.4 等效坐标轴表示法1.7.5 欧拉参数参考文献1.1位置描述在坐标系{A}中,空间中一个点的位置用一个3×1的矢量描述AP=[pxpypz] &
MIT Mini Cheetah--仿真流程 MIT Mini Cheetah–仿真摘要由于官方提供代码中,控制仿真环境中的猎豹机器人运动需要遥控器来控制。官方默认推荐使用logitech Gamepad F310游戏手柄:We use the Logitech F310 controller. There’s a switch in the back, which should be in the “X” position. The controller needs to reconnected if you change the switch
Mit Mini Cheetah开源代码开发环境搭建 MIT Mini Cheetah–开源代码仿真环境搭建摘要2019年以来,关于四足机器人的报道越来越多,我比较关注的是MIT mini cheetah。Mini Cheetah的外表是很可爱的,它长约0.4米,重约20磅,外形比较接近人们养的小狗,让人看了就心生欢喜。不过它可爱的外表下却有着普通机器人望尘莫及的性能,它不但可以进行后空翻,还可以高速、灵活的跑动,其跑步的最高速度能达到3.7m/s。要知道,它自身的长度仅仅为0.4米,相当于一秒钟就跑出接近自己身长10倍的距离。2019年MIT开源了运行
ubuntu安装开源运动规划库ompl ubuntu安装运动规划库ompl本文介绍在Ubuntu18.04上安装开源运动规划库ompl。方法1下载install-ompl-ubuntu.sh,地址https://ompl.kavrakilab.org/install-ompl-ubuntu.shchmod u+x install-ompl-ubuntu.sh有四个安装选项,根据自己需要执行其中一条指令。有四个安装选项,根据自己需要执行其中一条指令。./install-ompl-ubuntu.shwill insta.
机器人手眼标定详解 手眼标定详解研究现状所谓手眼标定是统一视觉系统和机器人的坐标系,从而可以使视觉系统所确定的物体位姿可以转换到机器人坐标系下,由机械臂完成对物体的作业。最常见的手眼系统包括Eye-to-Hand和Eye-in-Hand两种。在Eye-to-Hand手眼系统中,摄像机与机器人基座的位置是相对固定的,手眼关系式求解摄像机坐标系与机器人基座坐标系之间的转换关系。在Eye-in-Hand手眼系统中,摄像机由于固定在机械臂末端,手眼关系求解的是摄像机坐标系与机械臂末端坐标系之间的转换关系。在机器人处于不同的位置和
量子计算入门-第二部分 量子计算入门-第二部分本文档翻译D-ware公司的《Quantum Computing Primer》,其中存在的不足或错误欢迎大家指出。原文出处:https://www.dwavesys.com/tutorials/background-reading-series/quantum-computing-primer#h1-0文章目录量子计算入门-第二部分第二部分2.1 - 它是一个数学表达式-谁在乎?2.2 - 能量程序2.3 - 量子计算机可以学习2.4 - 一个自我编程的计算机2.5 - 不确定特
量子计算入门-第一部分 量子计算入门-第一部分*本文档翻译D-ware公司的《Quantum Computing Primer》,其中存在的不足或错误欢迎大家指出。原文出处:https://www.dwavesys.com/tutorials/background-reading-series/quantum-computing-primer#h1-0 *本教程旨在介绍在量子计算中使用的概念和术语,提供量子计算机的一个概况,以及你为什么想要进行量子计算编程。内容文章目录量子计算入门-第一部分第一部分1.1 - 传统计算1.
前言--你也可以成为量子计算机程序员 前言本专栏主要介绍量子计算相关的发展,最近D-ware的量子计算机开源了一个量子计算机程序开发软件Qbsolv,本专栏也会介绍博主使用qbsolv的一些经验。 量子计算从理论上来讲已经是行得通的了,而在实际应用中也有一小部分量子计算机被应用于诸如量子物理、高等数学的计算之中,但其距离我们的日常生活还显得过于遥远,普通人仍无法接触到这一前沿的技术。 传统的计算机的基本信息存储单位是具备二进制属性的“比特”,二进制数的一位所包含的信息就是一比特,如二进制数0100
RTEMS linux 下开发环境搭建 RTEMS linux 下开发环境搭建RTEMS官网推荐使用RSB搭建GNU交叉编译环境工具链。这里我以ubuntu14.04为例子,说明流程。(1)通过RSB编译搭建交叉编译环境首先安装RSB需要的软件包$ sudo apt-get build-dep binutils gcc g++ gdb unzip git python2.7-dev安装这个软件包的时候,我试过出现以下找不到某个软件包源码的错误,原因有可能是选择的软件更新服务器不包含该软件包,换个一个服务器地址可以解决,用...
科学网博客推荐 科学网博客——力荐,不看会后悔的!今天才发现还有个不错的科学网,科学网的博客主要是搞科研的人写,有不少牛人分享自己的知识和经验,甚至还有院士。我本来也有比较喜欢做科研,虽然现在即将毕业去做技术,但还是比较关心一些领域的科研进展和新成果,因此发现这个科学网的时候有点发现新大陆的感觉,以后可以经常看看。原文推荐:文章转载自xjtu_chy的博客http://blog.sina.com.cn/s/blog_9edc00950101lp5q.html科学网何毓琦的博客。英文。http://blog.sci
研究生生涯的一些经验和感悟 研究生生涯的一些经验和感悟引言写这篇博客前,我不禁要感慨一下互联网分享所带来的好处。我这里讲的分享主要是指知识、技术和个人思想的分享。网络新闻媒体更多是传播一些资讯,而这些资讯一般不涉及深入的技术,深刻的个人思想。而博客则不同,好的博客(当然不可避免有一些灌水的)不仅讲解了知识技术本身,还有作者的理解,感悟类型的博客还有作者人生的宝贵经验和深刻总结,例如科学网何毓琦的博客、李晓榕的博客,写的很好,他们本身也是学界的大牛,思想和学术都有很高的造诣。还有CSDN排名靠前的博客,大多都是国内技术领域的大牛。为
我的研究生生涯 我的研究生生涯个人收获我的经历使我觉得读研的三年重要的是这个科研训练的过程,三年所学的科学知识甚少,因为常常是针对一个很具体的问题进行研究。但是这个训练过程会使得自己思考问题、解决问题的思路和方法更加全面和科学性。比如多了一点批判的思维,对一些事物不会那么盲目去相信,多一点理性思考。研究生三年,我没有做出轰动业界的发现,或者发明炫酷的机器,所获得的科学知识甚少,但是“授之以鱼不如授之以渔”,没有经过这三年的科研训练,或许某一天,在浩瀚无边的知识的面前,无穷真理的面前,我会望而却步。研究生的科研生
2017读书计划 2017读书计划一直想好好读一些书,但是总是觉得更重要的事情要做,等做完某件事再开始读书,但是重要的事一直都有,而读书这样看起来不急的事总是一拖再拖,没有安排时间去读。导致每年都没读多少书,收集了很多书籍都没有读。现在发现,或许这样下去,一辈子也没有多少空余时间,让你有闲暇的时间无忧无虑地读书。因此,即使很忙,也要利用好零碎时间去读书。5月23日硕士毕业论文答辩完了,即将毕业,尽管老师还分配有一些任务要做,但是至少没有像答辩前那么忙。手头上的事是用永远做不完的,工作后更是如此,不能总是等到手头无事
从企业角度看人才培养与人才成长 从企业角度看人才培养与人才成长今天听了一个讲座《从企业角度看人才培养与人才成长》,对于即将进入企业工作的我带来了一些新的知识和感悟。演讲者从当今时代特征、组织机构管理和企业人才成长规律三大方面展开,虽然整个过程没有那种震撼人心、鼓舞斗志的气氛,但所说的内容是实实在在值得思考和有启发性的。讲座涉及的内容比较多,有详有略,当然是从企业人才培养哦角度出发的考虑的。我根据自己的记忆和整理主要总结一下当今时代特征和企业人才培养规律两个方面。时代特征首先,人类社会发展可以粗略的划分为以下四个阶段:社会
李开复--生命是最严厉的导师 李开复–生命是最严厉的导师以前经常对生命的意义感到疑惑,时而为生命的短暂和终究逝去而悲哀,时而为生命的美好而兴奋,时而因伟人们创造世界般的成就而充满激情,时而为自己的渺小而感到低落。也因此长期以来时而荒废时光,时而奋发向上,找不到自己追求的方向,找不到坚定的人生信仰,人生价值观。也只有不断阅读、讨论、不断感悟自己的生活,才逐渐清晰自己应该怎么走自己的人生旅程。我常常不能跳出“自我”的角度进行思考,以自我为中心,常常会困惑于生命的逝去,自我的消亡,自我意识的存在性,永恒性。尝试从“他人”、“世界”、“总体生
《优秀到不能被忽略》--读书笔记 《优秀到不能被忽略》整体来说,这本书到底在谈些什么?针对职场中很多人对工作缺乏激情、对自己真正热爱什么等问题和疑惑,该书提出了四条规则:不要追随自己的激情;工匠思维胜过激情思维;让自主力带来幸福感;让使命感带来意义。该书通过大量的案例及作者自身的实践经验,论述了如何通过这四条规则打造自己热爱的事业。作者细部说了什么,怎么说的?规则一:不要追随自己的激情激情假设:要获得职业幸福,关键首先搞清楚自己的激情所在,然后找到于这种激情相匹配的职业。作者认为,这种假设既是错误的,也是有潜在危害的。为什么
《生命是什么》--读书笔记 《生命是什么》[奥]埃尔温.薛定谔 著,罗来鸥,罗辽复 译简介诺贝尔奖获得者埃尔温·薛定谔的《生命是什么》是20世纪的伟大科学经典之一它是为门外汉写的通俗作品,然而事实证明它已成为分子进化诞生和随后DNA发现的激励者和推动者,本书把《生命是什么?》和《意识和物质》合为一卷出版,后者也是他写的散文,文中研究了那些自古以来就使哲学家困惑迷离的问题,和这两篇经典著作放在一块的是薛定谔的自传。通过对他一生的回顾和引人入胜的描述,提供了他从事科学著作的背景材料。从经典物理学角度对生命的思考一个朴素物理学家(
《如何阅读一本书》--读书笔记 《如何阅读一本书》的读书笔记《如何阅读一本书》[美]莫提默 ⋅\cdot⋅ J. 艾德勒 查尔斯 ⋅\cdot⋅ 范多伦 著 郝明义 朱衣 译作者简介以色列年轻作家尤瓦尔·赫拉利代表作 ,书在2
安装完ROS后sudo rosdep init失败解决办法 安装完ROS后,初始sudo rosdep init,提示:ERROR: cannot download default sources list from:https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.listWebsite may be down.解决办法:进入 /etc 目录下打开终端,输入以下命令以更改hosts文件权限cd /etcsudo chmo
Matlab Robotics Toolbox--坐标系变换 Matlab Robotics Toolbox–坐标系变换摘要坐标变换一般可由旋转变换和平移变换两部分构成,上一篇介绍了Robotics Toolbox旋转变换的相关函数,这一篇介绍坐标系齐次变换的函数。平移变换(1)创建平移变换矩阵T=transl(x,y,z) : 表示能够获取一个分别沿着x,y,z轴平移一段距离得到的4x4齐次变换矩阵。T=transl§ : 表示由经过矩阵(或向量)p=[x,y,z]的平移得到的其次变换矩阵。如果p为(Mx3)的矩阵,则T为一组其次变换矩阵(4x4xM)
Matlab Robotics Toolbox--旋转矩阵 摘要在机器人工具箱中,可以用rotx(θ\thetaθ)、roty(θ\thetaθ)、rotz(θ\thetaθ)计算旋转θ\thetaθ的旋转矩阵,默认单位为度(版本10.2.0)。可以用trplot()和tranimate()实现坐标旋转可视化。##获取旋转矩阵rotx(): R=rotx(θ\thetaθ)是表示围绕X轴旋转角度为θ\thetaθ得到的旋转矩阵,返回一个3x3的矩阵。roty(): R=roty(θ\thetaθ)是表示围绕Y轴旋转角度为θ\thetaθ得到的旋转矩阵,返回
Matlab Robotics Toolbox--创建机器人 Matlab Robotics Toolbox–创建一个机器人下面创建一个两个连杆的机械臂,它具有下面标准的D-H参数Linkaia_iaiαi\alpha_iαidid_idiθi\theta_iθi1100θ1\theta_1θ12100θ2\theta_2θ2我们设置连杆的长度为1,下面创建两个连杆对象>> L1=Link([0 1 0 0 0],'standard') L1 = Revolute(std): t
Matlab Robotics Toolbox--安装 Matlab Robotics Toolbox–安装Matlab Robotics Toolbox是一款功能强大的机器人工具箱软件,由于Matlab版本的升级,目前,可以使用的最新版为V9.10,较之前的版本而言,函数发生了一定变化,如,将drivebot()替换为teach()等等。 该工具箱可以用于移动机器人、机械臂的仿真计算工作,特别是机械臂的正、逆运动学/动力学运算、轨迹规划等,并能够用图形的方式展现出来,更易于理解。安装方法1: 下载压缩文件 (.zip),将下载
《忏悔录》--摘录 托尔斯泰热切主张“勿以暴力抗恶”、“道德的自我完善”、“博爱”等观点,人们称之为托尔斯泰主义。在他看来,道德的自我完善就是抛弃利己,投身与利他,如果为了自己而牺牲他人,就是一个不道德人,还没有找到生命的真是意义。除了生活和幸福的幻象以及万劫不复的死亡,生命的真相还有什么?我碌碌无为地活着,兜兜转转地过,走过漫长的人生道路后,不经意间走到一个深渊边上,并且清楚看到,除了死亡,生命的前方竟然什么都没有!我无法停下脚步,无法退回去,也不能闭上眼睛不看那万劫不复的。除了幸福生活的幻象,除了真正的苦难和死亡,前.
多项式轨迹--七次多项式轨迹 多项式轨迹–七次多项式1.6 Polynomial of degree seven在某些特定场合,可能需要定义更高阶次的多项式来获得平滑的轨迹。具有七次的多项式如下q(t)=a0+a1(t−t0)+a2(t−t0)2+a3(t−t0)3+a4(t−t0)4+a5(t−t0)5+a6(t−t0)6+a7(t−t0)7(1-26)q(t)=a_0+a_1(t-t_0)+a_2(t-t_0)^2+a_3(t-t_0)^3+a_4(t-t_0)^4+\\a_5(t-t_0)^5+a_6(t-t_0)^6+
多项式轨迹--五次多项式轨迹 #多项式轨迹–五次多项式1.5 Polynomial of degree five利用三次多项式,根据过q0,q1,…,qnq_0,q_1,\ldots,q_nq0,q1,…,qn确定的轨迹的特征是位置和速度连续,但是加速度不连续(参见上一篇博客轨迹规划–三次多项式轨迹)。尽管三次多项式轨迹确定的轨迹有一定“平滑”,但是对于一些应用的动力学和惯性载荷会产生一些不期待的影响。为了获得一个加速度连续的轨迹,位置和速度需要合适的初始和终止条件,也需要合适的初始和终止加速度值。这样共有六个边界条件,因此需
多项式轨迹--三次多项式轨迹 多项式轨迹–三次轨迹1.4 Cubic trajectory图 3 三次多项式轨迹一旦指定了t0,t1{{t}_{0}},{{t}_{1}}t0,t1时刻的位置和速度的值(q0,q1v0,v1)\left({{q}_{0}},{{q}_{1}}{{v}_{0}},{{v}_{1}} \right)(q0,q1v0,v1) ,那么有四个条件需要满足,所以必须使用三次多项式q(t)=a0+a1(t−t0)+a2(t−t0)2+a3(t−t0)3,t0≤t≤t1(1-21)q\left(
在ABAQUS中使用多孔介质模型 在ABAQUS中使用多孔介质模型引言ABAQUS软件可以进行渗流/应力耦合分析,上一篇博文也提到过,ABAQUS里很多的本构模型可以与多孔介质一起结合使用,这意味着可以对那些本构模型描述的材料或对象进行渗流/应力耦合分析。ABAQUS使用孔压单元进行渗流/应力耦合分析,该孔压单元包含了位移和孔隙压力这两个基本自由度。结合孔压单元,设置材料的多孔介质属性(主要为渗透系数和初始孔隙比),就可以对现实对象的多孔介质属性进行建模。ABAQUS进行渗流/应力耦合分析的基本理论是Darcy定律和有效应力原理。AB
在ABAQUS中如何使用修正DPC帽盖模型 在ABAQUS中如何使用修正DPC帽盖模型引言修正Drucker-Prager盖帽模型(简称修正DPC模型)和修正剑桥(简称MCC模型)在岩土领域广泛使用,而修正DPC模型应用更加广,应用于描述存在大体积应变的材料力学行为。它在线性Drucker-Prager模型上增加了一个帽盖状的屈服面,从而引入了压缩导致的屈服,同时也能控制材料在剪切作用下的无限制剪胀现象。如下图是修正DPC模型的屈服面。ABAQUS中设置修正DPC帽盖模型的参数在很多有限元软件提供了修正DPC帽盖模型的本构模型,下面简要介绍
应力分析(3) 应力分析(3)1八面体上的剪应力与正应力考虑物体中的一点,过该点作一外法线nnn与3个应力主方向有相同角度的斜面,它的3个方向余弦是(l,m,n)=(±13,±13,±13)(l,m,n)=(\pm\frac{1}{\sqrt{3}},\pm\frac{1}{\sqrt{3}},\pm\frac{1}{\sqrt{3}})(l,m,n)=(±31,±31,±31)这样的斜面我们称为等倾面,一共有8个,由这8个等倾面构成的微单元体,称为八面体,其中三个坐标轴沿着3个应力主应力方向。[
应力分析(2) 应力分析(2)1应力分量的坐标变换新坐标系中的3个正面分别看作是旧坐标系中的斜面,应用斜面公式(Cauchy公式),可以导出新旧坐标系中应力分量的变换关系。[σ′]=[β][σ][β]T(1.20)[\sigma ^\prime]=[\beta][\sigma][\beta]^T \tag{1.20}[σ′]=[β][σ][β]T(1.20)式中[β][\beta][β]为新坐标系三个基矢量在旧坐标系三个轴上的投影组成的矩阵。[β]=[l1m1n1l2m2n2l3m3n3][\beta]=\l
应力分析(1) 弹塑性力学1–应力分析(1)弹性力学的研究对象和内容 物体受外载荷作用所产生的形状和大小的改变,称之为变形或形变,通常考虑的外部载荷包括机械外力、温度、电磁力等各种物理因素。如果将引起变形的外部载荷移去后,物体能完全回复到原来的形状和大小,这种变形称为弹性变形。应力分析应力矢量$ ewcommand{\vect}[1]{\boldsymbol{#1}}$考查平面C上包括P点在内的微小面积ΔS\Delta SΔS,如下图所示P点内的应力集度可使用如下式定义的应力矢量T(n)\bolds
MathType常用快捷键 MathType常用快捷键转载自博客园Mathtype常用快捷键1. 打开/关闭MathType窗口alt+ctrl+q:插入inline公式shirt+ctrl+q:插入块公式(右侧编号)可在word中设置快捷键,直接调用公式编辑器,工具–〉自定义–〉键盘,选择 插入–insertequation 设置快捷键为Alt+i,很方便Alt+F4:保存并关闭MathType窗口,返回Word。2. 公式输入快捷键用途Ctrl+H上角标Ctrl+L下角标Ctrl
markdown--LaTeX公式小结 makdown–LaTeX公式小结数学公式公式Markdown公式Markdown行间公式$表达式$a ba\:baba:b块公式$$表达式$$a ba\;baba;babAcd^{ab}A^{cd}abAcd{ab}A{cd}a ba\!baba\!babBcd_{ab}B_{cd}abBcd_{ab}B_{cd}a ba\,baba,babcd\frac{ab}{cd}cdab\frac{ab}{cd}ababab
几串口协议的整理 几串口协议的整理转载自博客园的一篇博客几个串口协议学习整理一、UARTUART是一个大家族,其包括了RS232、RS499、RS423、RS422和RS485等接口标准规范和总线标准规范。它们的主要区别在于其各自的电平范围不相同。嵌入式设备中常常使用到的是TTL、TTL转RS232的这种方式。常用的就三根引线:发送线TX、接收线RX、电平参考地线GND。1.1 电路示意图1.2 通信协议将传输数据的每个字符一位接一位地传输。起始位:先发出一个逻辑”0”的信号,表示传输字符的开
嵌入式实时操作系统rtems的特点及研究现状 嵌入式实时操作系统rtems的特点及研究现状RTEMS简介1RTEMS是一个开源的无版税实时嵌入操作系统RTOS。它最早用于美国国防系统,早期的名称为实时导弹系统(Real Time Executive for Missile Systems,后来改名为实时军用系统(Real Time Executive for Military Systems,现在由OAR公司负责版本的升级与维护。目前无论是航空航天、军工,还是民用领域RTEMS都有着极为广泛的应用。同大多数嵌入式操作系统一样,RTEMS采用微内核
C语言的##运算符-预处理器的粘合剂 C语言的##运算符-预处理器的粘合剂引言与#运算符类似,##运算符可以用于类函数宏的替换部分。而且,还可以用于宏对象的替换部分。##运算符可以把两个记号组合成一个。示例分析// glue.c -- use the ## operator#include <stdio.h>#define XNAME(n) x ## n#define PRINT_XN(n) printf("x" #n " = %d", x ## n);int main(void){ int XNA
C语言的#运算符 C语言的#运算符引言在类函数宏中(带参数的宏),#号作为一个预处理运算符,可以把记号转换成字符串。示例分析下面是一个类函数宏:#define PSQR(X) printf("The square of X is %d. ",((X)*(X))假设这样使用宏:PSQR(8);输出为The square of X is 64.注意双引号字符串中X被视为普通文本,而不是一个可被替换的记号。C语言允许在字符串中包含宏参数。在类函数宏中(带参数的宏),#号作为一个预处理运算符,可以把
C语言的_Atomic类型限定符(C11) C语言的_Atomic类型限定符(C11)并发程序设计把程序执行分成可以同时执行的多个线程。这程序设计带来了新的挑战,包括如何管理访问相同数据的不同线程。C11通过包含可选的头文件stdatomic.h和threads.h,提供了一些可选的(不是必须实现的)管理方法。值得注意的是,要通过各种红函数类访问原子类型。当一个线程对一个原子类型的对象执行原子操作时,其他线程不能访问该对象。所谓原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位,不可能有比它更小的执行单位
C语言的assert断言宏 C语言的assert断言宏assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include <assert.h>void assert( int expression ); assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来终止程序运行。如果assert()终止了程序,它首先会显示失败的测试、包含测试的文
C语言的const类型限定符 C语言的const类型限定符类型限定符的变化我们通常用类型和存储类别来描述一个变量。C90还增加了两个属性:恒常性(constancy)和易变性(volatility)。这两个属性分别用关键字const和volatile来声明,以这两关键字创建的类型是限定类型。C99标准新增了第3个限定符:restrict,用于提高编译器优化。C11新增了第四个限定符:_Atomic。C11提供了一个可选库,由stdatomic.h管理,以支持并发程序设计,而且 _Atomic是可选支持项。C99为类型限定符增加了一
C语言的fclose()函数 C语言的fclose()函数头文件:#include <stdio.h>定义函数:int fclose(FILE * stream);函数说明:fclose()用来关闭先前fopen()打开的文件。此动作会让缓冲区内的数据写入文件中, 并释放系统所提供的文件资源。必要时刷新缓冲区。对于比较正式的程序,应该检查是否成功关闭文件。如果成功关闭,fclose()函数返回0,否则返回EOF:if (fclose(fp) != 0) printf("Error in closing fil
C语言的fopen()函数 C语言的fopen()函数fopen()的声明在头文件:#include <stdio.h>fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为: FILE * fopen(const char * path, const char * mode);【参数】path为包含了路径的文件名,mode为文件打开方式(模式)。表1 fopen()的模式字符串打开方式说明“r”以读模式打开文件“w”以写模式打开,把现有文件的长度截为0,
C语言的getc()和putc()函数 C语言的getc()和putc()函数getc()和putc()函数与getchar()和putchar()函数类似。不同的是,要告诉getc()和putc()函数使用哪一个文件。下面这条语句的意思是"从标准输入中获取一个字符":ch=putchar();然而,下面这条语句的意思是“从fp指定的文件中获取一个字符”:ch=putc(fp);类似地,下面语句的意思是"把字符ch放入FILE指针fpout指定的文件中":putc(ch,fpout);实际上,putchar()函数一般通过put
C语言的restrict类型限定符 C语言的restrict类型限定符restrict限定符的用法restrict关键字允许编译器优化某部分代码以更好地支持计算。它只能用于指针,表明该指针是访问该对象唯一且初始的方式。要弄明白为什么这样做有用,先看几个例子。考虑下面的代码:int ar[10];int * restrict restar= (int *) malloc(10 * sizeof(int));int * par= ar;这里,指针restar是访问由malloc()所分配的内存的唯一且初始的方式。因此,可以用res
C语言的strcpy()和strncpy()函数 C语言的strcpy()和strncpy()函数strcpy()函数strcpy() 函数用来复制字符串,其原型为: char *strcpy(char *dest, const char *src);【参数】dest 为目标字符串指针,src 为源字符串指针。注意:src 和 dest 所指的内存区域不能重叠,且 dest 必须有足够的空间放置 src 所包含的字符串(包含结束符NULL)。【返回值】成功执行后返回目标数组指针 dest。strcpy() 把src所指的由NULL结
C语言的typedef指令 C语言的typedef指令typedef工具是一个高级数据特性,利用typedef可以为某一类型自定义名称。它与#define有3个不同点:(1)与#define不同,typedef创建的符号名只受限于类型,不能用于值。(2)typedef由编译器解释,不是预处理器。(3)在其受限范围内,typedef比#define更灵活。工作原理使用typedef时要记住,typedef并没有创建任何新类型,它只是为某个已存在的类型增加一个方便使用的标签。示例:假设要用BYTE表示1字节的数组。typ
C语言的volatile类型限定符 C语言的volatile类型限定符volatile限定符的用法volatile限定符告诉计算机,代理(而不是变量的所在的程序)可以改变该变量的值。通常,它被用于硬件地址以及在其他程序或同时运行的线程中共享数据。例如,一个地址上可能存储着当前的时钟时间,无论程序做什么,地址上的值都随时间的变化而变化。或者一个地址用于接收另一台计算机传入的信息。volatile int locl; /*locl是一个易变的位置*/volatile int *ploc; /*ploc是一个指向易变的位置的指针*/以
C语言的程序跳转break,continue等 C语言的程序跳转break,continue等引言一般而言,程序进入循环后,在下一次循环测试之前会执行完循环体中的所有语句。continue和break语句可以根据循环体的测试结果忽略一部分循环体内容,甚至结束循环。下面介绍break、continue和goto语句的用法。break语句这3中语句都能从程序流的一处跳至另一处。所有的循环和switch语句都可以使用break语句。它使程序控制跳出当前循环或switch语句的剩余部分,并继续执行更在循环或switch后面的语句。示例:while
忙里偷闲读首诗--前言 忙里偷闲读首诗–前言对酒当歌,人生几何?譬如朝露,去日苦多。你我皆星尘,离合奈何悲欢。不可忙于奔跑,而忘记思考我是谁?我从哪里来?我要到哪里去?不经思索的人生不值得一过。中国古诗词,源远流长,辉煌璀璨!千百年来,它如同一股气势磅礴的巨流,注入长江、黄河,奔腾不息,流淌在中华大地!它是多元的文化景观,肩负着民族文化精神的传承。它有石破天惊的艺术魅力和顽强的生命力:可谱曲弹唱;可朗诵歌台;又可淡泊明志,影响千秋万代。 古诗词,在中华五千年的文化中,在斑驳的历史长河中,在独特韵味的四季里,
C语言的单字符IO之getchar()和putchar() C语言的单字符IO之getchar()和putchar()引言getchar()和putchar()每次只处理一个字符。你可能认为这种方法很低级,与我们的阅读方式相差甚远。但是,这种方法很适合计算机,而且这是绝大多数文本处理程序所用的核心方法。示例分析/* echo.c -- repeats input */#include <stdio.h>int main(void){ char ch; while ((ch = getchar()) != '#')
C语言的二进制IO函数fread()和fwrite() C语言的二进制IO函数fread()和fwrite()之前的fprintf()、fscanf()、fgets()和fputs()等标准I/O都是面向文本的,用于处理字符和字符串。例如,下面的代码:double num=1./3;fprintf(fp,"%f",num);把num存储为8个字符;0.333333。使用%0.2f转换说明将其存储为4个字符:0.33,用%0.2f转换说明将其存储为14个字符:0.33333333333。改变转换说明将改变存储该值所需的空间数量,也会导致存储不同的值。
C语言的格式化输出转换说明、修饰符和标记详解 C语言的格式化输出转换说明、修饰符和标记详解表1 转换说明及其打印的输出结果转换说明输出%a,%A浮点数、十六进制数和p计数法(C99/C11)%c一个字符%d有符号十进制数%e,%E浮点数,e计数法%f浮点数,十进制计数法%g,%G根据数值不同自动选择%f或%e,%e格式在指数小于-4或者大于等于精度时使用%i有符号十进制整数(与%d相同)%o无符号八进制整数%p指针%s字符串%u无符号十进制数
C语言的宏之带参数宏 C语言的宏之带参数宏引言C语言允许宏带有参数。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数,这种宏外形和作用与函数类似,即类函数宏。但是它的行为和函数调用完全不同。对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参。类函数宏定义的圆括号中可以有一个或多个参数,随后这些参数出现在替换体中。示例分析下面是一个类函数宏的示例:#define SQUARE(X) X*X在程序中可以这样使用:z= SQUARE(2);这看上去像函数调用,但是它的行为和函数调用完全不同。
C语言的存储类别 C语言的存储类别关键字auto、extern、static、register、_Thread_local (C11)一般注解变量的存储类别取决于它的作用域、链接和存储器。存储类别由声明变量的位置和与之关联的关键字决定。定义在所有函数外部的便来那个具有文件作用域、外部链接、静态存储器。声明在函数中的变量是自动变量,付费该变量前面使用了其他关键字。它们具有块作用域、无链接、自动存储期。以static关键字声明在函数中的变量具有块作用域、无链接、静态存储期。以static关键字声明在函数外部的变量具有文
filter函数 与filtfilt函数的效果区别 filter函数 与filtfilt函数的效果区别filter滤波器称为一维数字滤波器。filtfilt滤波器称为零相位数字滤波。其滤波算法是基于filter而来的。只是filtfilt实现了零相位。其基本实现过程为先让信号用filter滤波,再将信号时域反转再次通过filter滤波,这样两次滤波后相位实现了零相位。filter滤波有明显的延迟,filtfilt滤波延时比filter小很多。分析如下(程序参见matlab脚本,完整程序下载链接):(1)设置三种频率(10Hz,20Hz,30Hz)构成的信
C语言的宏之明示常量 C语言的宏之明示常量引言预处理功能是C语言特有的功能,它是在对源程序正式编译前由预处理程序完成的,程序员在程序中用预处理命令来调用这些功能。宏定义可以带有参数,宏调用时是以实参代换形参,而不是“值传送”。为了避免宏代换时发生错误,宏定义中的字符串应加括号,字符串中出现的形式参数两边也应加括号。文件包含是预处理的一个重要功能,它可用来把多个源文件连接成一个源文件进行编译,结果将生成一个目标文件。条件编译允许只编译源程序中满足条件的程序段,使生成的目标程序较短,从而减少了内存的开销并提高了程序的效
C语言的命令行参数 C语言的命令行参数在图形界面普及前都是用命令行界面。命令行(command line)是在命令行环境中,用户为运行程序输入命令的行。命令行函数(command-line argument)是同一行的附加项。如下例是unix环境下的命令行:$ fuss -r Gingerfuss就是命令行,后面的是命令行参数。例如在windows中常用的查看ip地址的命令C> ipconfig /allipconfig是命令行,后面的是参数。一个C程序可以读取并使用这些附加项。示例:/* repe