7分精力浪费在工具、环境、内容整理、倒腾数据,3分精力真正创造价值。

目标是要造飞机,结果造了一堆轮子,或者学了一堆别人的轮子,每天的工作就是面向Google的编程

不知道别人工作时是怎样的状态,但这确实是我这段时间的状态,充满了对未知的恐惧。

先总结一下遇到的问题

  1. docker 使用不熟悉,没有理解明林,IDE远程环境没配好。
  2. 旋转矩阵公式忘完了
  3. Numpy不熟悉,矩阵乘法写成了点乘
  4. 提取点云和图片,Python2 Python3环境不一致。
  5. 一次性读bag,多Topic时间戳同步,不知如何解决。采用最笨的方法,提取所有的图片存储下来,以后读取点云时同时读取图片。

事情是这样的,最近两周开始抽时间准备前融合的事情。

第一步是看看已经标注的Lidar数据和Camera数据对齐情况,评估一下现在的数据是否能用。

上周末两天,想在家把这件事搞定,给出个能不能用的结论。

先是配环境,数据在服务器上。

整体流程如下:

  1. 根据标注的label从bag里面解析Lidar点云,并在BEV下可视化看标注情况;

    想到了不能从头造轮子,于是看了一个新来做激光同事的branch,找到了他的提取脚本。

    在服务器上Conda克隆了他的环境,然后Pycharm远程调试,看他的脚本看懂了,通过他的整理也了解了了目前的本地数据集情况。

    这一步挺顺利,还为自己没有重复造轮子的机智沾沾自喜。

  2. 找出lidar对应的Camera,看时间戳差多少,投影关系是否正常。

    1. 解压图片

      bag里图片是经过压缩的,需要使用cv_bridge解析Camera,而cv_bridge只能使用python2.7,而提取ldiar点云的脚本是py3.6的,不能同时跑。

      我一开始查了一下python3使用cv_bridge的使用方法,需要本地编译,简单尝试了下放弃了。

      我选择在我们的docker里运行,因为数据在服务器上,需要在服务器上启动docker。

      接下来主要问题变成了在服务器上启动docker和远程调试环境配置。

      我们的一键式docker启动命令不能用,因为需要它sudo权限,而服务器上的我不是sudo用户。但是我又能看到别人的docker在服务器上运行,不知道他们是开了sudo权限还是自己运行docker的。

      于是我尝试自己起docker。可我对于docker实在是太不熟悉了,虽然会用,但是没有理解每条命令的原理,被坑惨了。搞了一晚上,又把docker指令重新学习了一下,docker环境最终才配好。

      docker环境配好了,但是不能用IDE调试,且要在各个目录cd过来cd过去,特别心烦,编辑代码只能用vim,用的又不熟练;看图片只能本地挂载看,本地挂载速度又很慢。

      晚上睡不着,又在网上看Pycham远程调试和VSCode远程调试,半夜起来跟着配置到凌晨3点半,还没有配成功。

      第二天睡醒已经11点了。吃完午饭接着配环境,到最后终于配好了。

      最终的远程操作方案是,Pycharm在线打断点调试代码,VScode远程docke作为编辑器和文件浏览器。

    2. 将Lidar点云投影到Camera上,看看是否能够对齐

      手动找了一组最近时间戳的PointCloud和Image。

      加载Camera标定矩阵。找了一下别人对Camera标定文件的使用方法,照猫画虎写了一下。

      计算从世界坐标系到像素坐标系的变换矩阵。

      我一直对坐标变换投有深深的恐惧,围绕哪个轴旋转,roll pitch yaw顺序,左乘还是右乘,齐次还是非齐次,往图像上画点的时候u是x还是v是x。。。

      这些以前都手动推过好几次,但每次都是搞懂了理解了当时用用,过一段时间就忘了。

      所以我没有自己推公式,而是在已有代码里找对应矩阵的计算方法,找了半天才找到,就是相机的内参K * world2cam。。。

      但画出来的投影结果不对,此时开始怀疑,是标定文件有问题,还是读标定文件时旋转矩阵读错了,还是投影代码有bug?

      这时的我慌得一笔,因为这里哪个过程我都不确定出错了没。

      想用我们的可视化调试工具看一下这个bag,结果一播包就挂…

      然后又开始拿出《SLAM十四讲》开始看投影关系,看了看感觉也是对的。

      带着失望睡觉。

      周一早上早早起来,看看了Python书里讲Numpy的那一章。因为昨天在写投影的过程中发现自己对Numpy也一点都不熟悉。

      只看了几分钟,忽然就知道了自己投影程序的bug。

      numpy的矩阵乘是np.dot,而我用的是!!!改了一下,果然就对了。*

  3. 自动对齐Lidar Image时间戳

