Navigation

    蓝鲸ROS机器人论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • Popular
    1. Home
    2. weijiz
    3. Posts
    ROS交流群
    ROS Group
    产品服务
    Product Service
    开源代码库
    Github
    官网
    Official website
    技术交流
    Technological exchanges
    激光雷达
    LIDAR
    ROS教程
    ROS Tourials
    深度学习
    Deep Learning
    机器视觉
    Computer Vision
    • Profile
    • Following 0
    • Followers 11
    • Topics 248
    • Posts 705
    • Best 11
    • Groups 1

    Posts made by weijiz

    • ROS导航如何调整参数

      ROS导航参数调整时一个很大的话题。具体参数调整可以参照这篇文章里面有很详细的介绍。

      posted in 技术交流
      weijiz
      weijiz
    • 小强出现异常时的调试

      在使用过程中由于各种各样可能的原因会导致小强无法正常工作,这时候就需要我们进行调试,诊断出具体原因。

      Q: 小车无法遥控
      A: 运行bwcheck,根据输出进行判断。
      首先查看是否检测到串口硬件。如果没有那么是不是udev规则有问题。重新插拔或换一个USB口看看是不是能够检测到硬件。
      如果成功检测到硬件,检查底盘驱动程序是否正常运行,是否能够正常获取到小车电压。如果没有正常运行,执行

      sudo service startup restart
      

      重启服务程序。

      Q: kinect 无法使用
      A: 运行bwcheck,查看输出是否有kinect信息,如果提示没有找到kinect设备,重新插拔kinect USB接口。然后再次运行bwcheck,查看是否有对应设备。
      如果有对应设备可以运行freenect-glview看看是否能够看到kinect图像。
      如果有图像,那么运行对应的launch文件启动kinect就可以了。

      Q: 小车无法前进或无法后退
      A: 有可能是小车的红外传感器触发了,检查周围是否有障碍物挡住了传感器。也可以通过发布消息禁用传感器,方法可以参照这里

      Q: 提示找不到rospack等常见ROS指令
      A: 检查~/.bashrc文件,是否修改过其中的环境变量。如果是自己重新安装的系统,在安装时是否勾选了transfer user data的选项。

      Q: 在运行rviz和其他图形程序的时候提示 failed to open display
      A: 你可能是在ssh的情况下运行这些程序的,这些程序都需要图形界面,但是ssh默认是无法提供图形界面的,所以会出错。
      解决方法是在ssh的时候加上-X选项不如

      ssh -X xxx.xxx.xxx.xxx
      

      其中xxx.xxx.xxx.xxx是目标的ip地址。注意-X是大写的X。

      Q: 通过设置ROS_MASTER_URI方式无法远程操作小强
      A: 在进行远程遥控图传,激光雷达建图,amcl导航之类的操作时,经常需要设置ROS_MASTER_URI远程操作。
      如果无法正常使用,首先检查ROS_MASTER_URI是否设置正确。然后检查本地的/etc/hosts和小强的/etc/hosts文件是否已经相互添加ip记录,以及ip记录是否正确。因为一般都是动态获取ip可能以前的已经不是现在的ip。
      如果以上都没问题。是否本地使用的时虚拟机,网络是否设置成桥接。小强和本地是否能够相互ping通。如果仍然有问题可以试试关闭本地的防火墙。

      posted in 技术交流
      weijiz
      weijiz
    • 小强中如何获得惯性导航数据

      一般的ROS机器人都有惯性导航和全局导航(比如雷达,视觉)两种。小强也是如此。
      惯性导航利用底盘编码器和陀螺仪进行定位。这样的定位方式是具有累计误差的,只能保证局部的准确性。
      这样的惯性导航信息被称为小车的里程计(Odometry)。小强的Odom分布在 /xqserial_server/Odom。可以通过rostopic echo 读取到。发布频率为50hz。

      读取里程计指令

      rostopic echo /xqserial_server/Odom
      

      里程计的数据结构如下

      std_msgs/Header header
      string child_frame_id
      geometry_msgs/PoseWithCovariance pose
      geometry_msgs/TwistWithCovariance twist
      

      其中header是数据头,包含时间戳和坐标系ID,pose为机器人里程计坐标,twist是当前小车的速度信息。

      posted in 技术交流
      weijiz
      weijiz
    • RE: 关于ubuntu16-04 server版 + ROS环境的镜像

      @not-old-wang 其他的我也不太清楚。

      posted in 技术交流
      weijiz
      weijiz
    • RE: 关于ubuntu16-04 server版 + ROS环境的镜像

      @not-old-wang 可以参考这个

      posted in 技术交流
      weijiz
      weijiz
    • sophus编译错误的解决方法
      error: optional in namespace Sophus does not name a template type
      

      在使用sophus库的时候可能会遇到如上的错误。这可能是由于系统中安装了ros自带的sohups库的原因。 运行

      sudo apt-get remove ros-kinetic-sophus
      

      卸载系统自带的sophus库,再次编译即可。

      posted in 技术交流
      weijiz
      weijiz
    • ZED摄像头的使用

      1. 安装CUDA

      1.1 禁用原有的驱动

      如果你之前安装了Nvidia的开源驱动,即通过apt-get 安装的驱动。则需要先把开源驱动禁用掉。

      lsmod | grep nouveau #检测Nouveau是否开启,有输出则开启,无输出则为开启
      #若Nouveau开启,执行以下命令
      sudo gedit /etc/modprobe.d/blacklist-nouveau.conf #创建blacklist文件
      # 在创建的文件中输入以下内容关闭掉Nouveau
      blacklist nouveau
      options nouveau modeset=0
      # 更新list,使得更改生效
      sudo update-initramfs -u
      

      然后再官网下载CUDA安装文件,推荐下载.run的文件

      1.2 进入文本模式,禁用图像显示

      下载完成后同时按下 Ctrl + Alt + F1进入文本模式,按照提示登入用户名密码。
      然后执行下面指令关闭图形界面

      sudo service lightdm stop
      

      1.3 安装CUDA

      执行

      sudo sh cuda_9.2.148_396.37_linux.run
      

      根据安装过程的提示进行安装,一般默认就可以了。推荐安装上自带的驱动,防止自己安装驱动版本对不上。

      1.4 设置环境变量

      安装完成之后会提示设置环境变量,根据提示设置就可以了
      在.bashrc文件中添加下面的内容

      export PATH=/usr/local/cuda/bin:$PATH
      export LD_LIBRARY_PATH=/usr/local/cuda/lib64
      

      1.5 测试一下

      bash
      nvcc -V
      

      正常应该会显示出CUDA的版本信息。

      2. 下载安装SDK

      从官方下载SDK

      执行

      chmod +x zed_sdk_file
      ./zed_sdk_file
      

      按照提示安装就可以了

      3. 运行测试程序

      cd /usr/local/zed/tools
      ./ZED\ Depth\ Viewer
      

      0_1533970368567_8c4f1c9f-66dd-450a-a49d-ada780db1a7a-image.png

      一切正常应该可以看到下图所示的画面。

      4. 安装ROS驱动

      cd [to your workspace]/src
      git clone https://github.com/stereolabs/zed-ros-wrapper
      cd ..
      catkin_make -DCATKIN_WHITELIST_PACKAGES="zed_wrapper"
      

      5. 测试ROS驱动

      等待编译完成

      roslaunch zed_display_rviz display.launch
      

      正常即可看到下面的显示了

      0_1533970968419_f7eb760c-d085-4bc6-95ce-c466db23e23e-image.png

      posted in 技术交流
      weijiz
      weijiz
    • TX2刷机和使用常见问题

      1. TX2介绍

      Jetson TX2【1】是基于 NVIDIA Pascal™ 架构的 AI 单模块超级计算机,性能强大(1 TFLOPS),外形小巧,节能高效(7.5W),非常适合机器人、无人机、智能摄像机和便携医疗设备等智能终端设备。
      Jatson TX2 与 TX1 相比,内存和 eMMC 提高了一倍,CUDA 架构升级为 Pascal,每瓦性能提高一倍,支持 Jetson TX1 模块的所有功能,支持更大、更深、更复杂的深度神经网络。

      0_1533950814244_a6d35484-d691-4739-be9a-79e5bea858b8-image.png

      2. TX2刷机

      系统要求
      要给TX2刷机,需要一台装有Ubuntu 16.04系统的主机

      1. 下载安装jetpack软件包

      官方下载地址 注意下载时需要注册成为Nvidia开发者

      安装jetpack

      chmod +x ./JetPack-L4T-3.1-linux-x64.run
      ./JetPack-L4T-3.1-linux-x64.run
      

      0_1533951400102_20c3838d-24bc-4d23-9629-56eddba31dc7-image.png

      0_1533951420068_8c7bc90e-8751-47bf-8669-f372496f499f-image.png

      0_1533951429668_e1912019-235d-4280-8c98-290c8057b002-image.png

      0_1533951443215_6cfec7da-45d1-40be-93aa-e807b1e9b30a-image.png

      如果出现下图则需要通过设置环境变量,让程序使用单线程下载,然后再此启动程序
      0_1533951465428_87c33c01-8db4-4899-978b-0d68c2adee43-image.png

      通过此指令设置环境变量

      NV_DEVTOOLS_FORBID_MULTIPLE_DOWNLOAD_THREADS=1
      

      然后选择next

      0_1533951633589_0b96008f-7faf-48ca-8a6d-2ce2d053e058-image.png

      0_1533951675758_13a497da-bbcb-4fdc-862b-b299039b8462-image.png

      等待下载安装完成

      0_1533951709932_6744767c-cad6-4951-96ba-193b640c8348-image.png

      在出现此界面后保证给TX2连上网线,并且和自己的电脑在同一局域网内。
      然后点击next

      0_1533951778202_129b2973-fbc9-4069-8bb4-21851037f5b6-image.png

      在此界面中选择正确的网卡(当前机器正在使用的有线网络)

      一路Next 直到出现下图

      0_1533951835634_26fc16db-9e55-45f0-a357-c4cfcfe77a82-image.png

      此窗口提示需要让TX2进入recovery模式
      把通过USB线连接TX2和主机。然后给TX2重新插上电源。按下电源键(标有Power的按钮)后放开,之后按下Recovery按钮(标有REC的按钮)不放,同时按下复位键(标有RESET的按钮),可以看到指示灯闪了一下。说明已经进入recovery模式了。

      在主机上执行lsusb应该能够看到下面的输出

      0_1533952164497_0a7db56e-93d7-4dac-b5be-4bd471c62daf-image.png

      此时在刚才弹出的窗口中按回车键,刷机程序就开始执行了。

      等待安装完成

      0_1533952332819_93f94e64-e89b-4596-b8a7-31c64efce29a-image.png

      出现此窗口则说明已经安装完成

      此时关闭窗口,然后重新开启TX2,就可以开始使用了。

      3. TX2的使用

      1. TX2的显示

      TX2主板上提供了hdmi接口。如果有hdmi接口的显示器可以直接使用。如果没有hdmi接口的显示器可以使用vga转hdmi的转接头。但是转接头不一定好用,这涉及到显示驱动的问题。如果尝试了转接头仍然不好用,可以尝试使用vnc的方法。
      在Ubuntu中使用VNC可以参照这一篇文章

      在路由器界面中可以看到TX2的ip,通过ssh进入tx2
      然后按照上文的方法安装vnc

      安装完成后

      0_1533952721390_7ec3a5e4-7171-4021-9d48-a29f982d118a-image.png

      就可以使用了。这种方法也非常适合在移动平台上使用TX2时的远程调试

      2. TX2的分区

      TX2本身的硬盘空间只有32G,对于一些复杂应用可能是不够的。用户可以自己外接硬盘,硬盘接口和普通的笔记本接口一样。然后可以通过修改TX2的fstab来挂载自己的硬盘。

      但是实际使用时发现,不能替换掉原系统的/usr分区。会出现各种各样的问题,比如wifi无法使用,软件源报错等等。建议挂在到/home上。

      3. TX2的备份

      执行下面的指令进行备份

      sudo ./flash.sh -r -k APP -G backup.img jetson-tx2 mmcblk0p1
      

      注意备份时间会比较长,生成的文件也很大,有三十多G。其中backup.img 为备份文件的名字。

      还原时先把备份文件复制到bootloader文件夹里面,替换掉原本的文件。

      sudo cp backup.img.raw bootloader/system.img
      

      然后执行刷机指令

      sudo ./flash.sh -r -k APP jetson-tx2 mmcblk0p1
      

      4. TX2的模式

      TX2默认处于低功耗模式可以执行下面的指令开启最大性能

      sudo nvpmodel -m0
      sudo ./jetson_clocks.sh
      

      4. TX2的坑

      1. TX2会破环自己电脑的系统的软件源

      在自己的电脑上安装jetpack之后,软件源会被程序修改,导致apt-get update 失败。这是由于jetpack给原系统添加了arm的软件源,而其中有些源会下载失败。解决方法时删去arm的软件源

      sudo dpkg --remove-architecture arm64
      

      2. 安装ROS

      安装ROS和官方安装方法是完全一样的

      5. TX2的相关资源

      https://www.elinux.org/Jetson_TX2
      提供了TX2相关的各种信息。

      posted in 技术交流
      weijiz
      weijiz
    • Ubuntu 更新时提示locale错误的解决方法

      在更细系统是有时会出现下面的错误

      perl: warning: Setting locale failed.
      perl: warning: Please check that your locale settings:
      	LANGUAGE = (unset),
      	LC_ALL = (unset),
      	LC_PAPER = "zh_CN.UTF-8",
      	LC_ADDRESS = "zh_CN.UTF-8",
      	LC_MONETARY = "zh_CN.UTF-8",
      	LC_NUMERIC = "zh_CN.UTF-8",
      	LC_TELEPHONE = "zh_CN.UTF-8",
      	LC_IDENTIFICATION = "zh_CN.UTF-8",
      	LC_MEASUREMENT = "zh_CN.UTF-8",
      	LC_CTYPE = "en_US.UTF-8",
      	LC_TIME = "zh_CN.UTF-8",
      	LC_NAME = "zh_CN.UTF-8",
      	LANG = "en_US.UTF-8"
          are supported and installed on your system.
      perl: warning: Falling back to a fallback locale ("en_US.UTF-8").
      

      这是由于系统默认语言没有设置。可以执行下面的指令进行设置

      sudo dpkg-reconfigure locales
      

      根据界面中的提示选择语言就可以了。

      posted in 技术交流
      weijiz
      weijiz
    • RE: 在小强上安装了matlab, 如何发送指令控制电机动作?

      控制速度的话题在/cmd_vel

      posted in 技术交流
      weijiz
      weijiz
    • RE: 小强的stm32底板的串口接到windows平台上

      通信协议可以看这里 https://doc.bwbot.org/books-online/xq-manual/topic/19.html

      posted in 产品服务
      weijiz
      weijiz
    • RE: ORB-SLAM2-ROS节点

      @zzs 这个版本是我们自己修改的,没有开源。你可以参照ORB_SLAM一代里面的相关发布代码,把它移植到ORB_SLAM2里面。

      posted in 机器视觉
      weijiz
      weijiz
    • RE: ROS中c++编程问题

      @rockyren dll是windows的链接库文件,现在ROS不支持windows。在linux上对应的文件是so文件。这个是可以通过修改CMakelists.txt文件进行添加的。

      posted in 技术交流
      weijiz
      weijiz
    • Ubuntu 18.04 failed to start user manager for uid错误的解决方法

      简单说来就是显卡驱动的问题,进入recovery 模式然后重新安装显卡驱动就可以了。

      posted in 技术交流
      weijiz
      weijiz
    • 物体识别:在深度学习时代的回顾

      从简单的图像分类到3D姿势估计,计算机视觉中不乏有趣的问题。 我们最感兴趣的问题之一就是物体识别。 像许多其他计算机视觉问题一样,现在仍然没有明显“最佳”的方法来解决问题,这意味着仍有很大的改进空间。 在进入物体识别之前,让我们快速了解该领域中最常见的问题。

      物体检测与其他计算机视觉问题

      分类

      图片分类可能是计算机视觉中最着名的问题。 它包括将图像分类为许多不同类别中的一个。 学术界最常用的数据集之一是ImageNet,由数百万个分类图像组成。部分被用于每年的ImageNet大规模视觉识别挑战赛(ILSVRC)。 近年来,分类模型的表现已经超越了人类,并且这个问题已经被认为基本解决。 虽然图像分类存在很多挑战,但也很多关于如何解决这些挑战的文章。

      0_1532175534442_511ebf79-162c-462b-874d-f8e293cd2aaf-image.png

      定位

      与分类类似,定位就是查找图像内单个对象的位置。

      0_1532175584947_28d53732-2a51-4c57-ba15-e27893da846d-image.png

      定位可用于许多有用的现实问题。 例如,智能裁剪(知道基于对象所在位置裁剪图像的位置),或者甚至是使用不同技术,进行进一步处理的常规对象提取。 它可以与分类相结合,不仅可以定位对象,还可以将其分类为许多可能的类别之一。

      实例细分

      从物体识别更进一步,我们不仅希望在图像中找到对象,而且还要找到每个检测到的对象的逐像素标记。 我们将此问题称为实例或对象分割。

      物体识别

      同时考虑定位和分类的问题,那么我们最终需要同时检测和分类多个对象。 物体识别是在图像上查找和分类可变数量的对象的问题。 重要的区别是“可变”部分。 与分类等问题相反,物体识别的输出长度可变,因为识别到的物体数量可能会因图像而异。 在这篇文章中,我们将详细介绍实际应用,作为机器学习问题的物体识别的主要问题是什么,以及在过去的几年中如何通过深度学习来解决它的方法。

      0_1532176022007_8f3ddfd8-2f58-4961-a4e8-4c6ee8496665-image.png

      物体检测的实际用途

      尽管物体识别在某种程度上仍然是业界的新工具,但已经有许多有用且令人兴奋的应用程序使用它。

      人脸识别

      自2000年代中期以来,一些傻瓜相机开始具备检测面部的功能,以实现更高效的自动对焦。 虽然它是一种较窄类型的对象检测,但所使用的方法适用于其他类型的对象,我们稍后将对其进行描述。

      计数

      物体识别的一个简单但经常被忽略的用法是计数。 计算人,汽车,花朵甚至微生物的能力是对使用图像的不同类型系统广泛需要的现实世界需求。 最近,随着视频监控设备的不断涌现,使用计算机视觉将原始信息转化为结构化数据的需求比以往任何时候都要大。

      可视化搜索引擎

      最后,我们喜欢的一个用例是Pinterest的视觉搜索引擎。 他们使用对象检测作为工作流程的一部分来索引图像的不同部分。 这样,当搜索特定钱包时,您可以在不同的上下文中找到类似于您想要的钱包的实例。 这比仅仅找到类似的图像要强大得多,就像Google Image的反向搜索引擎一样。

      0_1532176274604_96abf038-2dd7-41d3-b57f-e5f01494bdb8-image.png

      航空影像分析

      在廉价无人机和(接近)经济实惠的卫星发射时代,我们的世界从未有过如此多的数据。 已经有公司使用来自Planet和Descartes Labs等公司的卫星图像,应用物体检测来计算汽车,树木和船只。 这导致了一般民众也能访问到在以前是不可能的(或非常昂贵)高质量的数据。

      一些公司正在使用无人机镜头对难以到达的地方(例如BetterView)进行自动检查,或使用物体识别进行通用分析(例如TensorFlight)。 除此之外,一些公司在不需要人为干预的情况下添加自动检测和问题定位。

      0_1532176499244_412ce015-f050-4bc1-b0c4-6332235b9526-image.png

      物体检测存在的问题和挑战

      让我们开始深入了解物体识别的主要问题。

      可变数量的对象

      我们已经提到了关于可变数量的对象的部分,但是我们省略了为什么它根本是一个问题。 在训练机器学习模型时,通常需要将数据表示为固定大小的向量。 由于事先不知道图像中的对象数量,因此我们不知道正确的输出数量。 因此,需要进行一些后处理,这增加了模型的复杂性。

      历史上,使用基于滑动窗口的方法来处理可变数量的输出。通过为所有不同位置生成该窗口的固定大小的特征。 获得所有预测后,一些被丢弃,一些被合并以获得最终结果。

      尺寸

      另一个重大挑战是不同的物体尺寸。 在进行简单分类时,您希望并希望对覆盖大部分图像的对象进行分类。 另一方面,您可能想要找到的一些对象可能是十几个像素(或原始图像的一小部分)。 传统上,这已经可以通过使用不同尺寸的滑动窗口来解决,这是简单但非常低效的。

      建模

      第三个挑战是同时解决两个问题。 我们如何将两种不同类型的要求结合起来:位置和分类,理想情况下,单个模型?

      在深入学习以及如何应对这些挑战之前,让我们快速了解一下经典方法。

      经典方法

      虽然这些年来有许多不同类型的方法,但我们希望关注两个最受欢迎的方法(仍然广泛使用)。

      第一个是Paul Viola和Michael Jones在2001年Robust Real-time Object Detection中提出的Viola-Jones框架。这种方法快速且相对简单,以至于它是在傻瓜相机中实现的算法,它允许以很小的处理能力进行实时面部检测。

      我们不会详细介绍它是如何工作的以及如何训练它,但在高层次上,它通过使用Haar特征生成不同的(可能是数千个)简单二元分类器来工作。这些分类器使用级联的多尺度滑动窗口进行评估,并在负分类的情况下提前下降。

      另一种传统和类似的方法是使用方向梯度直方图(HOG)特征和支持向量机(SVM)进行分类。它仍然需要一个多尺度的滑动窗口,即使它优于Viola-Jones,它也要慢得多。

      深度学习方法

      深度学习一直是机器学习中真正改变游戏规则的技术,尤其是在计算机视觉领域。 类似于深度学习模型已经破坏了其他经典模型的图像分类任务,深度学习模型现在也是物体识别的最新技术。

      现在您可能对挑战是什么以及如何解决它们有了更好的直觉,我们将概述深度学习方法在过去几年中如何演变。

      OverFeat

      使用深度学习进行物体检测的最先进之一是2013年发布的纽约大学的OverFeat。他们提出了一种使用卷积神经网络(CNN)的多尺度滑动窗口算法。

      R-CNN

      在OverFeat之后,Ross Girshick等人推出了R-CNN。 在加州大学伯克利分校出版,对物体检测挑战提高了近50%。 他们提出的是一个三阶段的方法:

      • 使用区域提议方法(最常用的方法是选择性搜索)提取可能的对象。
      • 使用CNN从每个区域提取要素。
      • 使用SVM对每个区域进行分类。

      0_1532177272559_b5651913-6fda-4a52-bbfd-1705b38578d9-image.png

      Girshick, Ross, et al. “Rich feature hierarchies for accurate object detection and semantic segmentation.” 2014.

      虽然它取得了很好的成果,但训练数据有很多问题。 为了训练它,您首先必须为训练数据集生成建议,将CNN特征提取应用于每一个(对于Pascal 2012训练数据集通常需要超过200GB),然后最终训练SVM分类器。

      Fast R-CNN

      这种方法很快演变成一种更纯粹的深度学习方法,一年后,Ross Girshick(现在的微软研究院)发布了Fast R-CNN。 与R-CNN类似,它使用选择性搜索生成对象提议,但不是独立地提取所有这些并使用SVM分类器,而是在完整图像上应用CNN,然后在特征上使用感兴趣区域(RoI)池映射与最终前馈网络进行分类和回归。 这种方法不仅更快,而且拥有RoI Pooling层和完全连接的层允许模型端到端可区分且更容易训练。 最大的缺点是该模型仍然依赖于选择性搜索(或任何其他区域提议算法),这在使用它进行推理时成为瓶颈。

      image

      Girshick, Ross. “Fast R-CNN” 2015.

      YOLO

      不久之后,由Joseph Redmon发表了实时物体检测(YOLO)的论文(Girshick为共同作者)。 YOLO提出了一种简单的卷积神经网络方法,它具有很好的结果和高速度,第一次允许实时物体检测。

      image

      Redmon, Joseph, et al. “You only look once: Unified, real-time object detection.” 2016.

      Faster R-CNN

      随后,由Shaoqing Ren撰写的Faster R-CNN(也由Girshick合著,现在在Facebook Research),R-CNN系列的第三次迭代。 Faster R-CNN添加了他们所谓的区域提议网络(RPN),试图摆脱选择性搜索算法并使模型完全可以端到端训练。 我们不会详细介绍RPN的功能,但在摘要中,它的任务是根据“对象”分数输出对象。 这些对象由RoI Pooling和完全连接的层用于分类。 我们将在后续文章中详细介绍架构。

      image

      Ren, Shaoqing, et al. “Faster R-CNN: Towards real-time object detection with region proposal networks.” 2015.

      SSD 和 R-FCN

      最后,有两篇值得注意的论文,单镜头检测器(SSD)通过使用多个尺寸的卷积特征图来实现YOLO,实现更好的结果和速度,以及基于区域的全卷积网络(R-FCN),它采用了Faster R-CNN的架构但只用了卷积网络。

      数据集的重要性

      数据集在研究中起着非常重要(有时被低估)的作用。 每次发布新数据集时,都会发布论文,并对新模型进行比较并进行改进,从而进一步提高算法。

      不幸的是,没有足够的数据集用于物体识别。 数据生成起来比较困难(而且成本更高),公司可能不喜欢放弃投资,大学也没有那么多资源。

      但是还是一些很棒的数据集,下面是主要可用数据集的列表。

      名称 图片数量 对象种类 更新时间
      ImageNet 450k 200 2015
      COCO 120K 80 2014
      Pascal VOC 12k 20 2012
      Oxford-IIIT Pet 7K 37 2012
      KITTI Vision 7K 3 2014

      结论

      总之,无论是在仍未发现的应用中还是在用于推动现有技术结果的新方法中, 物体识别方面都存在许多机会。 尽管这只是物体识别的一般概述,但我们希望它能为您提供基本的理解和基础,以获得更深入的知识(没有双关语意)。

      文章翻译自tryolabs

      posted in 机器视觉
      weijiz
      weijiz
    • 在小强上使用Yolo进行物体识别

      物体识别是指讲图片中的物体识别出来,包括物体的位置和类别。
      以下面的图片为例

      0_1532150875333_46a44b9c-0888-4f7b-a1ff-2382bb58cf48-image.png

      可以看出程序成功找出了图片中的自行车,狗和卡车。

      Yolo是一个很高效的物体识别程序,在有Nvida GPU和CUDA的情况下可以做到实时处理。由于小强没有Nvidia GPU,只能采用CPU运行,速度会比较慢。下面是安装和使用方法。

      下载和编译程序

      cd [到你的工作空间]/src
      git clone --recursive https://github.com/BluewhaleRobot/darknet_ros
      cd ..
      catkin_make -DCMAKE_BUILD_TYPE=Release
      

      等待编译完成。注意编译过程中要有网络连接。程序会在编译的时候自动从网络下载yolo的训练模型数据。

      参数配置

      主要的参数位于ros.yaml

      其中 camera_reading topic是图像的接收话题,小强上设置为/camera_node/image_raw就可以了。
      默认启动程序后会有一个显示图像的窗口,如果不想打开可以设置 enable_opencv 为 false
      默认Yolo的输出会在终端显示,可以通过设置enable_console_output false 禁用。

      运行程序

      roslaunch darknet_ros yolo_v3.launch 
      

      一切正常就可以看到输出的图像了

      0_1532152482972_yolo.png

      posted in 机器视觉
      weijiz
      weijiz
    • 使用xiaoqiang_track进行人体跟随和追踪

      xiaoqiang_track

      xiaoqiang_track是一个利用摄像头捕捉的图像进行人体追踪的程序。它有比较好的稳定性,能够可靠的追踪目标。同时也具有比较好的扩展性。可以方便的对关键的追踪算法进行调整。在运动的控制上,使用了PID控制,可以通过调整参数适应不同的设备。

      原理简介

      通过人体识别算法获取到人体的上半身位置。获取成功后就把对应的位置信息传递给追踪程序。追踪程序进行目标追踪。运动控制程序根据当前的目标的位置计算运动控制量。
      由于在追踪过程中可能会丢失,丢失的情况下就要再次使用人体识别程序的结果进行追踪程序的初始化。

      安装

      以下安装方法只在ubuntu 16.04 kinetic版本测试过,如果需要在其他版本使用可能需要调整部分指令。

      安装相关依赖程序

      sudo apt-get install libjsoncpp-dev libcurl3 libcurl4-openssl-dev openssl
      

      安装body_pose人体识别程序

      详细安装方法请参照 body_pose使用说明

      可选程序

      本程序有语音提示功能,如果想要这个功能可以安装xiaoqiang_tts软件包

      安装源代码

      cd 到你的工作空间/src
      git clone https://github.com/bluewhalerobot/xiaoqiang_track
      cd 到你的工作空间
      catkin_make
      

      运行要求

      由于使用的是摄像头追踪方法,所以首先要有一个摄像头设备。同时此设备能够通过ROS的软件包把图像信息通过topic形式发送出来。
      对于小强用户,下面的运行指令直接执行就可以。对于其他用户请修改launch文件中的usb_cam节点。替换成自己的摄像头节点。

      由于要进行人体识别,摄像头的视野范围也很重要。要能保证在合适的追踪距离下摄像头能够比较完整的看到追踪目标。
      对于小强用户,把摄像头固定在二层上,同时有一定的仰角就可以了。
      注意图像的分辨率是640x480

      运行

      小强用户请先关闭startup服务

      sudo service startup stop
      

      启动roscore

      roscore
      

      启动底盘驱动程序

      # 这里是小强的驱动程序,如果不是小强,需要换成自己的
      roslaunch xqserial_server xqserial.launch
      

      开始运行追踪程序

      # 使用body_pose人体识别程序进行人体识别
      roslaunch xiaoqiang_track track_body.launch
      # 或者使用百度的人体识别服务
      roslaunch xiaoqiang_track track_baidu.launch
      

      此时站在摄像头前面,等待初始化完成就可以开始追踪了。注意在转弯的时候适当放慢速度。小车跟不上的话可能会导致追踪丢失。

      如果想要实时的看到处理结果可以订阅/xiaoqiang_track/processed_image图像话题。其中的方框即为实时的追踪结果。

      0_1531101664469_ecc18945-34c8-4ceb-90be-1c954f622d49-image.png

      参数说明

      详细参数请参照launch文件中的注释。

      posted in 技术交流
      weijiz
      weijiz
    • 在ROS中使用Python3

      当前ROS是只支持Python2.7的。Python3的支持在ROS的计划中,详细的可以看这里。简单说来就是要到2020年ROS的N版本才能完全支持Python3。

      首先要了解为什么ROS不能支持Python3.对于纯的Python代码同时支持Python3和Python2.7是比较容易的,基本上ROS的代码也都是支持的。问题在于包含了C++或者C的那部分Python代码。Python2.7和Python3的c module代码相差很大。一次只能编译其中的一种版本。而且很多module没有做好Python3的支持。在Python3环境下也无法编译。这就是ROS无法支持Python3的原因。目前ROS的核心包都是支持用Python3从源码编译的。但是官方并没有发布Python3的软件包。所以想要使用的话要自己编译。下面介绍两种使用Python3的方法。

      1. 使用Python3和Python2.7的混合环境
        原理:使用virtualenv创建一个Python3的环境。然后在这个环境中编译安装自己需要的软件包。在引用软件包的时候,如果没有对应的Python3的软件包,会自动的去Python2.7的环境里面找。这样很多软件包都是可以通用的。当然对于没有做好Python3支持的软件包也是没法用的。

      下面以geometry2为例子

      sudo apt-get install python3-dev
      mkdir catkin_ws # 创建工作空间
      cd catkin_ws
      mkdir src
      cd src 
      # 下载geometry和geometry2的源代码
      git clone https://github.com/ros/geometry
      git clone https://github.com/ros/geometry2
      cd ..
      # 创建虚拟环境
      virtualenv -p /usr/bin/python3 venv
      source venv/bin/activate
      pip install catkin_pkg pyyaml empy rospkg numpy
      catkin_make
      source devel/setup.bash
      

      这样就能够成功在Python3下使用tf的相关函数了。

      运行Python3程序

      Python 3.5.2 (default, Nov 23 2017, 16:37:01) 
      [GCC 5.4.0 20160609] on linux
      Type "help", "copyright", "credits" or "license" for more information.
      >>> import tf
      >>> tf.__file__
      '/home/xiaoqiang/Desktop/catkin_ws/devel/lib/python3/dist-packages/tf/__init__.py'
      >>> import tf2_py
      >>> tf2_py.__file__
      '/home/xiaoqiang/Desktop/catkin_ws/devel/lib/python3/dist-packages/tf2_py/__init__.py'
      >>> 
      

      可以看到我们的tf已经是在Python3的路径下了。

      1. 从源码安装ROS
        首先把ROS都卸载干净
      sudo apt-get purge ros-*
      sudo apt-get autoremove
      

      创建ROS工作空间

      mkdir ros
      

      创建Python3环境

      cd ros
      # 把系统默认Python替换成Python3
      sudo rm -rf /usr/bin/python
      sudo ln -s /usr/bin/python3.5 /usr/bin/python
      sudo apt install python3-pip
      

      安装ros的编译基础软件包

      sudo apt-get install python3-rosdep python3-rosinstall-generator python3-wstool python3-rosinstall build-essential
      sudo pip3 install catkin_pkg
      

      开始下载相关软件包

      rosinstall_generator desktop --rosdistro kinetic --deps --tar > kinetic-desktop.rosinstall
      wstool init -j8 src kinetic-desktop.rosinstall
      # 如果上一步有失败的,执行
      wstool update -j 4 -t src
      

      这里安装的是kinetic版本。其他版本需要调整对应的参数。

      安装软件包依赖

      rosdep install --from-paths src --ignore-src --rosdistro kinetic -y
      sudo apt-get install libtbb-dev python3-pyqt5
      sudo pip3 install empy numpy defusedxml netifaces
      # 修复 16.04 libboost_python3找不到的问题
      sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_python-py35.so /usr/lib/x86_64-linux-gnu/libboost_python3.so
      

      编译工作空间

      ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release
      

      如果这个过程中编译有错误,一般是缺少软件包之类的。需要下载安装对应的软件包然后再次编译。直到全部编译成功。

      添加环境变量

      在~/.bashrc里面添加

      source /home/xiaoqiang/Documents/ros/install_isolated/setup.bash
      

      这里是小强的路径,你要根据自己的工作空间的位置进行修改。

      之后再重新打开一个终端就可以了。

      In [2]: import tf2_ros
      
      In [3]: tf2_ros.__file__
      Out[3]: '/home/xiaoqiang/Documents/ros/install_isolated/lib/python3/dist-packages/tf2_ros/__init__.py'
      
      In [4]: 
      

      可以看到现在的ROS使用的Python已经是Python3了。

      总结虽然以上两种方法都可以使用Python3,但是推荐还是使用第一种方法。第二种方法使用起来比较费事,而且一旦使用了Python3就没办法使用Pyhon2.7了。有些软件包并没有做好Pyhon3的支持。这样会在使用中产生不少问题。

      posted in 技术交流
      weijiz
      weijiz
    • 使用python代码启动launch文件

      在开发中我们经常会遇到使用python代码启动launch文件这样的问题。一般的做法是使用subprocess调用roslaunch。但是这种方法使用起来并不方便。要涉及到自己去控制进程的状态。由于roslaunch实际上是用python实现的。使用python调用launch文件实际上有更简单的方法。

      import roslaunch
      
      uuid = roslaunch.rlutil.get_or_generate_uuid(None, False)
      roslaunch.configure_logging(uuid)
      tracking_launch = roslaunch.parent.ROSLaunchParent(
          uuid, ["/home/xiaoqiang/Documents/ros/src/xiaoqiang_track/launch/track_body.launch"])
      tracking_launch.start()
      

      这样就成功启动了一个launch文件。把uuid后面的路径换成自己的launch文件路径就可以了。

      而且我们可以通过roslaunch直接关闭launch文件启动的节点。

      tracking_launch.shutdown() # tracking_launch 即是上面通过roslaunch获取到的变量
      

      这样使用起来就很方便了。

      posted in 技术交流
      weijiz
      weijiz
    • 在小强上使用body_pose进行人体识别

      body_pose 是一个人体姿态识别的软件包。这个软件包可以从图片中识别出人体的耳朵,眼睛,鼻子,四肢的共17个特征点。其实现是通过深度学习网络利用tensorflow框架。此软件还支持多人同时识别。

      0_1530878202843_6f71b239-27ae-453a-94d9-94de429c8c84-image.png

      安装

      1. 安装tensorflow
        由于小强上面没有Nvidia显卡, 所以我们安装CPU版本的Tensorflow。小强的CPU支持一些高效的指令集,默认的Tensorflow为了能够在更多平台上运行,没有使用这些指令集。所以性能实际上没有发挥到最高。我们可以安装开启了这些优化指令的版本。
      sudo pip install --ignore-installed --upgrade "https://github.com/lakshayg/tensorflow-build/raw/master/tensorflow-1.4.0-cp27-cp27mu-linux_x86_64.whl"
      
      1. 安装软件包相关依赖
      sudo pip install scipy scikit-image matplotlib pyyaml easydict cython munkres==1.0.12
      
      1. 下载相关模型
      # 单人模型
      cd src/models/mpii
      ./download_models.sh
      $ cd -
      # 多人模型
      
      ./compile.sh
      cd models/coco
      ./download_models.sh
      cd -
      

      运行

      1. 运行单人识别测试程序
      # 在src文件夹内运行
      TF_CUDNN_USE_AUTOTUNE=0 python demo/singleperson.py
      

      运行成功后可以看到下图

      0_1530879542859_94996fd8-2ca8-418f-ac9f-11da6221380a-image.png

      1. 运行多人识别的例子
      TF_CUDNN_USE_AUTOTUNE=0 python demo/demo_multiperson.py
      

      成功运行后显示下面的图像

      0_1530879857466_158a04a4-defc-498a-87e3-fdae8ee9ab41-image.png

      1. 运行ROS服务
      roslaunch body_pose body_pose_test.launch
      

      这个launch文件在小强上可以直接运行。但是如果不是在小强上你需要把usb_cam的节点换成自己的摄像头节点。
      服务启动成功后会自动的识别摄像头中的图像。处理的结果会显示在 /body_pose_tester/processed_image topic 里面。可以利用摄像头显示处理结果。

      rosrun image_view image_view image:=/body_pose_tester/processed_image
      

      可以看到图中标了一些圆圈。这些都是被识别出的人体特征位置。

      0_1530880373290_QQ图片20180706203240.jpg

      在自己的程序中使用此服务

      可以在自己的launch文件中添加这样的内容来启动节点

      <node name="body_pose" pkg="body_pose" type="body_pose_node.py">
          <param name="process_width" value="200" />
          <param name="process_height" value="150" />
          <param name="conf_min_count" value="3" />
      </node>
      

      参数说明
      process_width 内部处理宽度,process_height内部处理高度。可能采集的图片很大,这样处理起来非常费时间。可以通过这两个参数对图片进行压缩以提高处理速度。
      conf_min_count最小可接受点数。如果在一个人上识别出的特征点小于这个值,则认为这个识别对象并不是人。

      发布的服务
      服务默认发布在 ~get_body_pose可以类型为BodyPose.srv。

      详细的使用方法可以参照 body_pose_test_node.py 文件。

      posted in 技术交流
      weijiz
      weijiz
    • 1
    • 2
    • 24
    • 25
    • 26
    • 27
    • 28
    • 35
    • 36
    • 26 / 36