2015-2023_个人工作总结

本文讲述了作者从自动化专业背景开始,通过观看TED视频激发对机器人开发的兴趣,经历从Android手机电源管理到网络路由器固件开发,再到英伟达NX/RK3588无人机机器人领域的技术转变。作者强调实践和解决问题的重要性,分享了工作中的关键技能和感悟,包括使用ROS、Python、C/C++等技术以及调试工具的提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

萌芽

本人自动化专业
2012,2013大学时, 在TED上刷到一个无人机演示视频
https://www.bilibili.com/video/BV1at411r7gn/?vd_source=4cbc7c695dc3f8d928061a83b3a1784c
震惊的几个画面

  1. 不同高度,悬停飞行.
  2. 长竿放在无人机背面,飞行可以保持, 竿不会倾斜倒下.
  3. 剪掉一个无人机的桨, 可以保持平衡按航线飞行.
  4. 和人进行打乒乓球, 并击回人的手附近.
  5. 多机配合, 用网接住乒乓球.

作为一个自动化专业的人, 知道有控制理论, 二阶平衡理论.
但没有真正真正用编码实现过.
故大学期间就想从事机器人开发, 像钢铁侠一样, 制造自己的机器设备.
真正行从事的工作是智能物联网, 无人机,机器人相关行业

工作

第1阶段工作:

高通平台 - Android手机电源管理 + BSP内核驱动开发

工作内容:

​ 1.高通平台 + linux电源管理系统 – 工作无成就感,不感兴趣

​ 2.BSP内核驱动 – 难度大

自我总结:

​ 不感兴趣 + 难度大 --> 工作没有成就感 --> 不喜欢此岗位

掌握有用技能:

  1. kernel 配置编译, dts配置, kernel常用API,模块.ko加载
  2. git

第2阶段工作:

博通/瑞昱/联发科平台 - 网络路由器 - 网络协议-固件开发

工作内容:

​ 1.基于SDK做二次开发, 适配品牌的网页主页功能,实现http后端请求

​ 2.固件集成开发

​ 3.运营商+客户 功能需求实现

​ 4.解决项目中的问题

自我总结:

​ 1.基于方案成熟SDK做二次开发,只需定制路由器的网页主页即可

​ 2.小组长对技术要求较严,希望开发人员能够真正解决问题,而不是用规避方案暂时解决问题,期望bug不要被反复reopen,这个氛围环境比较适合新人

​ 3.能够解决问题,实现客户定制需求 --> 工作有成就感 --> 喜欢此工作

掌握有用技能:

  1. gdb/gdbserver调试–>极大提高开发/调试效率,
  2. 网络协议: http/DNS/DHCP/VPN 等常用网络协议
  3. 网络命令工具:
    1. 网络诊断 ping/arp/diag/nslookup/traceroute
    2. 网卡配置 iproute ip link/address/route/tunnel,ethtool, ifconfig
    3. 网络文件上传下载 wget/curl/ftp/tftp/sshfs/scp
    4. tcpdump/wireshark抓取报文,sendip报文组包,ss/netstate本地网络连接状态,nload/ifstat网速查看,nmap网络发现,iperf网络带宽测试
    5. iptable防火墙,brctl网桥,tc网络整流限速
    6. wifi指令 wl/iwconfig/wpa
  4. 定位系统与程序问题能力:
    1. valgrind 定位内存问题
    2. strace 跟踪系统调用问题
    3. lsof 文件使用状态
    4. tcpdump抓取网络数据
  5. 网络服务配置搭建: 拨号相关服务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. 学到了很多,实现很有有用的功能,工作很有成就感 --> 很喜欢此工作

掌握有用技能:

  1. vscode + gdb/gdbserver 极大提升C/C++ 调试、开发效率
  2. python语言:pip安装库,几行代码实现一个复杂功能;各种小工具,测试用例,脚本script,写代码原来可用如此快乐,如此简单
  3. vscode + python + pydebug 极大提升python开发、调试效率
  4. scons python语言的编译规则,替代cmake/make,极大提高编写C/C++ 编译、链接脚本
    1. make 处理字符串变量看不懂,云里雾里,不好调试
    2. cmake 语法自称一派,需要学习其独有的语法规则,处理字符串变量比make好很多
    3. scons python语法简洁易懂,跨平台(替换cmake跨平台),拥有python一样简洁的字符串处理语法
    4. 提升对gcc 编译、链接流程与选项功能:make习惯瞎写,编译选项混加链接选项;cmake默认关闭编译、链接流程。
  5. gcc编译、链接流程与选项,由于scons默认显示完整的编译、链接流程;还可以参考命令,自己手动修改命令编译,链接;故而实现下面功能
    1. scons完成ROS程序编译
    2. scons完成arm64 RK3588交叉编译
    3. cmake 各种变量/选项,对应的gcc选项
    4. cmake 完成arm64 RK3588交叉编译
  6. 传感器数据的实时性优化极度重要, 保证传感器数据稳定 --> 提高slam定位精度 --> 保证导航准确性 --> 整机自动效果的稳定性
  7. 快速阅读开源代码,由于熟悉gcc和gdb,故下载源码,编译debug版本的程序/库,使用gdb调试,可以快速定位问题,知道运行逻辑,实现原理

