安装ESIM事件相机模拟器遇到的一些问题及解决方法

安装部分:

如果您的系统上尚未安装,请安装ROS。
一行代码安装ROS的方法另一篇博文已经写过了点击此处

我装的版本是ros的noetic,对应ubuntu20.04

我们建议专门为模拟器创建一个新的 catkin 工作空间,如下所示:

mkdir -p ~/sim_ws/src && cd ~/sim_ws
catkin init
catkin config --extend /opt/ros/noetic --cmake-args -DCMAKE_BUILD_TYPE=Release

vcstools如果您还没有安装它:

sudo apt-get install python-vcstool

安装报错,参考此处解决

克隆此存储库并运行vcstools:

cd src/
git clone git@github.com:uzh-rpg/rpg_esim.git
vcs-import < rpg_esim/dependencies.yaml

报错提示不能连接到github.com,参考此处解决

安装pcl_ros(注意第一行noetic处为对应版本):

sudo apt-get install ros-noetic-pcl-ros
sudo apt-get install libproj-dev

安装glfw:

sudo apt-get install libglfw3 libglfw3-dev

安装glm:

sudo apt-get install libglm-dev

可选安装轨迹服务器:

sudo apt-get install ros-noetic-hector-trajectory-server

禁用不需要的包:

cd ze_oss
touch imp_3rdparty_cuda_toolkit/CATKIN_IGNORE \
      imp_app_pangolin_example/CATKIN_IGNORE \
      imp_benchmark_aligned_allocator/CATKIN_IGNORE \
      imp_bridge_pangolin/CATKIN_IGNORE \
      imp_cu_core/CATKIN_IGNORE \
      imp_cu_correspondence/CATKIN_IGNORE \
      imp_cu_imgproc/CATKIN_IGNORE \
      imp_ros_rof_denoising/CATKIN_IGNORE \
      imp_tools_cmd/CATKIN_IGNORE \
      ze_data_provider/CATKIN_IGNORE \
      ze_geometry/CATKIN_IGNORE \
      ze_imu/CATKIN_IGNORE \
      ze_trajectory_analysis/CATKIN_IGNORE

构建event_camera_simulator节点:(注意退出到该系列文件的根目录)

catkin build esim_ros

提示:Errors << catkin_tools_prebuild:cmake /root/sim_ws/logs/catkin_tools_prebuild/build.cmake.014.log
CMake Error at /opt/ros/noetic/share/catkin/cmake/empy.cmake:30 (message):
Unable to find either executable ‘empy’ or Python module ‘em’… try
installing the package ‘python3-empy’
Call Stack (most recent call first):
/opt/ros/noetic/share/catkin/cmake/all.cmake:164 (include)
/opt/ros/noetic/share/catkin/cmake/catkinConfig.cmake:20 (include)
CMakeLists.txt:4 (find_package)

解决方法,参考此处
加了那行链接后,一顿操作,删了build、devel、logs文件夹,然后又执行,巴拉巴拉,最后又删了,但是上面的语句突然就可以执行了,不过我把conda环境换成了2.7

为您的工作区创建一个别名,以便下次轻松获取它。

echo "source ~/sim_ws/devel/setup.bash" >> ~/setupeventsim.sh
chmod +x ~/setupeventsim.sh

在您的.bashrc文件中,添加以下行:

alias ssim='source ~/setupeventsim.sh'

从现在开始,ssim在终端中输入将初始化模拟器工作区(bash如果您想在编辑.bashrc文件后立即尝试此操作,则需要先运行。

测试部分:

按照wiki,选择Planar Renderer来测试模拟器是否已经配置妥当,Planar Renderer可在一个平面场景(一个贴有纹理的平面)上模拟3D摄像机的运动。

设置绝对路径example.conf:

roscd esim_ros gedit cfg/example.conf

务必仔细检查修改路径(路径的第二小节),不然无法继续执行。

运行模拟器,如下所示:

roslaunch esim_ros esim.launch config:=cfg/example.conf

如果此处有如下提醒:
在这里插入图片描述
网上有好几种相关的方法,但是对我适用的就是vim ~/.bashrc,insert编辑,删除source /opt/ros/noetic/setup.bash这一行,esc键,输入:wq,最后source~/.bashrc

修改后,提示:
在这里插入图片描述
解决方法:安装cv2
————提示pip命令不可用,于是sudo easy_install pip

pip install opencv-python   (如果只用主模块,使用这个命令安装)
#pip install opencv-contrib-python (如果需要用主模块和contrib模块,使用这个命令安装)
#如果执行还是有问题,用sudo install opencv-python

在这里插入图片描述
安装成功,参考此处

重新运行测试部分,报错bash: roscd: command not found
需要在工作文件夹的根目录,即devel为子目录时,source devel/setup.bash(cd /root/sim_ws)

提示:ModuleNotFoundError: No module named ‘cv_bridge’
解决方法:sudo apt-get install ros-noetic-cv-bridge(注意noetic部分为ros对应版本)

安装完成后,输出:
在这里插入图片描述
打开一个新终端,可视化模拟器的输出:

roscd esim_visualization rviz -d cfg/esim.rviz

也打开rqt以查看更多可视化内容:

roscd esim_visualization rqt --perspective-file cfg/esim.perspective

功能部分:

可选)下载示例视频
作为示例输入视频,我们将使用来自国家地理的这段精彩视频,该视频显示了使用 Phantom 相机以每秒 1200 帧的速度记录的奔跑的猎豹。