​ 两种方案,最终选择方案一。

  1. 把图片全都存下来,存到一个地方,一次性读入内存。每解析一个Lidar,就去找最近的时间戳。过程复杂点,但是实现很简单。

  2. 最好是在读bag提取lidar的时候,能有一组group的概念,把image也解码出来,这是最优雅的。可是怎么确定一组message呢,时间同步怎么做呢?这都是问题。

就点云投影图片这一件小事,整整搞了两天才搞定。我原本以为两天的时间,我能够把数据集给生成好。

Docker run命令理解

docker run -it --name container_name ubuntu:18.04 /bin/bash (ubuntu:18.04也可以为Image ID)

  1. 后面一定要加/bin/bash,不然这个容器会直接退出。原因

    Docker容器后台运行,必须有一个前台进程。容器运行的命令如果不是那些一直挂起的命令(比如运行ping,sleep),就是会自动退出的。
    而上面的代码中bash就是需要执行的指定的命令。

    命令如果执行完毕了,或者叫指定的应用终结时,容器会自动停止。

  2. **image ID要在-it --name之前,不然会报错 ** “”/opt/plusai/drive_entrypoint.sh: line 10: exec: --: invalid option"

    help对指令格式说的太明显了

    $ docker run --help
    Usage:  **docker run [OPTIONS] IMAGE [COMMAND] [ARG...]**
    Run a command in a new container
    
  3. docker 容器启动后后台运行

    为什么加了-d参数后容器启动后会直接退出?

    docker run -d --name my-redis redis bash
    指定命令是bash,但显然bash在容器起来后,很快就会结束,导致没有前台进程,故容器处于退出状态
    
  4. docker 容器启动后后台运行

    docker run -itd --name container_name Image_ID /bin/bash  i不是必需,加了容器起来后终端返回容器ID-d运行容器时,需要有前台进程,-t提供一个伪终端,类似前台进程,查看容器运行状态,也可以看到,容器处于up状态

远程环境配置

最终的远程操作方案是,Pycharm在线打断点调试代码,VScode远程docke作为编辑器和文件浏览器。

PyCharm断点调试比较方便,但它是把本地代码拷贝到远程,同步比较麻烦。

vscode远程服务器,可以查看图片、文件和代码,避免cd过来cd过去,且不必查看/编辑文件都用vim。

用了这两个方法:

https://zhuanlan.zhihu.com/p/80099904

https://zhuanlan.zhihu.com/p/52827335

docker ssh连接不上的问题:

vim /etc/ssh/sshd_config
PermitRootLogin yes # 这句话默认被注释掉了,取消注释
service ssh restart

Numpy书籍:《利用Python进行数据分析》

