码迷,mamicode.com
首页 > Windows程序 > 详细

内存泄露问题+CANAPI+车道线宽+图像外参标定

时间:2015-12-31 19:01:41      阅读:421      评论:0      收藏:0      [点我收藏+]

标签:

?

  1. 在测试决策程序过程中,我们发现一个奇怪的问题,每次开启程序,连接网线向dsbase发送数据的过程中,竟然会有每次4k的内存泄露,1s 增加一次。不知道是什么鬼。

    找了很多资料,依然没有解决问题。但是,奇怪的是,用win7 64位机子以及公司电脑做测试,竟然没有内存泄露,没有出现类似的错误。奇怪。

后来,陆续做实验测试,终于发现问题所在。原来是前方DENSO雷达在往CAN卡上发送数据,而我程序当中并没有对此数据进行接收,导致内存泄露。即使是同一个CAN卡,

假如在程序当中不进行处理的话,也不行。之前一直认为,CAN API只会对一个CAN端口有效,现在看来不是,所以,对于同一个CAN设备,最好是在一个进程里面进行管理所有的端口,

有数据收发就接收和发送就行啦。不然会造成内存泄露。切记。切记。

参考资料:

http://bbs.csdn.net/topics/390292180 发送数据内存泄露,每次循环4k增加

http://bbs.csdn.net/topics/360163468 多线程运行时内存泄露

?

http://www.cnblogs.com/yixiaoyang/archive/2010/12/10/1902255.html vs环境下的内存泄露检测工具

?

?

?

http://blog.csdn.net/wxqian25/article/details/17258407 BoundsChecker 使用

?

?

http://download.csdn.net/user/yth796/uploads/2 BoundsChecker 下载

?

官网: http://supportline.microfocus.com/

?

可能原因: 同步那一块的问题, createThread的问题。试过,问题不在这。

用此函数试试,调用线程

技术分享

?

2、关于CANET API的使用

为了使程序尽可能的稳定运行,使用的库最少化,改用周立功提供的CAN库进行编程。

在用下面的程序过程中,一开始死活配置不成功,总是在VCI_OpenDevice(); 后来,改配置通通都试了一遍还是不成功。

最后,自己写了一个测试程序,居然跑通了。最后的原因,应该还是项目的配置有问题。后来,该用新建的项目配置工程,完美解决。

也就是说,下次排查问题的时候,我们需要一项项进行测试,而不是整体测试。

  1. #ifndef WIN_CAN_H
  2. #define WIN_CAN_H
  3. ?
  4. #include <iostream>
  5. #include "ControlCAN.h"
  6. ?
  7. using namespace std;
  8. ?
  9. ?
  10. //CAN 相关
  11. ?
  12. const static DWORD nDeviceType = VCI_CANETE; //设备类型
  13. const static DWORD nDeviceInd = 0; //设备索引号
  14. const static DWORD nCANInd = 0; //设备端口号
  15. ?
  16. class Win_Can
  17. {
  18. public:
  19. ???Win_Can(){}
  20. ???~Win_Can()
  21. ???{
  22. ??????VCI_CloseDevice(nDeviceType,nDeviceInd);
  23. ???}
  24. ?
  25. ????int write_to_can(VCI_CAN_OBJ frames[], int len) //支持发送多帧
  26. ???{
  27. ??????int ret = VCI_Transmit(nDeviceType,nDeviceInd,nCANInd,frames,len);
  28. ??????if (ret < 1)
  29. ??????{
  30. ?????????std::cout << "发送失败" << std::endl;
  31. ??????}
  32. ??????return ret;
  33. ???}
  34. ?
  35. ???int read_from_can(VCI_CAN_OBJ &frame) //一帧帧的读取
  36. ???{
  37. ??????int receiver = VCI_Receive(nDeviceType,nDeviceInd,nCANInd,&frame,1);//如果每次只接收一帧,是不是更好处理?
  38. ??????if (receiver <= 0)
  39. ??????{
  40. ?????????VCI_ReadErrInfo(nDeviceType,nDeviceInd,nCANInd,&errinfo);
  41. ??????}
  42. ??????return true;
  43. ???}
  44. ?
  45. ???bool init_can(string DesIP, int DesPort)
  46. ???{
  47. ??????/************************************************************************/
  48. ??????/* CAN卡初始化 */
  49. ??????/************************************************************************/
  50. ??????int nReserved = DesPort;
  51. ??????if (VCI_OpenDevice(nDeviceType,nDeviceInd,nReserved) != 1)
  52. ??????{
  53. ?????????std::cout << "打开设备失败,请检查设备类型和设备索引号是否正确" << std::endl;
  54. ?????????VCI_CloseDevice(nDeviceType,nDeviceInd);
  55. ?????????return false;
  56. ??????}
  57. ?
  58. ??????VCI_SetReference(nDeviceType,nDeviceInd,nCANInd,CMD_DESIP,(PVOID)DesIP.c_str());
  59. ??????VCI_SetReference(nDeviceType,nDeviceInd,nCANInd,CMD_DESPORT,(PVOID)&nReserved);
  60. ?
  61. ???VCI_ClearBuffer(nDeviceType,nDeviceInd,nCANInd);//清空缓冲区
  62. ????????return true;
  63. ???}
  64. ?
  65. public:
  66. ???VCI_ERR_INFO errinfo;
  67. ?
  68. };
  69. ?
  70. ?
  71. ?
  72. ?
  73. #endif

?

3、标定图像外参

图像外参主要有以下参数:

Wheel_Offset 85???? 相机到前轮中轴线的纵向距离

Head_Offset 168???? 相机到车前保险杠的纵向距离

Width_Offset_L 115???? 相机离左轮的横向距离

Width_Offset_R 63???? 相机离右轮的横向距离

Camera_tanr0 20.00 相机的pitch 角度

Camera_Height 138 相机离地面的高度

?

?

在调节pitch 角度的时候,我们有几种方式:

  1. 当两条直线的交点无法得到的时候,我们可以通过人为调节Camera_tanr0,然后查看逆透视的效果来标定,原则上,逆透视之后的车道线应该是平行的,当车道线不平行,说明标定有问题,我们需要调节角度。
  2. 还有一种方式,Camera_tanr0 不变,调节相机,我们可以看到识别到的车道线在变化。

下面是已经标定好的车道线示意图:

技术分享

?

?

4、修改车道宽

之前图像程序中有一个bug,当没找到两条车道线的时候,人为的补上半个车道宽1.8m,当我们在检测到一条车道的时候,由于我们铺设的车道线不标准,导致卡丁车,路线来回抖动。

后来,加上一个获取前一次的车宽解决问题。

增加的代码如下:lane_width变成变量。

技术分享

下图是检测到一条边和两条边的情况。图1是检测到一条边的情况,右侧车道线是虚拟中心线,自己补出来的。

2 是检测到2条边的情况,中间的一条是虚拟中心线,通过左右车道线计算得到。

技术分享技术分享

内存泄露问题+CANAPI+车道线宽+图像外参标定

标签:

原文地址:http://www.cnblogs.com/zhuxuekui/p/5092410.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!