创建一个工作文件夹:

mkdir -p /tmp/cheetah_example
cd /tmp/cheetah_example
#我创在之前的工作目录里的,所以删除掉了tmp前面的/

youtube-dl使用( )从 YouTube 下载视频pip install youtube-dl

youtube-dl https://youtu.be/THA_5cqAfCQ -o cheetah

我这里因为服务器进不去外网,所以是直接在youtube里面下载的

剪切相关的视频部分。在我们的例子中,我们将把慢动作部分从2’07切割成2’47’':

ffmpeg -i cheetah.mkv -ss 00:02:07 -t 00:00:40 -async 1 -strict -2 cheetah_cut.mkv

ffmpeg安装,参考此处

conda config --add channels conda-forge
conda install ffmpeg
pip install ffmpy

或者,将视频调整为更小的尺寸以加快处理速度。在这里,我们将视频调整为宽度640:

ffmpeg -i cheetah_cut.mkv -vf scale=640:-1 -crf 0 cheetah_sd.mkv

为 ESIM 预处理视频
frames将视频导出到文件夹中的单个帧序列:

mkdir frames
ffmpeg -i cheetah_sd.mkv frames/frames_%010d.png

最后,在文件夹中创建一个images.csv文件frames,这是 ESIM 所必需的。该文件的每一行都包含图像时间戳和路径,格式为timestamp_in_nanoseconds,frames_xxxxx.png::

roscd esim_ros
python scripts/generate_stamps_file.py -i /workspace/e2sri-master/tmp/cheetah_example/frames -r 1200.0

此处路径更换为自己的,提示
在这里插入图片描述
使用 ESIM 模拟事件

rosrun esim_ros esim_node \
 --data_source=2 \
 --path_to_output_bag=/workspace/e2sri-master/tmp/out.bag \
 --path_to_data_folder=/workspace/e2sri-master/tmp/cheetah_example/frames \
 --ros_publisher_frame_rate=60 \
 --exposure_time_ms=10.0 \
 --use_log_image=1 \
 --log_eps=0.1 \
 --contrast_threshold_pos=0.15 \
 --contrast_threshold_neg=0.15

如果您收到错误消息:Could not find ROS master,请打开一个新终端,进入工作文件夹,source devel/setup.bash然后roscore按如下方式启动:roscore

哦,我检查了一下,[rosrun] Couldn’t find executable named esim_node below /workspace/e2sri-master/src/rpg_esim/event_camera_simulator/esim_ros报错是因为路径问题,然而一般的该问题的方法并不能解决我的问题,经过很多资料查阅,是catkin build esim_ros这一步有问题,而重新执行时有error,所以参考此处,安装cmake
执行sudo apt-get install ros-noetic-navigation,然后重新build,成功了多几个,但是还是有19个packages abandoned

参考此处,缺少什么包就安装什么包
在这里插入图片描述

sudo apt-get install ros-noetic-moveit-ros-planning-interface

注意ros版本和包名字中_换成-

还是有很多failed和abandoned,用了下catkin clean
然后重新catkin build esim_ros,还有五个包有问题……
提示cannot find -lassimp,apt-get install libassimp-dev解决,通用为cannot find -lxxx,那么apt-get install libxxx-dev
在这里插入图片描述
要哭出来了,终于!!!
再把后面的步骤都执行一下,终于跑起来了!!!!
在这里插入图片描述

重新开启终端:

rosrun dvs_renderer dvs_renderer events:=/cam0/events

提示:[ERROR] [1650011355.623822086]: [registerPublisher] Failed to contact master at [localhost:11311]. Retrying…
原因是没有打开roscore,运行一下就好了

重新开启终端:

rosbag play /workspace/e2sri-master/tmp/out.bag -l -r 0.1

重新开启终端:

rqt_image_view /dvs_rendering

报错could not find or load the Qt platform plugin windows
参考此处,添加常用QT5环境变量