工作小结

  1. 工作的正反馈 --> 提高工作激情

  2. 工作的负反馈 --> 产生消极厌恶情绪,或产生大的心里压力

  3. 实际工作,不可能让你100%从事自己喜欢的工作,如:

    1. 个人喜欢在linux下开发,不喜欢Android下的开发
    2. 个人喜欢机器人产品,能够让机器人动起来,并按指定规定动起来,就会有很大的成就感;
    3. 个人喜欢研发,不喜欢对接,或沟通; 但实际工作 40%确认需求, 20%编码, 40%调试迭代; 现在心态已放平和,对接沟通需求,和组员交流也是工作的一部分内容; 多沟通,减少返工,多交流,保证产品质量,项目产品真正落地交付,开发工作才有价值;
    4. 从事不擅长,不熟悉的领域,如MCU电机控制,蓝牙通讯,BSP内核驱动,算法图像定位导航; 因产品技术更新,人员变动/紧缺,就得去接手掌握一些新技术,新功能,玩成功能开发;放宽心态,向组织/领导表明 技术/工作 不熟悉,需要更多的实际调试开发.

对提升编程技术的个人感悟

  1. 实践,练习,实践,练习,…
    1. 纸上得来终觉浅,绝知此事要躬行
    2. 没有实践练习, 踩过各种坑, 就没有思考过程, 不知道其中细节过程,方法,原理
  2. C/C++使用gdb调试, 查看内存值,而不是使用printf,cout打印结果; 通过vscode + gdb可以查看到变量值,变量的变化过程, 结构体数据类型; 代码流程, 从而快速修复问题.
  3. 多交流,多分享; 技术人员最大问题是话少,通过分享技术,心得,查缺补漏
  4. 对事物有好奇心, 示例
    1. 思考 ZeroMQ,MQTT 如何实现话题订阅/发布, 我以前写过类似QQ群聊天, 群成员发言时, 所有人都可以接受到消息. 原理上比较相似, 就可以知道大概的原理.
    2. 如何让机器底盘动起来
    3. 自己是否可以实现这样一个功能, 没错 造轮子
  5. 记笔记: 推荐markdown格式记录, 笔记软件推荐 typora,obsidia
  6. 写模块测试代码,单元测试代码
    1. 函数接口测试
    2. 单元测试
    3. 模块测试
    4. 程序测试
    5. 项目测试
  7. 学会测试,自测
    1.基本功能测试通过, 项目运行正常
    2.valgrind检测: 内存越界,内存泄漏,非法地址访问
    3.lsof检测: 1.文件重复打开,未关闭,造成文件句柄泄漏; 2.网络服务socket 没有检测read返回值,关闭socket,造成文件句柄泄漏;
  8. 主动踩坑,可以和c/c++规范 反着编码
    1. 申请内存1万次,初始化,不释放
    2. 打开1万个文件,不关闭
    3. 打开1万个socket, 不关闭,client端一直请求
    4. 主动访问非法地址: uint8_t *p = NULL; p=0x1234, 尝试访问/修改非法地址, 访问/修改 越界地址
    5. 使用过大, 过小, 异常参数调用API
      看看对运行程序,对系统的影响

实例: 2014年 我和同一时期参加公司实习的小明做比较,
前期我自认技术比小明高
可是过了两个月,小明的技术能力,编码能力比我高
和他们讨论交流问题时,发现一个区别点
1. 我如果遇到不会的API, 会上网查示例.
2. 小明遇到不会的API
1.先man 查看使用说明, 形参,返回值等
2.编写测试API的代码
3.没有示例参考,编译报错
再修改,再编译报错
再修改,编译通过
运行结果不对,再修改

直到运行成功
我和小明最大的区别是, 小明不停的修改,实践.
1.前期小明修改10次(获取了10次经验), 我修改5次(参考示例,缺少思考过程,实际只获得2次经验)
2.后期小明对API很熟悉,会主动思考,使用过大,过小,异常参数,调用API,查看结果. 而我还是上网找示例,没有找到真正的道(学习方法)
后面我使用他的这种方法, 有了很多收获, 进步也很快.

各位有对提升编程的理解,想法,也可以分享一下.


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值