是什么在影响我的工作效率相关推荐

  1. 前额皮质如何影响我们的工作效率?

    写在前面: 工作效率=工作量/时间,这其实只是个定义式,并不决定我们的工作效率.在实际工作场景中,影响我们工作效率有很多方面:工作的环境.工作的难度和复杂度.自己对工作的熟悉程度,心智模型-这些其实都 ...

  2. 谷歌称居家办公影响工作效率!2021 年将回归线下办公

    整理 | 王晓曼 出品 | 程序人生 (ID:coder _life) 最近,谷歌公司在提交给监管机构的年度 10-K 报告中警告称,员工居家办公会影响公司的工作效率.竞争力和企业文化.谷歌公司表示, ...

  3. 谷歌称远程办公影响工作效率,2021年回归线下办公

    整理 | 王晓曼 出品 | 程序人生 (ID:coder _life) 最近,谷歌公司在提交给监管机构的年度 10-K 报告中警告称,员工居家办公会影响公司的工作效率.竞争力和企业文化.谷歌公司表示, ...

  4. python批量添加水印_用Python批量添加水印,提高工作效率!

    平常工作中,为保护原创,我们常常会给图片打水印,但是一般的工具存在水印只能添加在固定位置(比如左上.左下等),或者无法批量添加水印的问题.这些不灵活的应用会影响我们的工作效率. 今天,未明学院的老师就 ...

  5. qaxobject控制word到某一行_Word操作技巧:快速选择文本的4种技能,提高你的工作效率...

    在Word文档的操作中,我们最常使用的功能应该就是选择文本,它也是最简单的操作,只需要拖动鼠标,就可以选中我们想要编辑的文本,可以说毫无难度. 我们在进行Word文档编辑时,经常需要选择某一个单词,某 ...

  6. 一个优秀的程序员应该如何提高工作效率?

    当我们评价一个程序员是否优秀时,要从多个方面进行评估. 专业技能.专业知识.创造力.经验,这些都是重要的因素.当然,还有他们的工作态度.工作效率和工作质量.如果程序员的工作是没有效率的,那就意味着他们 ...

  7. python 提升工作效率_Python那些事——5个提升生产效率的Python开发和配置的小技巧...

    在以前,作为一个刚开始使用Python的开发者,我时常为布设一个有效的开发环境感到困扰.找到一套自己能顺畅使用的环境且为此培养一个正确的习惯是很困难的. 之前我一直没有意识到这些事情对我的工作效率影响 ...

  8. Python快速去水印,提高工作效率,一步到位(附代码)

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:编程乐趣 平常工作中,有时为了采用网络的一些素材,但这些素材往往被打 ...

  9. 如何使用Git提高研发团队工作效率?

    为什么使用Git 随着互联网时代的来临与发展,尤其分布式开发的大力引入,对于开发工程师来说,代码管理变成了头等难题.10多个人或者更多的成员的研发团队如何管理同一份代码,异地办公如何跟同事有效的维护同 ...

最新文章

  1. 使用Lucene开发自己的搜索引擎
  2. scala中的算术符重载代码详细解释
  3. 专家称 AI 可以在 120 年内接管人类的所有工作
  4. python变量定义问题_python 定义n个变量方法 (变量声明自动化)
  5. linux 修改文件夹权限_Linux文件权限 - Understanding Linux File Permissions
  6. 使用GDB进行嵌入式远程调试
  7. Boyer-Moore算法
  8. oracle 创建表格乱码,数据库导出excel表格是乱码怎么办-oracle 导出excel 乱码怎么办...
  9. 摸爬滚打半年,我是如何从小白进阶到渗透测试工程师
  10. html+antd 本地化
  11. 【AE教程】AI文件导入AE方法
  12. Dynamic CRM 2016 IFD配置(6)Claims-based认证-外部访问配置
  13. 大一期末项目:学生管理系统
  14. 根椐图片,请猜一四字成语!有一点难度喔:)
  15. GUI窗口不显示图片背景图片,和布局后不显示组件,的根本原因和解决办法
  16. 【STDC】《Rethinking BiSeNet For Real-time Semantic Segmentation》
  17. 轻量化固态激光雷达的三维定位与建图
  18. 网络舆情分析工作怎么做的平台解决办法
  19. 虚拟机怎么将屏幕放大?
  20. EasyNLP带你实现中英文机器阅读理解

热门文章

  1. 教你两分钟做出一个精美好用的404页面
  2. 在字节干了两年离职后,一口气拿到15家Offer
  3. 入职字节测试岗外包一个月,我离职了...
  4. java用list集合实现对数据的增加,删除,插入操作
  5. Python培训班学哪些课程
  6. vue双向绑定的原理
  7. ERROR: pyHook-1.5.1-cp37-cp37m-win_amd64.whl is not a supported wheel on this platform.安装pyhook报错
  8. matlab右上角星号怎么打出来,汉字右上角星号怎么?
  9. IMT-2020(5G)推进组发布5G技术研发试验第二阶段技术规范
  10. 如何用python生成随机密码?(简单易上手版)