使用四十行Mathematica写一个LISP解释器
代码
Eval[cmd_] := (
If[Length[cmd] > 1,
car[cmd] @@ cdr[cmd]
, cmd]
);
car[lis_] := lis[[1]];
cdr[lis_] := (If[Length[lis] <= 1, {},
lis[[2 ;; Length[lis]]]]);
resetcar[lis_] := Clear[Evaluate[car[lis]]];
lambda[params_, expr_] :=
(
Module
[params, params = List[##];
Eval[expr]] &
);
setfunc[name_, expr_, params_] := (
DownValues[Evaluate[name]] = HoldPattern[
Evaluate[name @@ params]] ->
Eval[expr];
);
define[funclis_, expr_] :=
(
resetcar[funclis];
Module[
{params, body},
setfunc[car[funclis], expr, cdr[funclis]];
];
);
defwithrule[rule_] := (
DownValues[Evaluate[car[rule]]] = HoldPattern[
Evaluate[car[rule] @@ rule[[2]]]
] -> Eval[rule[[3]]];
);
defsyntax[rules_] := (
resetcar[rules];
defwithrule /@ cdr[rules];
);
eval[cmds_] := Eval /@ cmds;
以上包含了lambda算子,宏声明和展开等。
上面是代码,下面是一个例程
eval[
{
{Set, haohao, 2},
{define, {plus, c_, d_}, {Plus, c, d}},
{plus, 3, 2},
{defsyntax,
{prefix,
{prefix,
{a_, plus, b_},
{plus, a, b}}
}
},
{Integrate, x^2, {x, 0, haohao}},
{prefix, 2, plus, 10},
{Plot, Sin[x/2], {x, 1, 100} },
{Sin, \[Pi]}
}
]
明天再写说明好了
其实,mathematica所用的wolfram语言的本质就是LISP了啦。
drone sim 无人机模拟器
使用OpenGL + PhysX写了一个简单的无人机模拟器,现在仅仅是简单的版本,内置了一个高度PID控制器(用Mathematica设计的)和对于姿态率的简单控制。在考虑做一些比较前沿的自动控制方面的工作上去。
性能应该很不错,debug版本都能达到每秒$$10^4$$的模拟速度,够用了。
https://github.com/xuhao1/dSim
还有很多漏洞和要改的地方,不过也勉强堪用了。
下载包在
http://wsn.xuhao1.me/dSim.zip
未来开发方向是和ROS的底层融合,加上我们的RTLinux系统,和Mathematica的control system融合来设计飞控程序
使用方法见注释。。。这是我第一个好好写注释的项目。
下一步是进行无人机通用配置文件的设计和开发。
BTW,项目还需要一个好名字
数学建模
摘要
The utilization of the 搜查机 would reach maximization if we can establish a rational 搜查方案。我们的思路是将这个问题分为四个步骤,1、建立飞机坠毁地点的概率模型。2、建立搜索模型。3、用计算机模拟规划路线进行飞行器搜素。4.将飞行器搜索的反馈结果作为依据,更新我们的概率模型
继续阅读“数学建模”
Probabilistic Robotics学习笔记: Bayes Filter 基本概念
假期学习Probabilistic Robotics的一些笔记
使用的教材为《Probabilistic Robotics》
继续阅读“Probabilistic Robotics学习笔记: Bayes Filter 基本概念”
OliviaCapture 开源项目
自己做的一个小项目,开源实现了用于飞行器的图像传输,之后会加入OSD功能,引入内置的模式识别和发布iOS版本。
另,视频传输协议是自己制定的,尚不完善。
使用ffmpeg X264 opencv实现
https://gitcafe.com/xuhao1/oliviacapture
和
https://gitcafe.com/xuhao1/OliviaVideo
多旋翼电磁干扰小测试
之前一直知道电磁干扰有可能对飞机造成影响,但是多大心里没底,结合那个等角螺线的坠落轨迹,今天又测试了下
继续阅读“多旋翼电磁干扰小测试”
飞控开发笔记:PIXHAWK App分析
新坑
终于下定决心重新写掉飞控了,fork了pixhawk。删掉了除驱动和姿态,位置确定以外的绝大部分模块。
前行的道路是艰难的,想做一个好的飞控需要太多各学科知识,在这里开坑做笔记,争取在年底结束前作出一个雏形。
继续阅读“飞控开发笔记:PIXHAWK App分析”
入手OS 15汽油机
入手OS汽油机一台,以后把调试记录在这里
继续阅读“入手OS 15汽油机”
FFMPEG 视频流杂谈
最近折腾定了ffmpeg的视频流压缩解压缩,对纯C风格编程感触颇多,在这里写点经验教训。
继续阅读“FFMPEG 视频流杂谈”