下载编译
克隆 package
1 | cd ~/rotors_ws/src/ |
复制.world
文件:
1 | cp ~/rotors_ws/src/uav_tracking/worlds/tracking_scen.world ~/rotors_ws/src/rotors_simulator/rotors_gazebo/worlds/ |
编译
1 | cd ~/rotors_ws |
然后重启终端
tracking 包的使用
1 | cd ~/rotors_ws |
录制 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 | <launch> |
注意:
- [BAGPATH]/xx.bag需要替换成自己的bag路径
remap
中的/[your_topic]
需要替换为自己图片的话题
2. 运行launch文件
source
后运行这个launch文件
1 | source ~/rotors_ws/devel/setup.bash |
成功后会在~/.ros
文件夹中生成命名格式为framexxxx.jpg
(如frame0000.jpg
)的图片
3. 移动图片
1 | mkdir ~/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 安装
- 安装OpenCV (已经安装好的使用命令
pkg-config opencv --modversion
查看安装的OpenCV版本) - 下载对应的 OpenCV_contrib(点击
tag
找到所需版本) - 将解压后的
OpenCV_contrib
文件夹移到opencv
根目录下 - 安装依赖
1
2
3sudo 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 - 进入
opencv/build
(如果没有build
,就新建一个build
文件夹)注意:参数 OPENCV_EXTRA_MODULES_PATH 中的opencv_contrib-3.4.0 就是 opencv_contrib 解压后移动到 opencv 目录下名字1
cmake -D CMAKE_INSTALL_PREFIX=/usr/local -D CMAKE_BUILD_TYPE=Release -D OPENCV_EXTRA_MODULES_PATH=../opencv_contrib-3.4.0/modules ..
- 编译安装
1
2make -j8
sudo make install
img_tracking.cpp
使用
先
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
2
3
4boundingBox.x = 350;
boundingBox.y = 200;
boundingBox.width = 100;
boundingBox.height = 80;手动框选:
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 |
接着就会出现视频的第一帧,用鼠标框选出跟踪的目标,按回车就可以看到开始跟踪了。
uav_tracking.cpp
打开 gazebo
随便打开一个有 rotors
的 gazebo
世界,如:
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
- 为了实现高效的人体跟踪,我测试了这些开源CV算法
- (Python)从零开始,简单快速学机器仿人视觉Opencv—运用五:物体运动跟踪
- ROS实现无人机目标跟踪/物体跟随/循迹
- 基于ROS搭建简易软件框架实现ROV水下目标跟踪(十四完结)–目标跟踪模块
- 赛道环境ROS包
- YOLO_ROS包
- 使用OpenCV实现单目标跟踪
- linux下安装Opencv 和opencv-contrib
- Object Tracking using OpenCV
- ROS基础知识学习笔记(1)—数据类型
- std_msgs::UInt8MultiArray发布数组
- ROS 图像相关的命令与应用
- ROS的相机节点
- rosbag转mp4文件