萌芽
本人自动化专业
2012,2013大学时, 在TED上刷到一个无人机演示视频
https://www.bilibili.com/video/BV1at411r7gn/?vd_source=4cbc7c695dc3f8d928061a83b3a1784c
震惊的几个画面
- 不同高度,悬停飞行.
- 长竿放在无人机背面,飞行可以保持, 竿不会倾斜倒下.
- 剪掉一个无人机的桨, 可以保持平衡按航线飞行.
- 和人进行打乒乓球, 并击回人的手附近.
- 多机配合, 用网接住乒乓球.
作为一个自动化专业的人, 知道有控制理论, 二阶平衡理论.
但没有真正真正用编码实现过.
故大学期间就想从事机器人开发, 像钢铁侠一样, 制造自己的机器设备.
真正行从事的工作是智能物联网, 无人机,机器人相关行业
工作
第1阶段工作:
高通平台 - Android手机电源管理 + BSP内核驱动开发
工作内容:
1.高通平台 + linux电源管理系统 – 工作无成就感,不感兴趣
2.BSP内核驱动 – 难度大
自我总结:
不感兴趣 + 难度大 --> 工作没有成就感 --> 不喜欢此岗位
掌握有用技能:
- kernel 配置编译, dts配置, kernel常用API,模块.ko加载
- git
第2阶段工作:
博通/瑞昱/联发科平台 - 网络路由器 - 网络协议-固件开发
工作内容:
1.基于SDK做二次开发, 适配品牌的网页主页功能,实现http后端请求
2.固件集成开发
3.运营商+客户 功能需求实现
4.解决项目中的问题
自我总结:
1.基于方案成熟SDK做二次开发,只需定制路由器的网页主页即可
2.小组长对技术要求较严,希望开发人员能够真正解决问题,而不是用规避方案暂时解决问题,期望bug不要被反复reopen,这个氛围环境比较适合新人
3.能够解决问题,实现客户定制需求 --> 工作有成就感 --> 喜欢此工作
掌握有用技能:
- gdb/gdbserver调试–>极大提高开发/调试效率,
- 网络协议: http/DNS/DHCP/VPN 等常用网络协议
- 网络命令工具:
- 网络诊断 ping/arp/diag/nslookup/traceroute
- 网卡配置 iproute ip link/address/route/tunnel,ethtool, ifconfig
- 网络文件上传下载 wget/curl/ftp/tftp/sshfs/scp
- tcpdump/wireshark抓取报文,sendip报文组包,ss/netstate本地网络连接状态,nload/ifstat网速查看,nmap网络发现,iperf网络带宽测试
- iptable防火墙,brctl网桥,tc网络整流限速
- wifi指令 wl/iwconfig/wpa
- 定位系统与程序问题能力:
- valgrind 定位内存问题
- strace 跟踪系统调用问题
- lsof 文件使用状态
- tcpdump抓取网络数据
- 网络服务配置搭建: 拨号相关服务DNS/DHCP/VPN/L2TP/PPTP/PPPOE,文件共享samba/cifsd/ftp/fttp/nfs,网站http/https,中间件消息服务MQTT
第3阶段工作: 2022.10-至今
英伟达NX /瑞芯微 RK3588 - 无人机/机器人 – 嵌入式-传感器-外设通讯-固件开发
机器人产品对性能要求较强, 有性能强CPU, 大内存, 直接运行ubuntu系统, 需要的库和工具不用编译, 直接apt install 安装.
50%和PC软件开发一样, 开发-调试软件效率极高.
工作内容:
1. ROS1/ROS2 机器人底盘 + 外设 + 传感器
1. IMU+轮速计+RTK+超声波+BMS电源+tof深度 等外设传感器,按析协解析数据,通过ros topic发布数据
2. 机器人底盘控制,并通过 ros /cmd_vel 中linear/vangular实现控制,给导航做路径规划
3. 保证整机的稳定运行,解决传感器各种数据异常
2. RK3588 + 固件制作
1. rk3588 ubuntu20.04 + ros1 +依赖库 +系统工具 + 定制配置 的固件制作
2. docker arm64交叉编译
3. docker 交叉编译
3. 其它功能
1. python flask 1.实现OTA升级 server/client 前后端,在线检查版本,下载服务端,更新固件功能; 2.网页控制底盘移动,网页采集图片数据。
2. python + opencv实现一个障碍物识别,标注的可视化程序
3. wifi STA/AP模式配置
4. frpc远程代理ssh,实现在线网络调试
自我总结:
1. 开发板使用ubuntu系统,开发效率极高, 不像传统嵌入式,固件需要编译 + 打包 + 升级;sudo apt install 安装需要的开源库+工具,极大提高开发效率
2. 使用python, 写小工具,测试用例,快速验证,语法简单,开发效率极高
3. 学到了很多,实现很有有用的功能,工作很有成就感 --> 很喜欢此工作
掌握有用技能:
- vscode + gdb/gdbserver 极大提升C/C++ 调试、开发效率
- python语言:pip安装库,几行代码实现一个复杂功能;各种小工具,测试用例,脚本script,写代码原来可用如此快乐,如此简单
- vscode + python + pydebug 极大提升python开发、调试效率
- scons python语言的编译规则,替代cmake/make,极大提高编写C/C++ 编译、链接脚本
- make 处理字符串变量看不懂,云里雾里,不好调试
- cmake 语法自称一派,需要学习其独有的语法规则,处理字符串变量比make好很多
- scons python语法简洁易懂,跨平台(替换cmake跨平台),拥有python一样简洁的字符串处理语法
- 提升对gcc 编译、链接流程与选项功能:make习惯瞎写,编译选项混加链接选项;cmake默认关闭编译、链接流程。
- gcc编译、链接流程与选项,由于scons默认显示完整的编译、链接流程;还可以参考命令,自己手动修改命令编译,链接;故而实现下面功能
- scons完成ROS程序编译
- scons完成arm64 RK3588交叉编译
- cmake 各种变量/选项,对应的gcc选项
- cmake 完成arm64 RK3588交叉编译
- 传感器数据的实时性优化– 极度重要, 保证传感器数据稳定 --> 提高slam定位精度 --> 保证导航准确性 --> 整机自动效果的稳定性
- 快速阅读开源代码,由于熟悉gcc和gdb,故下载源码,编译debug版本的程序/库,使用gdb调试,可以快速定位问题,知道运行逻辑,实现原理
工作小结
-
工作的正反馈 --> 提高工作激情
-
工作的负反馈 --> 产生消极厌恶情绪,或产生大的心里压力
-
实际工作,不可能让你100%从事自己喜欢的工作,如:
- 个人喜欢在linux下开发,不喜欢Android下的开发
- 个人喜欢机器人产品,能够让机器人动起来,并按指定规定动起来,就会有很大的成就感;
- 个人喜欢研发,不喜欢对接,或沟通; 但实际工作 40%确认需求, 20%编码, 40%调试迭代; 现在心态已放平和,对接沟通需求,和组员交流也是工作的一部分内容; 多沟通,减少返工,多交流,保证产品质量,项目产品真正落地交付,开发工作才有价值;
- 从事不擅长,不熟悉的领域,如MCU电机控制,蓝牙通讯,BSP内核驱动,算法图像定位导航; 因产品技术更新,人员变动/紧缺,就得去接手掌握一些新技术,新功能,玩成功能开发;放宽心态,向组织/领导表明 技术/工作 不熟悉,需要更多的实际调试开发.