ubuntu上配置ipopt和casadi求解二次规划
前言
二次规划问题是是很多机器人控制器中所涉及到的问题,好的求解方式也非常重要。这里使用 casadi 来实现二次规划的求解
ipopt 安装
安装依赖
由于需要编译 C++,所以需要一些基础的依赖
1234apt-get updateapt-get -y upgradeapt install build-essentialapt-get install -y gcc g++ gfortran git patch wget pkg-config liblapack-dev libmetis-dev libblas-dev vim
下载所需要的代码文件
一共有 5 个比较重要的包
12345git clone https://github.com/coin-or/Ipopt.git # ipoptgit clone https://github.com/coin-or-tools/ThirdParty-ASL.git # ThirdParty-ASLgit clone https://github.com/coin-or-tools/ThirdParty-HSL.git # ThirdP ...
Linux系统配置clash
前言
在 Linux 上进行项目开发时,经常会用到 github 来进行对项目的管理,但是苦于没有好的代理,经过一番查找,找到了 clash,是一个非常好用的代理软件
安装支持
主要是需要用到 curl 工具,所以直接在命令行中输入如下代码即可
1sudo apt-get install curl
安装clash
文件下载: https://zywang.lanzn.com/iPMwp2aneodc
下载完成之后,直接将其解压到 Documents 目录下,保证自己不会误删这个文件
使用clash
使用 ctrl-alt-t 打开终端,然后进入该文件目录中,按照里面的 readme.md 文件做一些配置
在终端输入
1vim .env
使用 vim 修改该配置文件,将其中的 CLASH_URL 修改为自己的订阅地址,并且将 CLASH_SECRET 设置为一个比较简单的就行,例如 123。然后保存退出即可
之后在终端中输入
1sudo bash start.sh
启动程序,然后会出现如下情况,并且会有一些开始使用的提示
然后如果是初次使用的话,需要进行一些基础的配置
在终端中输入如下 ...
clang-tidy配置
前言
介绍
Clang-Tidy 是一个由 LLVM 项目提供的开源静态分析工具,用于进行静态代码分析和代码质量改进。利用 Clang 编译器强大的功能来对 C++ 代码进行静态分析,并且提供一系列代码改进建议和警告
Clang-Tidy 是基于 Clang 的 AST 抽象语法树进行分析的,并且能检测到许多常见的编码错误和代码风格问题,包括语法,逻辑,性能问题和风格问题等
安装
windows
Download LLVM releases
直接从上述网站上找到一个对应的发行版安装即可
然后在命令行中输入如下指令来查看是否安装完成,一般来说安装完成之后需要重新启动一下
1clang-tidy -version
ubuntu
LLVM
根据该文章的内容来安装
安装最新版 LLVM,需要注意,该指令只能在 bash 中使用
1sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)"
安装 Clang-format
1apt-get install clang-18 clang-tools-18 clang-18-d ...
clang-format配置
前言
简介
Clang-format 是一种代码格式化的工具,可以用来格式化各种代码,支持的语言如下
C/C++
Java
JavaScript
Objective-C
Protobuf
C#
Clang-format 的配置文件可以取名为 .clang-format 或者 _clang-format ,该文件被放在项目的根目录下,一般来说 Clang-format 会自己去寻找配置文件的
安装
windows
Download LLVM releases
直接从上述网站上找到一个对应的发行版安装即可
然后在命令行中输入如下指令来查看是否安装完成,一般来说安装完成之后需要重新启动一下
1clang-format -version
ubuntu
LLVM
根据该文章的内容来安装
安装最新版 LLVM,需要注意,该指令只能在 bash 中使用
1sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)"
安装 Clang-format
1apt-get install clang-18 clang-tools-1 ...
STM32CubeMX入门
前言
cubemx是一个可以自动生成代码的单片机学习和使用的软件,非常方便,但同时配置时需要注意芯片以及外设的各个引脚的配置以及使用情况
C语言:内存四区
下载
直接在官网上下载
基础配置
需要完成的如下
新建工程
在右侧查找自己所使用的芯片型号,然后选择对应的芯片
打开 RCC,并且设置为外部时钟源
然后配置时钟树
一个需要注意的问题
在生成代码之后,在第一次编译时会有一个报错,就是找不到对应的启动文件,也就是 startup 开头的汇编文件( startup_stm32f407xx.s ),是用来启动整个项目的,这个文件可以在 CubeMX 保存在 C 盘中的系统文件中找到
开启调试
在 SYS 中的第一个选项 Debug 中选择 Serial Wire 即可开启 SWD 的调试,如下
时钟树的配置
时钟介绍
**时钟是单片机运行的基础,时钟信号推动单片机内各个部分执行相应的指令。**时钟系统就是CPU的脉搏,决定cpu速率,像人的心跳一样 只有有了心跳,人才能做其他的事情,而单片机有了时钟,才能够运行执行指令,才能够做其他的处理 (点灯,串口,ADC),时钟的重要性不言而喻 ...
GPIO八种工作模式
前言
简介
GPIO 是通用输入输出端口的简称,可以通过软件控制其输出和输入。stm32 芯片的 GPIO 引脚与外部设备相连来实现与外部的通信,控制以及信息的采集功能
上拉和下拉
当闭合上图中的 VDD 处的开/关时,此时设置为上拉通路导通,这时候如果不接入外设或者电路断开时,整条回路的电压时断路时的电压,也就相当于电阻不存在,这时候中间处的电平被拉高为 VDD 的电平,也就是处于高电平
如果闭合 VSS 处的开关时,也就是打开下拉电阻,这时候没有外部输入的时候,中间点处电压为 VSS
实际上在 stm32 内部的上拉实际上是一个弱上拉,也就是通过上拉电阻的电流很小,如果想要输出一个大电流,就需要外接上拉电阻了,其实就是增加导线的输出电流。而对于下拉电阻,是让 stm32 的 CPU 引脚输出低电平,结果由于后续电路影响输出的低电平达不到 GND。这时候接入下拉电阻是为了降低导线的输出电流。当上下拉电阻都不开启,此时是浮空模式,引脚的电压是不确定的,此模式下的管脚电压会时不时改变
在 stm32 中上下拉以及浮空模式的配置是通过 GPIOx_CRL 和 GPIOx_CRH 寄存器控 ...
IIR滤波器设计
前言
IIR(Infinite Impulse Response)数字滤波器是指无限长冲激响应数字滤波器,因其具有良好的幅频响应特性,被广泛应用于通信、控制、生物医学、振动分析、雷达和声呐等领域
IIR滤波器的设计可以通过设计一个模拟滤波器,进而利用脉冲响应不变法或者双线性变换法来进行数字滤波器的设计。
设计思路
通常利用模拟滤波器的理论和设计方法来设计 IIR 数字滤波器。设计过程是:先根据技术指标要求设计出一个相应的模拟低通滤波器,得到模拟低通滤波器的传递函数 H(s)H(s)H(s) ,然后再按照一定的转换关系将设计好的模拟滤波器的传递函数转换为数字滤波器的系统函数 H(z)H(z)H(z) 。转换方法有两种:脉冲响应不变法和双线性映射法
利用模拟滤波器设计数字滤波器,就是从已知的模拟滤波器传递函数 H(s)H(s)H(s) 设计数字滤波器传递函数 H(z)H(z)H(z) ,这是一个由 s 平面到 z 平面的映射变换,这种映射变换应该遵循两个基本原则
H(z)H(z)H(z) 的频响要能模仿 H(s)H(s)H(s) 的频响,即 s 平面的虚轴应该能映射到 z 平面的单位圆 ...
C语言可变参数的原理及实现
前言
使用过 C 语言的人都会知道 printf 函数,它的参数中有固定参数 format 和可变参数 ... ,那 format 后面的参数个数不确定,类型也不确定,这些参数都存放在栈中。在 format 中在特定的位置指定对应可变参数的类型,也就是根据 format 里的格式依次将数据取出
原理
所有可变参数都存放在栈中。在 format 中在特定的位置指定对应可变参数的类型,也就是根据 format 里的格式依次将数据取出。而取出的动作需要用到 va_arg va_list va_end 这些宏定义,而且取出可变参数的时候,就相当于是指针指向栈中存放数据的位置,然后将指针不断移动来取出数据。
所以就需要对应着可变参数的数量,一定要注意,一旦出现可变参数数量不对应的情况,那就会产生 crash ,主要还是由于参数的数量如果少于使用参数的数量时,就会导致访问栈内存溢出,从而导致 crash
由于参数分为两个部分:固定参数和可变参数,至少需要有一个固定参数,可变参数的数量可以有多个,声明中使用 ... 表示
va_list
1typedef char * va_list;
实际上就是一 ...
AT&T汇编基础语法
前言
参考
x86 Assembly Guide
编译
编译汇编语言可以使用 GNU 编译器 gcc 和 汇编器 as 或者 gas。一个快速了解汇编语言的方式就是去看编译器输出的汇编程序。使用 gcc -S a.c 可以将 C 语言编译为汇编语言,就可以查看对应的汇编语言了。使用 gcc a.s 就可以把对应的的汇编语言编译为可执行文件了。使用 gcc a.s -c 或者 as a.s 可以将汇编语言编译为可重定位目标文件
例如在 C 语言中经典的 hello world 程序
12345#include <stdio.h>int main() { printf("hello, world"); return 0;}
编译为汇编代码为
123456789101112131415161718192021222324252627282930313233343536373839404142434445 .file "a.c" .text .section .rodata.LC0: .string "hel ...
bochs+gdb调试工具链
前言
bochs 中自带一个反汇编器,这只能查看可执行文件的反汇编之后的指令,但是如果书写 C 语言的话,就使得调试非常麻烦(无计可施),所以利用 bochs 来写操作系统还是挺困难的,同时也没有办法查看各个变量的状态和 cpu 的状态。一旦遇到问题就很被动,所以介绍一个 bochs+gdb 的一个调试工具链
bochs安装与配置
安装环境
123sudo apt-get install g++ sudo apt-get install makesudo apt-get install libx11-dev xserver-xorg-dev xorg-dev
安装 bochs
123456wget https://udomain.dl.sourceforge.net/project/bochs/bochs/2.6.8/bochs-2.6.8.tar.gztar zxvf bochs-2.6.8.tar.gzcd bochs-2.6.8/./configure --prefix=/your_path/bochs --enable-gdb-stub --enable-disasm --en ...