lidar-slam-detection icon indicating copy to clipboard operation
lidar-slam-detection copied to clipboard

How can I convert the code in the project(instead of visualization and web modules) into C++?

Open scottymax opened this issue 1 year ago • 8 comments

Thanks to your great job! I want to combine this project with autoware planning core, and i found every main nodes was written by python. Do you have some ideas to convert them to C++? Thank you!

scottymax avatar Feb 23 '24 08:02 scottymax

Thank you for your attention to this project.

The python code here is responsible only for data transmission and some basic logic. CPU-intensive core algorithms are implemented in C++. We have tested it on Orin NX/AGX and it can process 1 128-line lidar and 4 or more 1080P cameras at 10Hz.

You can send the processing output of LSD via UDP, and create a receiving and transforming node in Autoware to meet your need.

w111liang222 avatar Feb 23 '24 12:02 w111liang222

Thank you for your attention to this project.

The python code here is responsible only for data transmission and some basic logic. CPU-intensive core algorithms are implemented in C++. We have tested it on Orin NX/AGX and it can process 1 128-line lidar and 4 or more 1080P cameras at 10Hz.

You can send the processing output of LSD via UDP, and create a receiving and transforming node in Autoware to meet your need.

谢谢,我现在成功部署了CPU版本,但是部署gpu版本出现config进不去的问题,机器配置是3080,cuda11.4,docker运行也正常,请问哪里可以排查问题?另外我在测试demo的时候循环播放demo数据,之前的地图会保留在TVIZ上并和当前帧数据不对齐。。看着也有点奇怪。

scottymax avatar Feb 28 '24 09:02 scottymax

  1. GPU版本的应该是程序启动时阻塞在import slam语句上了,之前的issue里有提到过,但是我在我这边的机器上一直没有复现这个问题,所以具体原因还不清楚
  2. 循环播放bag会存在放完一轮后,从头回放的问题,在lsd里会检查时间戳是否是连续的,所以出现了你说的现象,不影响实际建图效果,你可以不循环放就可以了

w111liang222 avatar Feb 29 '24 12:02 w111liang222

  1. GPU版本的应该是程序启动时阻塞在import slam语句上了,之前的issue里有提到过,但是我在我这边的机器上一直没有复现这个问题,所以具体原因还不清楚

    1. 循环播放bag会存在放完一轮后,从头回放的问题,在lsd里会检查时间戳是否是连续的,所以出现了你说的现象,不影响实际建图效果,你可以不循环放就可以了

非常感谢解答,目前我正在学习您的代码,python部分我还比较弱,有一些问题想要请教。module_manager默认的config是slam、sink在order_dict前面,最后放source,那传输数据到peer的过程是怎么由source传输到slam的?另外如果要同时开启slam的定位功能和detection功能,source里的数据只保存在一个队列,怎么传递给多个消费者?您在硬件需求中说显卡要SM80+,我看了一下只有3090和4090的流处理器单元满足需求,那是不是90系列以下的卡跑带GPU的版本都会出现config加载不出来的情况。。

scottymax avatar Mar 27 '24 11:03 scottymax

  1. GPU版本的应该是程序启动时阻塞在import slam语句上了,之前的issue里有提到过,但是我在我这边的机器上一直没有复现这个问题,所以具体原因还不清楚

    1. 循环播放bag会存在放完一轮后,从头回放的问题,在lsd里会检查时间戳是否是连续的,所以出现了你说的现象,不影响实际建图效果,你可以不循环放就可以了

非常感谢解答,目前我正在学习您的代码,python部分我还比较弱,有一些问题想要请教。module_manager默认的config是slam、sink在order_dict前面,最后放source,那传输数据到peer的过程是怎么由source传输到slam的?另外如果要同时开启slam的定位功能和detection功能,source里的数据只保存在一个队列,怎么传递给多个消费者?您在硬件需求中说显卡要SM80+,我看了一下只有3090和4090的流处理器单元满足需求,那是不是90系列以下的卡跑带GPU的版本都会出现config加载不出来的情况。。

你好,

  1. order_dict的存储顺序不是实际数据流的顺序,会有一个setup_pipeline的调用,根据配置文件中写的顺序,默认是Source -> SLAM -> Sink,如果是同时开启目标检测和建图定位,会使用两个额外的模块是Splitter和Merger(在module/common目录下),负责把数据分开和合并
  2. SM80+是目标检测模块的要求(因为用到了nvidia开源的libspconv.so),SLAM模块没有这个要求,如果只使用SLAM功能,运行在其他的GPU上时,需要在几个CMakeLists.txt里的编译参数加上对应GPU的arch code

w111liang222 avatar Mar 27 '24 12:03 w111liang222

  1. GPU版本的应该是程序启动时阻塞在import slam语句上了,之前的issue里有提到过,但是我在我这边的机器上一直没有复现这个问题,所以具体原因还不清楚

    1. 循环播放bag会存在放完一轮后,从头回放的问题,在lsd里会检查时间戳是否是连续的,所以出现了你说的现象,不影响实际建图效果,你可以不循环放就可以了

