0%

基于ROS的无人机跟踪:tracking package

下载编译

克隆 package

1
2
cd ~/rotors_ws/src/
git clone https://github.com/suzhilong/uav_tracking.git

复制.world文件:

1
cp ~/rotors_ws/src/uav_tracking/worlds/tracking_scen.world ~/rotors_ws/src/rotors_simulator/rotors_gazebo/worlds/

编译

1
2
cd ~/rotors_ws
catkin_make

然后重启终端

tracking 包的使用

1
2
cd ~/rotors_ws
source ./devel/setup.bash

录制 ros bag

录制需要的话题,就可以避免每次仿真都打开gazebo

运行 launch 文件

1
roslaunch uav_tracking video_record.launch

录制话题

1
rosbag record -o [BAGNAME] /topic1/xxx /topic2/xxx

话题可以使用rostopic list查看。例如我要录制相机采集的视频:

1
rosbag record -o video /firefly/vi_sensor/left/image_raw

ctrl + c 结束录制

rosbag 回放

1
rosbag play -l [bagNAME]

rosbag 转 MP4

1. bag2img.launch

uav_tracking/launch目录下新建bag2img.launch,写入下面内容:

1
2
3
4
5
6
<launch>
<node pkg="rosbag" type="play" name="rosbag" args="-d 2 [BAGPATH]/xx.bag"/>
<node name="extract" pkg="image_view" type="extract_images" respawn="false" output="screen" cwd="ROS_HOME">
<remap from="image" to="/[your_topic]"/>
</node>
</launch>

注意:

  • [BAGPATH]/xx.bag需要替换成自己的bag路径
  • remap中的/[your_topic]需要替换为自己图片的话题

2. 运行launch文件

source 后运行这个launch文件

1
2
source ~/rotors_ws/devel/setup.bash
roslaunch bag2img.launch

成功后会在~/.ros文件夹中生成命名格式为framexxxx.jpg(如frame0000.jpg)的图片

3. 移动图片

1
2
mkdir ~/rotors_ws/imgs
mv ~/.ros/frame*.jpg ~/rotors_ws/imgs/

4. 图片序列转MP4

1
ffmpeg -r 10  -s 752*480 -i frame%04d.jpg uav_record.mp4

ps: -r 后是帧率,-s后是分辨率,-i后是图片名,最后是输出视频名

tracking

OpenCV_contrib 安装

  1. 安装OpenCV (已经安装好的使用命令pkg-config opencv --modversion查看安装的OpenCV版本)
  2. 下载对应的 OpenCV_contrib(点击tag找到所需版本)
  3. 将解压后的OpenCV_contrib文件夹移到opencv根目录下
  4. 安装依赖
    1
    2
    3
    sudo apt-get install build-essential
    sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
    sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
  5. 进入 opencv/build (如果没有build,就新建一个build文件夹)
    1
    cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_BUILD_TYPE=Release -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-3.4.0/modules ..
    注意:参数 OPENCV_EXTRA_MODULES_PATH 中的opencv_contrib-3.4.0 就是 opencv_contrib 解压后移动到 opencv 目录下名字
  6. 编译安装
    1
    2
    make -j8
    sudo make install

img_tracking.cpp

使用

  1. roslaunch uav 的仿真 或 rosbag play录制好的bag文件

    • 可以进入~/rotors_ws/devel/lib/usv_tracking/后使用./img_tracking运行视频目标跟踪程序
    • 也可以source ~/rotors_ws/devel/setup.bash后直接使用rosrun uav_tracking img_tracking执行视频目标跟踪程序

跟踪目标边框初始化

img_tracking.cpp中,有两种方法初始化目标在第一帧的位置和大小:

  1. 初始化检测框的坐标和大小

    1
    2
    3
    4
    boundingBox.x = 350;
    boundingBox.y = 200;
    boundingBox.width = 100;
    boundingBox.height = 80;
  2. 手动框选:1. 中的代码注释掉,使用下面代码:

    1
    boundingBox = selectROI(curFrame, false);

test_tracking.cpp

这个文件是用来测试仿真uav录制视频的跟踪的。

修改跟踪目标文件

1
VideoCapture video("[video_path]/[video_name].mp4");

使用

1
roscore

新开一个终端,并且source一下,然后

1
rosrun uav_tracking test_tracking

接着就会出现视频的第一帧,用鼠标框选出跟踪的目标,按回车就可以看到开始跟踪了。

tracking480.gif

uav_tracking.cpp

打开 gazebo

随便打开一个有 rotorsgazebo 世界,如:

1
roslaunch uav_tracking video_record.launch

加载 turtlebot 到 gazebo

1
roslaunch uav_tracking add_turtlebot.launch

使用跟踪

1
rosrun uav_tracking uav_tracking

然后选中turtlebot

键盘控制turtlebot移动

1
roslaunch turtlebot_teleop keyboard_teleop.launch

就可以看到无人机跟随turtlebot运动了。

ref