刚才刷微博的时候看到一句话:
No risk, no story.
突然很感伤,遂记此文。去年6月,我终于离开了那个让我感到不幸、不争、恨过于爱的学校,成为一名社会人士,到现在我已经工作一年了。
去年这时我无比迷茫,我想象不到一个二本师范大学物理系的学生选择不当老师会面临什么。不管如何,总要踏出第一步,于是我踏上了火车,只身前往一个完全陌生的城市,从事企业咨询服务。说实话,这份工作做的并不是什么体面活,让我感到我国的知识产权行业就是一滩烂泥。对外,客户都叫我代工,但我们都知道,专利工程师并不是真正的工程师;况且,我并没有执行撰写任务,我们只是中奸商赚差价。
中国的企业咨询行业、知识产权行业良莠不齐,大部分市场来源于企业对高额的科技政策补贴的需求。由于大学扩招、市场经济野蛮发展等原因,全国各地出现了一批平均文化水平不高的科技企业。这些企业处于产业链的中下游,靠着落后的生产力、生产工具实施代加工等业务,没有核心技术支撑,即将被市场淘汰。还有一些非科技型企业,他们从事电子元器件贸易、养老、文化传媒、工程造价等行业。由于工商监管不严、政策界限划分模糊、政府审核评定的专家团队文化水平较低等原因,这些非科技型企业原则上也可以申报到科技政策补贴。这些企业拿政府补贴的目的有三种,一种是为了给公司续命,一种是拿到科技型企业的头衔后将公司卖出得利,还有一种是营业额很高,靠政府颁发的高新技术企业等资质来“合理避税”。
上述企业需要包装,让政府误认为其具有先进的生产力、生产工具,而包装的途径就是知识产权。在此背景下,企业咨询公司会与知识产权公司合作,与这些落后的企业对接,申请知识产权,靠这些知识产权帮助落后企业申请到政府补贴。企业咨询公司通过分析企业的主营业务、发票、合同等信息,拟出数十个专利、软件著作权名称,知识产权公司以特定的撰写技巧可以通过名称写出对应的知识产权申报材料,这些知识产权将作为研发的证明材料。咨询公司会指导企业伪造研发记录,将企业部分账目的资金划出10%左右归集到研发费用中。最后伪造立项报告、结题报告等研发过程的证明材料,一家企业就“合理合法”的包装成了科技型研发企业。实际上这个流程就是反推整个研发流程:政府看你有没有研发,不会派个人到你公司守着,只会看你是不是有研发支出,有没有研发过程的证明材料,研发成果具不具有技术,如果真的有技术那肯定申请了知识产权,这一系列材料都有就证明你有研发。而这一切都可以操作。
政府每年还会从获得政策优惠的企业中抽查部分企业,检查其研发情况是否规范。比如某企业靠包装的数个软件著作权拿到了高新技术企业的资质,但企业实质上并没有任何软件开发团队。拿到资质的次年运气不好被政府抽查,企业便会再度与企业咨询公司、知识产权公司合作,找他们购买软件的操作界面录像、软件的使用说明书等材料,然后找企业内数个理工科大专学历的员工作为研发人员,将这些材料提交给政府指定的审计事务所出审计报告。
过去,企业咨询公司的这些工作审计事务所都会代办,企业只需要提供一些账务信息,审计事务所可以为他们做出研发台账、研发立项清单,并自行与知识产权公司对接伪造真实的知识产权,一条龙服务。但这几年企业咨询公司从审计事务所手上接下了这些任务,权责划分开始明确。我猜某些上市的财税顾问公司可能仍然会包揽这些工作,肥水不流外人田。
以前我在象牙塔里努力学习,想象着英特纳雄耐尔,哪会想到底层企业都是这样的。而企业咨询公司给了我一个很好的平台,让我迅速看清了社会底层的运行模式,让我看到深圳光鲜亮丽的背后那些为了深户、金钱、利益而痛苦挣扎的企业主。
我非常反感上述流程,所以我辞职了。新公司做农机自动驾驶,老板也是个有意思的人,他把我安排在嵌入式部门。一开始我不会编程,部门老大只给了我一些运动学的计算问题,让我做一些算法验证。
那段时间我都在做Kalman滤波,用Matlab和Python写,似懂非懂。那会领导也没给我分配什么任务,我就一直在自学,Matlab和Python的水平都有了很大的提升。21年3月份的时候,我开始接触轨迹跟踪与生成,在Matlab上写了纯跟踪算法和线性二次型调节器LQR。纯跟踪算法比较简单,它有一个预锚点,让车辆跟着前方的一个点走。如果路径曲率较小,则预锚点较远,这时是前瞻性的跟踪;而当路径曲率较大,则预锚点较近,这是是着重与眼前的跟踪。但这个预锚距离似乎并没有最优化的计算方法,一般设置成与速度成正比。LQR则令我眼前一亮,第一次看到这玩意儿的时候,我心想:这不就是最小作用量原理吗?不久后我根据西华大学一个前辈的Simulink程序改写出一份Matlab Function版本的代码,但由于我不擅长调参,所以最终的跟踪效果不如纯跟踪算法。做完这两个路径跟踪算法后,我开始写一个路径规划算法,这个是我转行后做得比较好的一件事。这个算法需要自动生成农田的作业线,需要考虑很多情况。比如,农机走到田坎要自动掉头,驶入下条作业线要考虑到农机的最小转向半径,拖拉机的最小转向半径在5米左右,而插秧机几乎可以原地转向,如果最小转向半径比作业线的间距还要大,则农机无法驶入临近的作业线,于是要驶入的新作业线的序号与作业线间距、最小转向半径之间有一个不等式关系,需要通过这个不等式算出一条最佳路径,使得农机行驶的总里程最小。我用旅行商算法在Matlab上实现了这个作业线的生成。为了减小作业线数据点的体积,我还设计了一种方法,让车走到哪就在车辆附近生成作业线,这就像魔兽争霸里的战争迷雾,车辆只需在意自己附近的局部路径点进行跟踪就好了,并不需要在意全局的所有路径点。然后我写了底稿,申请了专利,现在初步审查也通过了,尚未公开。
这个路径生成的工作做完之后,我便开始学STM32了。进展非常迅速,从5月初到7月底,我陆续写了按键状态机、串口通信、CAN通信、2.4G的SPI通信等模块,我比较喜欢写通信协议的编码、解码这一块。我写了一份CRC校验库,可以设置初始值、输出异或值、输入反转、输出反转以及CRC多项式,设置一个参数结构体,所有相关工程编码CRC校验码都用同样的参数结构体就好了。在做2.4G通信时,我把正点原子的工程改成了非常好用的基于HAL库的SPI句柄样式,于是可以方便的切换2.4G模块的发送、接收状态,并且使得同一MCU上使用多个2.4G模块成为可能。
7月之后我加入了公司的插秧机改装项目。我们之前做的那些产品的思路是销售“配件”,就是说我们之前卖的产品是独立于农机的。而插秧机的改装思路完全不同,我们开始用“造车”的思路改装农机。整个插秧机的所有ECU都采用CAN总线通信,并使用SAE J1939协议,用Vector CANdb++整理数据帧的发送节点、接收节点,编写不同的参数群编号。我之前学接触了一点python现在也派上用场了,我们弄了一套python的代码生成脚本,通过dbc数据库生成数据帧的发送、接收代码。我们还用Simulink写各种电机的PID串口联调工程,写好之后用Simulink Code Generation生成代码,用State Flow写VCU的状态机。等等。
这些没有弄虚造假的东西让我感到很有底气。办公室的氛围也是我喜欢的,让我感到这一群人在为了共同的目标做事。我觉得,现在终于算是转行成功了吧。