非常感谢解答,目前我正在学习您的代码,python部分我还比较弱,有一些问题想要请教。module_manager默认的config是slam、sink在order_dict前面,最后放source,那传输数据到peer的过程是怎么由source传输到slam的?另外如果要同时开启slam的定位功能和detection功能,source里的数据只保存在一个队列,怎么传递给多个消费者?您在硬件需求中说显卡要SM80+,我看了一下只有3090和4090的流处理器单元满足需求,那是不是90系列以下的卡跑带GPU的版本都会出现config加载不出来的情况。。

你好,

1. order_dict的存储顺序不是实际数据流的顺序,会有一个setup_pipeline的调用,根据配置文件中写的顺序,默认是Source -> SLAM -> Sink,如果是同时开启目标检测和建图定位,会使用两个额外的模块是Splitter和Merger(在module/common目录下),负责把数据分开和合并

2. SM80+是目标检测模块的要求(因为用到了nvidia开源的libspconv.so),SLAM模块没有这个要求,如果只使用SLAM功能,运行在其他的GPU上时,需要在几个CMakeLists.txt里的编译参数加上对应GPU的arch code

也就是说如果要同时开启定位和感知,我需要在cfg的Pipeline里加上Splitter和Merger是吗?请问这个顺序有没有要求?

scottymax avatar Mar 28 '24 02:03 scottymax

  1. GPU版本的应该是程序启动时阻塞在import slam语句上了,之前的issue里有提到过,但是我在我这边的机器上一直没有复现这个问题,所以具体原因还不清楚

    1. 循环播放bag会存在放完一轮后,从头回放的问题,在lsd里会检查时间戳是否是连续的,所以出现了你说的现象,不影响实际建图效果,你可以不循环放就可以了

非常感谢解答,目前我正在学习您的代码,python部分我还比较弱,有一些问题想要请教。module_manager默认的config是slam、sink在order_dict前面,最后放source,那传输数据到peer的过程是怎么由source传输到slam的?另外如果要同时开启slam的定位功能和detection功能,source里的数据只保存在一个队列,怎么传递给多个消费者?您在硬件需求中说显卡要SM80+,我看了一下只有3090和4090的流处理器单元满足需求,那是不是90系列以下的卡跑带GPU的版本都会出现config加载不出来的情况。。

你好,

1. order_dict的存储顺序不是实际数据流的顺序,会有一个setup_pipeline的调用,根据配置文件中写的顺序,默认是Source -> SLAM -> Sink,如果是同时开启目标检测和建图定位,会使用两个额外的模块是Splitter和Merger(在module/common目录下),负责把数据分开和合并

2. SM80+是目标检测模块的要求(因为用到了nvidia开源的libspconv.so),SLAM模块没有这个要求,如果只使用SLAM功能,运行在其他的GPU上时,需要在几个CMakeLists.txt里的编译参数加上对应GPU的arch code

图片 图片 目前我这么配置cfg,出来的pipeline是source-slam-detect-sink。。

scottymax avatar Mar 28 '24 02:03 scottymax

  1. GPU版本的应该是程序启动时阻塞在import slam语句上了,之前的issue里有提到过,但是我在我这边的机器上一直没有复现这个问题,所以具体原因还不清楚

    1. 循环播放bag会存在放完一轮后,从头回放的问题,在lsd里会检查时间戳是否是连续的,所以出现了你说的现象,不影响实际建图效果,你可以不循环放就可以了

非常感谢解答,目前我正在学习您的代码,python部分我还比较弱,有一些问题想要请教。module_manager默认的config是slam、sink在order_dict前面,最后放source,那传输数据到peer的过程是怎么由source传输到slam的?另外如果要同时开启slam的定位功能和detection功能,source里的数据只保存在一个队列,怎么传递给多个消费者?您在硬件需求中说显卡要SM80+,我看了一下只有3090和4090的流处理器单元满足需求,那是不是90系列以下的卡跑带GPU的版本都会出现config加载不出来的情况。。

你好,

1. order_dict的存储顺序不是实际数据流的顺序,会有一个setup_pipeline的调用,根据配置文件中写的顺序,默认是Source -> SLAM -> Sink,如果是同时开启目标检测和建图定位,会使用两个额外的模块是Splitter和Merger(在module/common目录下),负责把数据分开和合并

2. SM80+是目标检测模块的要求(因为用到了nvidia开源的libspconv.so),SLAM模块没有这个要求,如果只使用SLAM功能,运行在其他的GPU上时,需要在几个CMakeLists.txt里的编译参数加上对应GPU的arch code

图片 图片 目前我这么配置cfg,出来的pipeline是source-slam-detect-sink。。

你好:

检测+建图模式的pipeline设置是下图这样的: image

配置该模式时,可以通过Web页面来配置,参考https://github.com/w111liang222/lidar-slam-detection/blob/main/docs/guide.md,确认后需要重新运行下LSD

w111liang222 avatar Mar 28 '24 05:03 w111liang222