#export QT_QPA_PLATFORM=eglfs:size=800x480
#export FRAMEBUFFER=/dev/fb1
export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/qt5/plugins
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0:size=800x480:mmSize=800x480:offset=0x0:tty=/dev/tty1
export QT_QPA_PLATFORM='offscreen'
export QT_QPA_FONTDIR=/usr/lib/fonts
export QT_QPA_GENERIC_PLUGINS=tslib
export QT_QPA_GENERIC_PLUGINS=evdevmouse:/dev/input/mouse0
export QT_QPA_GENERIC_PLUGINS=evdevkeyboard:/dev/input/event2
export QT_DEBUG_PLUGINS=1
export QT_LOGGING_RULES=qt.qpa.input=true

此处报错了……还没有解决

用自己的视频模拟事件流

因为我使用的是图片,反正也要把视频拆成一帧一帧的,所以我就直接用的图片,放到了/workspace/e2sri-master/my_video/frames目录下

ssim
roscd esim_ros
python scripts/generate_stamps_file.py -i /workspace/e2sri-master/my_video/frames -r 1200.0

ssim报错bash: ssim: command not found,source ~/.bashrc一下就好了
在这里插入图片描述
文件夹中有images.csv,内容如图:
在这里插入图片描述
(1200表示的是输入视频的帧率。如果你不知道输入视频的帧率,那就可以打开那个视频,看看时长。然后看看frames文件夹下拆成了多少帧,二者一除就知道了。)

之后,执行模拟器指令(要确保另一个终端里开着roscore)

rosrun esim_ros esim_node \
 --data_source=2 \
 --path_to_output_bag=/workspace/e2sri-master/my_video/out.bag \
 --path_to_data_folder=/workspace/e2sri-master/my_video/frames \
 --ros_publisher_frame_rate=60 \
 --exposure_time_ms=10.0 \
 --use_log_image=1 \
 --log_eps=0.1 \
 --contrast_threshold_pos=0.15 \
 --contrast_threshold_neg=0.15

–data_source=2: 告诉 ESIM 从包含图像的文件夹中读取。ESIM 将查找images.csv描述要读取的图像时间戳的文件。
–path_to_data_folder:框架和文件所在文件夹的路径images.csv。
–path_to_output_bag:生成的数据(事件和帧)将被保存到这个位置的 rosbag 中
–ros_publisher_frame_rate:模拟 APS(帧)传感器的帧速率(以每秒帧数为单位)。
–exposure_time_ms:模拟 APS(帧)传感器的曝光时间(以毫秒为单位)。
–use_log_image=1: 告诉 ESIM 在对数强度域中操作。这意味着每个输入图像都将转换为日志,如下所示:L = ln(I / 255 + eps),其中eps通过–log_eps参数设置。
–contrast_threshold_pos和–contrast_threshold_neg:正(或负)对比度阈值的值。较低的值意味着较高的灵敏度(更多事件)。较高的值意味着较低的灵敏度(较少的事件)。

这样执行完,就生成了一个out.bag文件。

然后还是和之前跑样例一样,开一个新的终端:

rosrun dvs_renderer dvs_renderer events:=/cam0/events

如果之前本身就开着,那就不用执行上面这步了。

然后回到原终端,播放bag:

rosbag play /workspace/e2sri-master/my_video/out.bag -l -r 0.1

这里 -l 表示是循环播放。-r表示是慢速播放。如果你想跟原视频同步,那么把 指令中的-r 0.1给去掉。

开一个新的终端:

rqt_image_view /dvs_rendering

ERROR: cannot launch node of type [image_view/extract_images]: image_view

sudo apt-get install ros-noetic-image-view

参考此处

将得到的output.bag转为图片帧形式

查看.bag文件信息

rosbag info xxx.bag
#rosbag info /workspace/e2sri-master/my_video/out.bag

显示:
在这里插入图片描述
因为这样获取到的图像太少了,所以将上面的1200fps改为了25fps
在这里插入图片描述

在/root/sim_ws/文件夹中创建export.launch文件,内容为

<launch>
      <node pkg="rosbag" type="play" name="rosbag" args=" /workspace/e2sri-master/my_video/out.bag"/>
      <node name="extract" pkg="image_view" type="extract_images" respawn="false" output="screen" cwd="ROS_HOME">
        <remap from="image" to="/cam0/events"/>
      </node>
 </launch>

其中args替换为你的out.bag路径path,to更换为topics

运行:

roscore
roslaunch export.launch
cd ~/.ros
mv ~/.ros/*.jpg /workspace/e2sri-master/my_video/event_imgs
                  # 储存图片的路径

在这里插入图片描述

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值