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

    • RE: 小强ROS机器人教程(16)___大范围激光雷达slam与实时回路闭合测试

      @buptvv 按照步骤3安装完成后就会有那个launch文件。 这个bag文件是我们自己录制的,所以launch文件根据这个bag的topic进行了调整。

      
      <!--
        Copyright 2016 The Cartographer Authors
        Licensed under the Apache License, Version 2.0 (the "License");
        you may not use this file except in compliance with the License.
        You may obtain a copy of the License at
             http://www.apache.org/licenses/LICENSE-2.0
        Unless required by applicable law or agreed to in writing, software
        distributed under the License is distributed on an "AS IS" BASIS,
        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        See the License for the specific language governing permissions and
        limitations under the License.
      -->
      
      <launch>
        <param name="/use_sim_time" value="true" />
        <!-- <node pkg="tf" type="static_transform_publisher" name="base_laser_broadcaster" args="0 0 0 0 0 0  laserbase_footprint /base_footprint 20" /> -->
        <include file="$(find cartographer_ros)/launch/rplidar_2d.launch" />
        <node name="cartographer_node" pkg="cartographer_ros"
            type="cartographer_node" args="
                -configuration_directory
                    $(find cartographer_ros)/configuration_files
                -configuration_basename xiaoqiang_rplidar_2d.lua"
            output="screen">
            <remap from="/odom" to="/xqserial_server/Odom" />
        </node>
        <node name="rviz" pkg="rviz" type="rviz" required="true"
            args="-d $(find cartographer_ros)/configuration_files/rplidar_2d.rviz" />
        <node name="playbag" pkg="rosbag" type="play"
           args="--clock $(arg bag_filename)" />
      </launch>
      
      posted in 产品服务
      weijiz
      weijiz
    • RE: 自己的电脑装了小强镜像,连接驱动器没反应,该怎么办

      应该是底盘驱动程序xqserial_server包没有启动。正常是应该开机自启动的。可以看看/var/log/upstart/startup.log里面是不是有错误。
      如果没有错误尝试启动 roslaunch startup startup.launch看看是不是有错误。如果没有错误应该就能正常驱动小车了。

      posted in 技术交流
      weijiz
      weijiz
    • RE: 识别颜色

      摄像头的图像是通过标准的Image message发布出来的具体的可以参照这个http://docs.ros.org/api/sensor_msgs/html/msg/Image.html。具体的数据如何对应颜色是根据编码方式定的。按照对应的编码方式读取数据就可以了。如果你熟悉opencv的话也可以用ROS cv_bridge直接转成opencv的图像对象进行处理。

      posted in 技术交流
      weijiz
      weijiz
    • RE: 出厂设置

      你可以重新安装镜像,不过并不推荐这样。
      小强自带的软件都是通过git去管理的,你可以到对应的软件文件夹内执行git stash来恢复。

      posted in 技术交流
      weijiz
      weijiz
    • RE: 急求!!

      这个并不是错误,只是一个警告。因为软件包的名字包含了大写字母,但是按照ROS的规范必须使用小写字母。但是并不会影响正常运行。

      posted in 技术交流
      weijiz
      weijiz
    • RE: 移动topic

      控制移动的topic是/cmd_vel。这个topic会被xqserial_server软件包订阅然后转换成电机运动的控制信号。

      posted in 技术交流
      weijiz
      weijiz
    • RE: 启动文件

      启动文件在/home/xiaoqiang/Documents/ros/src/startup/launch/startup.launch
      摄像头文件在/home/xiaoqiang/Documents/ros/src/usb_cam/launch/ov2610.launch

      posted in 技术交流
      weijiz
      weijiz
    • RE: 跟随运动

      有跟随的功能,详细可以看下面的文章
      小强跟随

      posted in 技术交流
      weijiz
      weijiz
    • Ubuntu 16.04 systemback生成镜像文件无法安装grub的问题

      在用systemback制作镜像安装时,会发现无法安装grub,grub的选项是disabled。这是由于系统缺少grub相关的软件包。
      安装对应的软件包即可解决。

      sudo apt-get install grub
      sudo apt-get --reinstall install grub-pc
      

      Enjoy it

      posted in 技术交流
      weijiz
      weijiz
    • 小强自检程序发布

      为了方便各位用户使用小强,我们开发了小强的自检程序。当小强无法正常工作时可以通过这个程序获取到有用的信息,方便调试和解决问题。

      安装方法

      使用xq_os的用户可以通过bwupdate指令安装。使用旧版本系统的用户需要先安装xiaoqiang-cmds软件包。安装方法可以参照这里.

      使用方法

      执行

      bwcheck
      

      输出结果如下

      xiaoqiang@xiaoqiang-desktop:~$ bwcheck
      
      ██████╗ ██╗     ██╗   ██╗███████╗██╗    ██╗██╗  ██╗ █████╗ ██╗     ███████╗
      ██╔══██╗██║     ██║   ██║██╔════╝██║    ██║██║  ██║██╔══██╗██║     ██╔════╝
      ██████╔╝██║     ██║   ██║█████╗  ██║ █╗ ██║███████║███████║██║     █████╗
      ██╔══██╗██║     ██║   ██║██╔══╝  ██║███╗██║██╔══██║██╔══██║██║     ██╔══╝
      ██████╔╝███████╗╚██████╔╝███████╗╚███╔███╔╝██║  ██║██║  ██║███████╗███████╗
      ╚═════╝ ╚══════╝ ╚═════╝ ╚══════╝ ╚══╝╚══╝ ╚═╝  ╚═╝╚═╝  ╚═╝╚══════╝╚══════╝
      
      
      系统版本: Ubuntu 16.04 XQOS 2
      检查软件系统中...
      检查环境变量
      ROS_MASTER_URI ... WARNING
      警告: ROS_MASTER_URI最好应当是http://xiaoqiang-desktop:11311
      请注意是否执行过 export ROS_MASTER_URI=http://xiaoqiang-desktop:11311
      
      ROS_PACKAGE_PATH ... OK
      addwa_local_planner ... OK
      autoWifi ... OK
      BwbotCenter ... OK
      bwbotupdater ... OK
      cam_auto_brightness ... OK
      freenect_stack ... OK
      iai_kinect2 ... OK
      image_pipeline ... OK
      joystick_drivers ... OK
      libuvc_ros ... OK
      nav_test ... OK
      NLlinepatrol_planner ... OK
      openslam_gmapping ... OK
      orb_init ... OK
      ORB_SLAM ... OK
      ORB_SLAM2 ... OK
      rgbd_launch ... OK
      robot_arm ... OK
      rplidar_ros ... OK
      rqt_common_plugins ... OK
      SharpLink ... OK
      slam_gmapping ... OK
      startup ... OK
      stm32loader ... OK
      system_monitor ... OK
      turtlebot_apps ... OK
      turtlebot_msgs ... OK
      usb_cam ... OK
      web_video_server ... OK
      xiaoqiang_udrf ... OK
      xqserial_server ... OK
      audio_common ... OK
      cartographer_ros ... OK
      geometry ... OK
      geometry2 ... OK
      navigation_msgs ... OK
      robot_upstart ... OK
      turtlebot ... OK
      turtlebot_apps ... OK
      turtlebot_msgs ... OK
      laser_filters ... OK
      navigation ... OK
      bwbot_check ... OK
      检查hosts文件 ... OK
      检查hostname ... OK
      检查95-persistent-serial.rules文件 ... OK
      检查startup服务程序 ... OK
      检查硬件中...
      检查底盘驱动程序 ... ERROR
      错误: 底盘驱动程序没有启动
      
      检查底盘串口设备 ... ERROR
      错误: 未发现底盘串口设备
      
      检查摄像头驱动程序 ... ERROR
      错误: 摄像头驱动程序未启动
      
      检查摄像头设备 ... ERROR
      错误: 未发现摄像头设备
      
      检查kinect ros驱动程序 ... ERROR
      错误: kinect ros 驱动未启动
      
      检查kinect设备 ... ERROR
      错误: 未发现kinect设备
      
      检查电池电压 ... ERROR
      错误: 获取电池电压失败
      
      

      根据错误提示就能找到小强出现异常的原因了。

      posted in 产品服务
      weijiz
      weijiz
    • Ubuntu 16.04 x11vnc在无显示器的时候很卡的解决方法

      在Ubuntu 16.04上使用x11vnc作为vnc服务器的时候,发现非常的卡。但是一旦插上显示器之后就正常了。在网上搜索也没有找到解决方案。最后终于通过Xorg的log找到了原因。

      在/var/log/Xorg.0.log文件中发现提示无法加载intel,fbdev,vesa模块。
      然后安装这几个软件包就可以了

      sudo apt-get install xserver-xorg-video-vesa xserver-xorg-video-intel xserver-xorg-video-fbdev
      

      之后就可以了。如果你遇到了类似的问题根据log的提示安装对应的软件包就可以了。

      posted in 技术交流
      weijiz
      weijiz
    • RE: 伽利略视觉导航系统API v1 alpha

      @senses1 是的,这是一个很好的建议

      posted in 产品服务
      weijiz
      weijiz
    • ros launch中的节点工作空间路径

      在launch文件中启动节点,那么这个节点的工作目录是什么呢?在node程序中如果创建一个文件,这个文件的默认位置在哪里?
      在launch中node节点有一个cwd参数,按照文档的解释,这个参数可以为ROS_HOME或node。当设置为ROS_HOME时,cwd为ROS_HOME参数指定的位置。当设置为node时就是对应node所在的位置。但是如果你echo $ROS_HOME时会发现这个值没有设置。当你进入node源文件所在的位置时你会发现没有刚生成的文件。

      实际上当把cwd设置为ROS_HOME时,默认的cwd是 ~/.ros。当cwd设置成node时默认的位置是node所在的workspace的devel文件夹内。以小强为例,image_view video_recoder默认的文件保存路径就在/home/xiaoqiang/Documents/ros/devel/lib/image_view内

      posted in 技术交流
      weijiz
      weijiz
    • 如何解决百度云下载慢的问题

      百度云下载大文件很慢。这时候可以获取下载连接后用迅雷下载。

      获取下载链接的方法
      找一个Linux的系统中的浏览器。打开共享链接,然后点击下载,之后就可以直接在浏览器中下载了。
      以小强系统为例。我们可以先vnc进小强系统
      0_1508808594185_QQ截图20171024092655.png

      用浏览器打开共享连接
      0_1508808731860_QQ截图20171024093155.png

      点击下载按钮
      0_1508811121500_QQ截图20171024093725.png

      这时候看到已经在浏览器下载了。但是这样速度还是不快。可以把下载链接复制到迅雷里。

      0_1508811308622_QQ截图20171024101444.png

      可以看到速度快很多。

      posted in 技术交流
      weijiz
      weijiz
    • 蓝鲸ROS镜像发布

      本文列出所有已发布的蓝鲸ROS系统镜像,用户可以根据自己需要进行选择。
      蓝鲸ROS是蓝鲸智能机器人公司在Ubuntu ROS的基础上进行修改而制作的ROS系统镜像。其中包含了ROS系统和常用的一些ROS软件包。非常适合ROS学习和开发人员使用。系统安装完成后不需要再安装配置ROS,即可直接使用。蓝鲸ROS也是小强的系统镜像,可以安装在小强上直接使用。

      对于实体小强机器人,重装系统后请根据这篇教程完成后续配置。https://community.bwbot.org/topic/2939/如何在重装系统后恢复xiaoqiang设置

      注意在虚拟机上安装推荐使用Vmware Player

      系统配置要求

      内存最低1.5G推荐2G
      存储空间至少30G

      Noetic 最新版本

      xq4 pro 和xq5通用版本:xiaoqiang-noetic_2021-11-12.iso 下载地址

      版本 xq5-noetic_2020-10-29 下载地址

      版本xq5-noetic_2020-07-16 下载地址
      md5: 3EF9EE329283B3009B22EF1E7C9A856D

      已知问题:

      在未插显示器和视频转接头的情况下VNC远程会黑屏。这个是Gnome的问题,无法很好的解决。
      如果想在无显示器和转接头情况下VNC访问可以试试这里的方法。这个方法也有一些问题,比如无法播放声音。

      Kinetic 最新版本

      版本xq_os_v2.0.10-2018-11-08.iso(kinetic版本)

      可以在小强Pro上使用,也可以在自己电脑上使用

      下载地址

      md5: 6E093DDF851852C50316F86A279DB22B

      说明:
      注意此镜像更改了默认的udev规则,设备和usb端口绑定。串口插在对应的USB位置上才能识别。如果安装完成镜像后无法遥控,查看/dev文件夹下是否有ttyUSB001,如果没有则把U转串换一个USB接口。直到出现为止。
      增加奥比中光支持

      版本xq_os_v2.0.11_xq5-2019-12-21.iso.(kinetic版本)

      可以在XQ5上使用,也可以在自己的电脑上使用

      下载地址

      md5: 1E9DB219A28936CA2366BAB2CC4D41F9

      版本xq_os_v2.0.7_mini_2019_01_15.iso(kinetic版本)

      可以在小强mini上使用,也可以在自己电脑上使用

      下载地址

      md5: 4A37DA0FCC09866615A5CAEBE91B4CE9

      Jade最新版本

      版本xq_os_v1.0.3_2017-10-31

      可以在小强Pro上使用,也可以在自己电脑上使用

      下载地址

      md5: afbf1c8026733c4f8063778846c84e9b

      版本xq_os_v1.0.4_mini_2017-11-17

      只能在mini上使用

      下载地址

      md5: e874c78088211dff3feabd92f86275e7

      注意事项

      下载完成之后一定要做一下md5的检查,确认文件完整性
      注意安装时的用户名只能是xiaoqiang,否则会有问题

      镜像安装方法

      在虚拟机中安装

      打开虚拟机软件,这里使用的是Virtualbox。下载地址

      点击创建按钮,开始创建虚拟机
      注意在系统选择列表中选择Ubuntu 64

      0_1495594526247_QQ截图20170524104758.png

      按照图上设置,完成后点击下一步

      0_1495594567265_QQ截图20170524104821.png

      内存建议设置成2G,内存太小可能会导致无法启动

      0_1495594728592_QQ截图20170524105832.png

      0_1495594591195_QQ截图20170524104827.png

      0_1495594595755_QQ截图20170524104833.png

      0_1495594621541_QQ截图20170524104845.png

      设置完成后,点击上面的设置按钮。在弹出的对话框中选择存储。点击存储界面右侧的光盘图标设置镜像文件

      0_1495594640277_QQ截图20170524104941.png

      设置完成之后点击主界面的启动按钮。等待载入系统的选择界面。

      0_1495595021561_QQ截图20170524105031.png

      如果想要安装系统则选择第二个选项,之后按回车确认。
      等待系统安装程序载入,这个过程和你的机器性能相关,如果机器性能较差可能会载入较长时间。

      0_1495595514153_QQ截图20170524111138.png

      载入完成之后设置用户信息,注意用户只能是xiaoqiang, hostname可以随意设置。

      0_1495595659911_QQ截图20170524111410.png

      点击下一步进入分区界面。
      选中你要安装的硬盘,然后点击Delete按钮

      0_1495595742333_QQ截图20170524111500.png

      再次选择硬盘中的新分区

      0_1495595803274_QQ截图20170524111613.png

      点击箭头进入下一步

      0_1495595848336_QQ截图20170524111719.png

      再次选择刚才新建的分区
      设置右侧的Mount point,再次点击箭头进入下一步

      0_1495595948157_QQ截图20170524111846.png

      勾选transfer user configuration files

      注意在实际的电脑上安装时,分区的时候,要给boot单独的分区,然后选择下面的grub安装位置。否则系统安装完成后是无法启动的。对于不同的启动方式分区也有些不同。以grub方式启动的要给/boot单独分区,以uefi方式启动的要给/boot/efi单独分区。具体的分区信息可以看Install GRUB 2 bootloader的右侧的提示信息。注意一定要保证Install GRUB 2 bootloader不是disable状态。

      在给实际的电脑安装的时候,推荐的分区方式是 1G给 /boot/efi, 4G给swap,剩下的全部分给/。

      点击右下角的next就可以继续了。如果你还想设置其他分区可以按照以上的步骤进行设置。

      0_1495596017069_QQ截图20170524112010.png

      等待系统安装完成后重新启动就可以了。

      在实际的电脑上安装

      安装过程和一般的安装Ubuntu是一样的。下面介绍一下如何用U盘安装系统。
      首先你要在自己的硬盘上准备一个空白的分区用来安装系统。
      然后下载ultroiso软件。 下载地址
      在电脑上插入自己的U盘。
      用软件打开iso文件。在菜单栏中选择启动 -> 写入硬盘镜像,弹出界面如下

      0_1495596681353_QQ截图20170524113112.png

      点击写入,等待写入完成。

      写入完成之后,把U盘插入想要安装系统的电脑上。启动时进入BIOS选项,选择从U盘启动。后面的安装过程就基本上是一样的了。

      注意在分区的时候,要给boot单独的分区,然后选择下面的grub安装位置。否则系统安装完成后是无法启动的。对于不同的启动方式分区也有些不同。以grub方式启动的要给/boot单独分区,以uefi方式启动的要给/boot/efi单独分区。一般情况下用U盘安装都需要给/boot/efi单独分区。

      虚拟机软件下载
      Vmware Player

      posted in 产品服务
      weijiz
      weijiz
    • RE: 简单的代码让小强运动

      @思念远方 你可以这篇文章,这是让小强走正方形的教程。如果想了解具体的实现可以看源代码。也欢迎继续提意见我们继续优化文档。

      posted in 技术交流
      weijiz
      weijiz
    • ROS坐标系统,常见的坐标系和其含义

      常见的坐标系

      在使用ROS进行定位导航等操作时,我们经常会遇到各种坐标系。每种坐标系都有明确的含义。理论上坐标系的名称可以是随意的,但是为了方便不同的软件间共享坐标信息,ROS定义了几个常见的坐标系。

      1.base_link
      base_link坐标系和机器人的底盘直接连接。其具体位置和方向都是任意的。对于不同的机器人平台,底盘上会有不同的参考点。不过ROS也给了推荐的坐标系取法。

      x 轴指向机器人前方
      y 轴指向机器人左方
      z 轴指向机器人上方

      2.odom
      odom是一个固定在环境中的坐标系也就是world-fixed。它的原点和方向不会随着机器人运动而改变。但是odom的位置可以随着机器人的运动漂移。漂移导致odom不是一个很有用的长期的全局坐标。然而机器人的odom坐标必须保证是连续变化的。也就是在odom坐标系下机器人的位置必须是连续变化的,不能有突变和跳跃。
      在一般使用中odom坐标系是通过里程计信息计算出来的。比如轮子的编码器或者视觉里程计算法或者陀螺仪和加速度计。odom是一个短期的局域的精确坐标系。但是却是一个比较差的长期大范围坐标。

      3.map
      map和odom一样是一个固定在环境中的世界坐标系。map的z轴是向上的。机器人在map坐标系下的坐标不应该随着时间漂移。但是map坐标系下的坐标并不需要保证连续性。也就是说在map坐标系下机器人的坐标可以在任何时间发生跳跃变化。
      一般来说map坐标系的坐标是通过传感器的信息不断的计算更新而来。比如激光雷达,视觉定位等等。因此能够有效的减少累积误差,但是也导致每次坐标更新可能会产生跳跃。
      map坐标系是一个很有用的长期全局坐标系。但是由于坐标会跳跃改变,这是一个比较差的局部坐标系(不适合用于避障和局部操作)。

      坐标系的约定

      在非结构化的环境中(比如开放环境),如果我们要定义一个全球坐标系

      1. 默认的方向要采用 x轴向东,y轴向北,z轴向上
      2. 如果没有特殊说明的话z轴为零的地方应该在WGS84椭球上(WGS84椭球是一个全球定位坐标。大致上也就是z代表水平面高度)
        如果在开发中这个约定不能完全保证,也要求尽量满足。比如对于没有GPS,指南针等传感器的机器人,仍然可以保证坐标系z轴向上的约定。如果有指南针传感器,这样就能保证x和y轴的初始化方向。

      在结构化的环境中(比如室内),在定义坐标系时和环境保持对应更有用。比如对于有平面图的建筑,坐标系可以和平面图对应。类似的对于室内环境地图可以和建筑物的层相对应。对于有多层结构的建筑物,对每一层单独有一个坐标系也是合理的。

      4.earth
      这个坐标系是为了多个机器人相互交互而设计的。当有多个机器人的时候,每个机器人都有自己的map坐标系,他们之间的map坐标系并不相同。如果想要在不同的机器人间共享数据,则需要这个坐标系来进行转化。
      如果map坐标系是一个全局坐标系,那么map到earth坐标系的变化可以是一个静态变换。如果不是的话,就要每次计算map坐标系的原点和方向。
      在刚启动的时候map坐标系的全局位置可能是不知道的。这时候可以先不发布到earth的变换,直到有了比较精确的全局位置。

      坐标系之间的关系
      坐标系之间的关系可以用树图的方式表示。每一个坐标系只能有一个父坐标系和任意多个子坐标系。

      earth -> map -> odom -> base_link
      按照之前的说明,odom和map都应该连接到base_link坐标系。但是这样是不允许的,因为每一个坐标系只能有一个父坐标系。

      额外的中间坐标系
      这个图只表示了最少的坐标系。在保证基本的结构不变的情况下可以在其中加入中间的坐标系以提供额外的功能。

      多机器人坐标系的例子

      earth --> map_1 --> odom_1 --> base_link1
      earth --> map_2 --> odom_2 --> base_link2

      坐标系变换的计算

      odom到base_link的变换由里程计数据源中的一个发布

      map到base_link通过定位组件计算得出。但是定位组件并不发布从map到base_link的变换。它首先获取odom到base_link的变换然后利用定位信息计算出map到odom的变换。

      earth到map的变换是根据map坐标系选取所发布的一个静态变换。如果没有设置,那么就会使用机器人的初始位置作为坐标原点。

      Map之间的切换

      如果机器人的运动范围很大,那么极有可能是要切换地图的。在室内环境下,在不同的建筑物中,和不同的楼层地图都会不同。
      在不同的地图间切换的时候,定位组件要恰当的把odom的parent替换成新的地图。主要是map到base_link之间的变换要选取恰当的地图,然后在转换成map到odom之间的变换。

      odom坐标系的连续性
      在切换地图的时候,odom坐标系不应该受到影响。odom坐标系要保证连续性。可能影响连续性的情况包括进出电梯,机器人自身没有运动,但是周围环境发生很大的变化。还有可能由于运动距离太远,造成数据溢出。这些都要特殊进行处理。

      参考资料:
      ROS REP 105

      posted in 技术交流
      weijiz
      weijiz
    • ROS思维导图

      ROS思维导图,方便大家了解ROS的各种知识点,来自ROS机器人俱乐部(538456117)的♔ ぅ美洲人,感谢他的总结。
      思维导图源文件 。需要安装xmind才能打开。也欢迎大家把自己的总结也加入进来,继续对其更新。

      替代文字

      posted in 技术交流
      weijiz
      weijiz
    • ROS高效图传的一些方法

      图传是大家经常会遇到的一个问题,ROS中图传的方法也有很多。下面就总结一下常用到的方法。

      1.设置ROS_MASTER_URI的方式
      通过设置ROS_MASTER_URI,我们能够直接和远程主机进行通信。这样只要在远程端发出 image topic 然后在本地订阅这个 topic 就可以显示了。下面是一个具体例子
      假设远程端已经有一个image topic 名称为 /camera_node/image_raw,远程端计算机名为 xiaoqiang-desktop, 其ip为 192.168.0.130。

      a. 在本地计算机 /etc/hosts 文件添加

      192.168.0.130 xiaoqiang-desktop
      

      b. 在本地计算机设置 ROS_MASTER_URI 环境变量

      export ROS_MASTER_URI=http://xiaoqiang-deskstop:11311
      

      c. 在本地计算机输入rostopic list 就可以看到远程计算机的topic了
      在本地计算机上输入

      rosrun image_view image_view image:=/camera_node/image_raw
      

      就可以通过 image_view 打开远程图传了。

      然而默认的传输方式图像是没有压缩的,占用的带宽非常大。可以通过添加压缩参数来传输。

      rosrun image_view image_view image:=/camera_node image_raw compressed
      

      这里实际上使用了image_transport这个包进行了压缩。这个包不仅能够压缩视频图像也可以压缩深度图像信息。不过这个压缩算法是逐帧压缩的,所以压缩的效率并不高,带宽使用率也比较高。但是实时性是比较高的。

      2.使用 web_video_server 软件包
      在远程端安装这个包。安装方法如下
      在自己的工作空间中

      git clone https://github.com/RobotWebTools/web_video_server
      cd ..
      catkin_make
      

      等待编译完成,启动节点

      rosrun web_video_server web_video_server
      

      启动后在本地浏览器输入http://192.168.0.130:8080/stream?topic=/camera_node/image_raw&type=vp8,就可以在浏览器中打开远程视频了。这种方法也是不仅能够压缩一般图像数据也可以压缩深度图像数据,同时可以设置多种压缩方式。由于视频传输是采用的标准的http格式,所以客户端读取视频的时候可以完全脱离ROS的框架,使用起来也比较容易。这种压缩方式压缩效率也比第一种高很多。但是实际使用中发现实时性要差一点,这个和客户端如果处理数据关系比较大,比如缓存设置的比较大,就会有较大的延时。

      参考资料:
      ROS wiki: image_transport
      ROS wiki: web_video_server

      posted in 技术交流
      weijiz
      weijiz
    • 小强在群体机器人中的应用

      ROS是一种分布式设计的通信框架,所以非常适合用来做群体机器人的研究。下面就简单介绍下如何用小强实现机器人集群的控制。

      首先回顾一下ROS通信的基本结构

      0_1506414335562_Screenshot from 2017-09-26 16-25-15.png

      ROS的通信由master, node组成。node从master获取其他node的信息,然后再根据这些信息和其他node建立连接。不同的node并不要求在同一个机器人上。所以只要我们以一台电脑作为master,让其他机器人的node都连接这个master就可以实现机器人之间的通信了。我们不仅能获取到所有机器人的状态信息,也可以向任意一台机器人发送控制命令。

      每台机器人负责各自节点的计算,所以我们的master并不需要很多的计算资源。整个处理过程也是分布式的。master只要做好调度计算就可以了。不仅如此,ROS还提供了很方便的工具方便我们对集群进行配置。下面就以小强为例,配置一个简单的集群。

      这个集群总共有两台电脑组成。一台作为集群的中心节点,也就是master,计算机名为nowhere。另一台作为node,计算机名xiaoqiang。实际使用中node可以有很多台。控制方式是完全一样的。整体的结构如下

      master(nowhere ip: 192.168.0.116) <----> node(xiaoqiang ip: 192.168.0.130)

      现在假设我们要在nowhere上启动小强的system_monitor。首先要保证网络的联通性,即xiaoqiang和nowhere要在同一个局域网下。由于ROS的node间访问的时候使用的是计算机名,所以我们要在xiaoqiang 和 nowhere的hosts文件中添加各自的ip。
      打开小强的 /etc/hosts文件在其中添加如下内容

      192.168.0.116 nowhere
      127.0.0.1 xiaoqiang-desktop
      

      打开nowhere的/etc/hosts文件,在其中添加如下内容

      192.168.0.130 xiaoqiang-desktop
      127.0.0.1 nowhere
      

      在nowhere的工作空间中新建一个叫做cluster_robots的软件包。

      catkin_create_pkg cluster_robots rospy
      

      然后在cluster_robots文件夹内创建一个launch文件夹

      cd cluster_robots
      mkdir launch
      

      在launch文件夹内创建一个cluster.launch文件
      文件内容如下

      <launch>
      
        <machine name="xiaoqiang" address="192.168.0.130" env-loader="/home/xiaoqiang/Documents/ros/devel/env.sh" user="xiaoqiang" password="xiaoqiang" />
      
        <node machine="xiaoqiang" pkg="system_monitor" type="monitor.py" name="monitor"></node>
      
      </launch>
      

      在这个launch文件中首先定义一个machine。这个machine中包含了小强的基本信息。

      name 此机器人的名称,之后会用在node里面
      address 此机器人的ip
      env-loader 此机器人的环境变量设置脚本。指向你的工作空间中的devel/env.sh
      user 此机器人的用户名,用于远程登录此计算机
      password 此机器人的密码

      下面的node和正常的node写法是一样的,差别在于增加了一个machine标签。在这里指定这个节点运行在哪台机器上。

      下面就可以执行了

      roslauch cluster_robots cluster.launch
      

      不过你会遇到一些错误。我们要先把它们解决。

      出现 Incompatible ssh peer错误。这是因为一个库的版本太低了,输入下面的指令升级

      sudo pip install paramiko --upgrade
      

      出现is not in your SSH known_hosts file
      这是由于ssh默认的加密方式和ROS的ssh库不一样。输入下面的命令

      ssh -oHostKeyAlgorithms='ssh-rsa' xiaoqiang@xiaoqiang-desktop # 在nowhere上输入
      ssh -oHostKeyAlgorithms='ssh-rsa' nowhere # 在xiaoqiang上输入
      

      在nowhere确认ROS_MASTER_URI的值,如果是http://localhost:11311则要输入

      export ROS_MASTER_URI=http://nowhere:11311 # 注意nowhere是计算机名,要根据你自己的情况更改
      

      最后在nowhere上运行

      roslauch cluster_robots cluster.launch
      

      终端输出如下
      0_1506425004656_Screenshot from 2017-09-26 19-22-50.png

      这时在nowhere上输入rostopic list终端的输出如下

      0_1506425071329_Screenshot from 2017-09-26 19-24-24.png

      可以看到已经有来自小强的topic了

      这样我们就实现了master和node之间的通信。按照这种方式可以继续添加多台小强。

      实际使用中情况要比这个例子复杂一些。比如如果有多台小强,由于每台小强的topic名称默认都是一样的,所以很有可能存在冲突的情况。这时候就要通过remap给topic重命名。或者采用相对的namespace的方式对topic进行命名。同时一个小强可能要启动很多的节点。这样使用launch文件进行管理的时候也要充分考虑文件组织的合理性。

      采用这种方式启动小强的节点,小强上是没有master节点的。如果在小强上输入rostopic list就会提示无法和master通信。同时小强自己ROS_MASTER_URI是不受影响的,仍然是http://xiaoqiang-desktop:11311。但是在nowhere上通过launch文件启动的小强的节点是可以和nowhere的master进行通信的。同时也和nowhere共享同一个参数服务器。如果小强本地同时启动了一个master ,小强的master和nowhere的master是完全独立的。之间的topic数据也是不通的。

      参考资料
      ROS 基本概念
      ROS Wiki: roslaunch machine
      ROS 多机通信

      posted in 产品服务
      weijiz
      weijiz
    • 1
    • 2
    • 28
    • 29
    • 30
    • 31
    • 32
    • 35
    • 36
    • 30 / 36