Navigation

    蓝鲸ROS机器人论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • Popular
    1. Home
    2. weijiz
    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

    weijiz

    @weijiz

    administrators

    13
    Reputation
    3710
    Profile views
    705
    Posts
    11
    Followers
    0
    Following
    Joined Last Online
    Email weijiz@outlook.com

    weijiz Unfollow Follow
    administrators

    Best posts made by 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
    • 小强机器人用户手册和教程目录

      小强pro淘宝购买链接

      小强mini淘宝购买连接

      小强官网主页

      小强ROS机器人用户手册(综合版)PDF下载

      在线阅读

      一. 开始使用

      • 1.开始使用

      二. 小强ROS机器人教程

      • 1. 基础操作介绍
      • 2. 蓝鲸智能开源软件仓库的使用和ROS开机启动任务的配置
      • 3. 在rviz中显示小强机器人模型
      • 4. 惯性导航自主移动测试
      • 5. 小强遥控图传app安卓版
      • 6. 小强遥控图传windows客户端
      • 7. 使用ps3手柄控制小强
      • 8. kinect1代 ROS驱动测试与安装
      • 9. 使用rostopic控制kinect的俯仰角度
      • 10. 使用kinect进行自主移动避障
      • 11. kinect跟随包turtlebot_follower
      • 12. ROS显示kinect2代的点云
      • 13. rplidar二代激光雷达的使用和利用udev给小车增加串口设备
      • 14. 在gmapping下使用激光雷达rplidar a2进行建图
      • 15. AMCL导航测试
      • 16. 大范围激光雷达slam与实时回路闭合测试
      • 17. 利用ORB_SLAM2建立环境三维模型
      • 18. 利用DSO_SLAM建立环境三维模型
      • 19. NLlinepatrol_planner的简单使用
      • 20. 获取小车视觉里程计并在rviz中显示小车轨迹
      • 21. 获取usb摄像头30fps的1080p图像流及120fps的VGA分辨率图像流
      • 22. 操作6自由度机械臂
      • 23. ROS入门手册
      • 24. 在小强上使用伽利略视觉导航系统
      • 25. 在小强上使用语音识别和语音合成功能
      • 26. 使用奥比中光astrapro进行自主移动避障
      • 27. bw_auto_dock自动充电功能包的使用和实现原理
      • 28.使用Intel RealSense D400系列深度摄像头进行自主移动避障
      • 29.安装使用zed相机cpu版本ros驱动
      • 30.ORB_SLAM2包的详细配置和深度使用
      • 31.kinect深度图转2d雷达数据
      • 32.使用realsense深度摄像头进行跟随

      三. 维护

      • 充电
      • 车轮松动打滑
      • 小强底盘固件的自动更新升级方法
      • 升级底盘ros驱动包xqserial_server
      • 重新校准小车底盘IMU
      • 小强系统镜像

      四. 其他

      • Ubuntu设置静态IP
      • 视觉导航路径编辑器使用教程
      • 小强的远程协助功能
      • 小强ROS机器人障碍物识别演示
      • 视觉导航在履带车中的运用
      • Google激光雷达slam算法Cartographer的安装及bag包demo测试
      • 原装和国产ps3手柄ros驱动程序
      • 升级软件包以支持小强图传遥控app
      • 小强自检程序

      附件

      • 1. 小车系统框架图
      • 2. 电气布线图
      • 3. 小强电脑与stm32底层通讯协议
      posted in 产品服务
      weijiz
      weijiz
    • hikey 970 debian 镜像(有opencl 和 tensorflow)

      最近(2018.8.30) LeMaker发布了一个新的 Hikey 970 debian镜像。此镜像增加了HDMI支持,稳定性也提高了。同时增加了OpenCL和Tensorflow(只有python3.5)支持。此 Tensorflow 应该是进行了优化的,具体的是不是用到了NPU还不确定。经过我自己的测试此 Tensorflow 的速度比我自己安装的速度要快一倍。但是此镜像仍然不支持自带的蓝牙。

      下面是安装和使用方法

      下载镜像

      镜像下载链接

      从上面链接下载镜像并解压

      tar -xzvf hikey970-lebian-9.tar.gz
      

      刷入镜像

      把hikey 970板子开关拨至 on off on off。链接USB线,并给板子上电。然后自己的电脑上执行下面的指令开始刷机

      ./flash-all-binaries.sh
      

      等待刷机完成

      刷入分区补丁

      默认的系统分区很小,所以需要打一个补丁,之后可以调整系统分区到60G。

      分区补丁下载

      从上面的的下载地址下载补丁,之后解压。
      把解压后的内容复制到刚才的 hikey970-lebian-9 文件夹内。

      然后执行

      sudo fastboot flash boot boot-hikey970.uefi.2.img
      sudo fastboot flash userdata hikey970-lebian9-tf.img
      

      等待程序执行完成

      启动系统

      断开板子的电源,然后把开关拨至on off off off。给板子连接上鼠标键盘网线和显示器。然后给板子上电。
      等待系统启动完成。正常情况下应该可以看到登陆界面。用户名和密码都是shunya。

      调整分区

      运行下面的指令调整分区

      sudo resize2fs /dev/sdd15
      

      这样能够把系统分区扩展到20G,剩下的需要用gparted扩展

      sudo apt-get install gparted
      sudo gparted-pkexec # 注意此指令只能再外接显示器的情况下才能运行
      

      选择60G的硬盘,然后把未分配的空间全部扩展到最后一个分区。

      shunya@hikey970:~$ df -h
      Filesystem      Size  Used Avail Use% Mounted on
      /dev/root        53G  7.5G   44G  15% /
      devtmpfs        2.8G     0  2.8G   0% /dev
      tmpfs           2.9G     0  2.9G   0% /dev/shm
      tmpfs           2.9G   25M  2.8G   1% /run
      tmpfs           5.0M  4.0K  5.0M   1% /run/lock
      tmpfs           2.9G     0  2.9G   0% /sys/fs/cgroup
      tmpfs           577M     0  577M   0% /run/user/107
      tmpfs           577M     0  577M   0% /run/user/1000
      

      可以看到系统空间已经增大到53G了。

      测试tensorflow

      系统默认安装了Python 3.5的 tensorflow。下面用 pose-tensorflow 来测试一下。这个软件是一个利用 tensorflow 识别人体关键位置的程序。

      下载程序

      git clone https://github.com/eldar/pose-tensorflow
      

      安装依赖

      pip3 install scipy scikit-image matplotlib pyyaml easydict cython munkres
      

      下载模型

      # Download pre-trained model files
      $ cd models/mpii
      $ ./download_models.sh
      $ cd -
      

      运行模型

      # Run demo of single person pose estimation
      $ TF_CUDNN_USE_AUTOTUNE=0 python3 demo/singleperson.py
      

      正常应该会显示下图

      0_1535631147956_bccc745e-28f7-416d-b1b7-ac563c51bd45-image.png

      posted in 技术交流
      weijiz
      weijiz
    • catkin_make的时候发生了什么

      这是一个比较复杂的问题,但是有时候会有莫名其妙的编译错误,在找错误的过程中会非常需要了解这个过程。

      首先说一下.in文件。在catkin的目录中有许多.in文件
      0_1492173921785_Screenshot from 2017-04-14 20-45-12.png
      这些都是模板文件,以/opt/ros/kinetic/share/catkin/cmake/templates/env.sh.in为例
      下面是源文件

      #!/usr/bin/env sh
      # generated from catkin/cmake/templates/env.sh.in
      
      if [ $# -eq 0 ] ; then
        /bin/echo "Usage: env.sh COMMANDS"
        /bin/echo "Calling env.sh without arguments is not supported anymore. Instead spawn a subshell and source a setup file manually."
        exit 1
      fi
      
      # ensure to not use different shell type which was set before
      CATKIN_SHELL=sh
      
      # source @SETUP_FILENAME@.sh from same directory as this file
      _CATKIN_SETUP_DIR=$(cd "`dirname "$0"`" > /dev/null && pwd)
      . "$_CATKIN_SETUP_DIR/@SETUP_FILENAME@.sh"
      exec "$@"
      
      

      这个是生成后的文件

      #!/usr/bin/env sh
      # generated from catkin/cmake/templates/env.sh.in
      
      if [ $# -eq 0 ] ; then
        /bin/echo "Usage: env.sh COMMANDS"
        /bin/echo "Calling env.sh without arguments is not supported anymore. Instead spawn a subshell and source a setup file manually."
        exit 1
      fi
      
      # ensure to not use different shell type which was set before
      CATKIN_SHELL=sh
      
      # source setup.sh from same directory as this file
      _CATKIN_SETUP_DIR=$(cd "`dirname "$0"`" > /dev/null && pwd)
      . "$_CATKIN_SETUP_DIR/setup.sh"
      exec "$@
      

      可以看出源文件中的@parameter@都被替换成了实际的参数。通过调用源文件加上对应的参数就可以生成不同的目标文件了。每个ROS的软件包都要通过这种方式生成对应的xxxConfig.cmake等文件。

      下面开始说大致的过程

      catkin_make 实际和下面的指令是等效的

      $ cd ~/catkin_ws
      $ cd src
      $ catkin_init_workspace
      $ cd ..
      $ mkdir build
      $ cd build
      $ cmake ../src -DCMAKE_INSTALL_PREFIX=../install -DCATKIN_DEVEL_PREFIX=../devel
      $ make
      

      所以最先被编译的是那个在src下的公用的CMakeList.txt文件
      这个文件的大部分内容都是在找catkin这个包的位置。最后执行一个cmake函数catkin_workspace。这个函数在/opt/ros/kinetic/share/catkin/cmake/catkin_workspace.cmake文件中定义。这个函数对catkin_make执行时的参数进行解析,比如CATKIN_WHITELIST_PACKAGES。然后开始遍历工作空间中的文件夹,如果文件夹中有package.xml文件就将其当作一个软件包。同时对每个软件包调用add_subdirectory。add_subdirectory是一个cmake的内置函数,会调用这个文件夹内的CMakeList.txt文件。这样就开始了每个软件包的编译了。

      所以如果你的catkin_make本身出了问题就要在这个过程中去Debug。

      下面说说每个软件包的编译过程。以geometry2/tf2_geometry_msgs这个包为例
      其CMakeList.txt文件如下

      cmake_minimum_required(VERSION 2.8.3)
      project(tf2_geometry_msgs)
      
      find_package(orocos_kdl)
      find_package(catkin REQUIRED COMPONENTS geometry_msgs tf2_ros tf2)
      find_package(Boost COMPONENTS thread REQUIRED)
      
      # Issue #53
      find_library(KDL_LIBRARY REQUIRED NAMES orocos-kdl HINTS ${orocos_kdl_LIBRARY_DIRS})
      
      catkin_package(
         LIBRARIES ${KDL_LIBRARY}
         INCLUDE_DIRS include
         DEPENDS orocos_kdl
         CATKIN_DEPENDS  geometry_msgs tf2_ros tf2)
      
      include_directories(include
                          ${catkin_INCLUDE_DIRS}
      )
      
      link_directories(${orocos_kdl_LIBRARY_DIRS})
      
      
      
      install(DIRECTORY include/${PROJECT_NAME}/
        DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
      )
      catkin_python_setup()
      
      if(CATKIN_ENABLE_TESTING)
      
      find_package(catkin REQUIRED COMPONENTS geometry_msgs rostest tf2_ros tf2)
      
      add_executable(test_geometry_msgs EXCLUDE_FROM_ALL test/test_tf2_geometry_msgs.cpp)
      target_link_libraries(test_geometry_msgs ${catkin_LIBRARIES} ${GTEST_LIBRARIES} ${orocos_kdl_LIBRARIES})
      add_rostest(${CMAKE_CURRENT_SOURCE_DIR}/test/test.launch)
      add_rostest(${CMAKE_CURRENT_SOURCE_DIR}/test/test_python.launch)
      
      
      if(TARGET tests)
        add_dependencies(tests test_geometry_msgs)
      endif()
      
      endif()
      

      首先是指明cmake版本,项目名称,软件包依赖之类的常见操作。然后执行了catkin_package这个函数。这个函数做了大量的工作。catkin_package在/opt/ros/kinetic/share/catkin/cmake/catkin_package.cmake文件中定义。devel和build文件夹内的内容基本都是由其生成的。
      这个函数解析package.xml文件,提取出里面的参数,由这些参数给find_package和pkg-config生成对应的配置文件。这样其他的对这个软件包有依赖的程序就可以方便的使用了。

      所以需要重点分析的就是catkin_package这个函数。
      对于编译程序最重要的就是头文件的位置和链接库的位置。也就是include directory 和 library directory。这个函数就是在为软件包配置这些参数。它自动的根据依赖关系把依赖的程序的头文件和链接库目录加入到当前的变量中。然后根据这些参数和对应的模板文件生成对应的配置文件。比如根据/opt/ros/kinetic/share/catkin/cmake/templates/pkgConfig.cmake.in生成软件包的pkgConfig.cmake文件。这样这个软件包就可以被其他的软件包用find_package找到。

      如果在编译过程中发现有软件包的路径出了问题,那么就要在这个过程去debug。很有可能是生产pkgConfig.cmake时的参数不对。最终可能是依赖包中的软件包路径问题(有挺多的ros软件包都是把路径写死的,这样很不好)。

      由catkin_package生成的文件最终会被安装到devel和build文件夹下。下面就具体看一下生成了哪些文件。
      下面是一个一般的devel的文件结构。devel是develop的缩写,所以这就是开发环境。
      0_1492221561279_Screenshot from 2017-04-15 09-59-11.png
      bin内是被编译的可执行文件。lib是pkg.pc文件和python的库文件。pkg.pc是pkg-config的配置文件(关于pkg-config可以看另外一篇帖子)。 include用来放置头文件。 share是放置生成的pkgConfig.cmake文件的,在cmake文件中find_package就会用到这些文件。下面是其中的一个例子。
      0_1492221851390_Screenshot from 2017-04-15 10-04-03.png
      对于build文件夹,生成是一些编译中的中间文件,比如用来存储一些环境变量之类的文件。这个文件夹意义不大。
      如果你在编译过程中出现问题可以去看build文件夹中各种文件内部的参数,可以方便的定位到可能出现问题的位置。

      总结一下整个编译的过程

      1. 执行catkin_make
      2. 执行catkin_workspace。解析catkin_make的参数同时遍历整个工作空间把所有的有package.xml的文件夹添加进软件包列表里面。对每个软件包执行add_subdirectory
      3. 执行每个软件包内部的CMakeList.txt文件。
      4. 执行 catkin_package。解析package.xml文件,载入对应的参数。根据依赖参数,载入对应的软件包参数。根据载入参数生成当前软件包的配置文件。
      posted in 技术交流
      weijiz
      weijiz
    • RE: 串口驱动相关

      @acane 需要设置系统的udev规则,具体的可以在论坛里面搜索

      posted in 技术交流
      weijiz
      weijiz
    • 解决rosdep init ERROR: cannot download default sources list 问题

      如果你在执行 rosdep init 过程中出现以下错误

      ERROR: cannot download default sources list from:
      https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
      Website may be down.
      

      这是由于raw.githubusercontent.com被墙,程序无法下载相应的文件导致的。解决方法就是使得raw.githubusercontent.com能够被正常访问。这个网站被墙的方式是dns污染,所以我们只要能够找到这个网站的正确ip就可以了。

      下面是一组hosts记录

      192.30.253.118 gist.github.com
      185.199.110.153 github.io
      
      151.101.113.194 github.global.ssl.fastly.net
      52.216.227.168 github-cloud.s3.amazonaws.com
      52.74.223.119 github.com
      
      199.232.28.133 avatars1.githubusercontent.com
      199.232.28.133 avatars2.githubusercontent.com
      199.232.28.133 avatars0.githubusercontent.com
      199.232.28.133 avatars3.githubusercontent.com
      199.232.28.133 raw.githubusercontent.com
      199.232.28.133 user-images.githubusercontent.com
      199.232.28.133 avatars.githubusercontent.com
      199.232.28.133 github.map.fastly.net
      199.232.28.133 avatars7.githubusercontent.com
      
      # Amazon AWS Start
      54.239.31.69	aws.amazon.com
      54.239.30.25	console.aws.amazon.com
      54.239.96.90	ap-northeast-1.console.aws.amazon.com
      54.240.226.81	ap-southeast-1.console.aws.amazon.com
      54.240.193.125	ap-southeast-2.console.aws.amazon.com
      54.239.54.102	eu-central-1.console.aws.amazon.com
      177.72.244.194	sa-east-1.console.aws.amazon.com
      176.32.114.59	eu-west-1.console.aws.amazon.com
      54.239.31.128	us-west-1.console.aws.amazon.com
      54.240.254.230	us-west-2.console.aws.amazon.com
      54.239.38.102	s3-console-us-standard.console.aws.amazon.com
      54.231.49.3	s3.amazonaws.com
      52.219.0.4	s3-ap-northeast-1.amazonaws.com
      54.231.242.170	s3-ap-southeast-1.amazonaws.com
      54.231.251.21	s3-ap-southeast-2.amazonaws.com
      54.231.193.37	s3-eu-central-1.amazonaws.com
      52.218.16.140	s3-eu-west-1.amazonaws.com
      52.92.72.2	s3-sa-east-1.amazonaws.com
      54.231.236.6	s3-us-west-1.amazonaws.com
      54.231.168.160	s3-us-west-2.amazonaws.com
      52.216.80.48	github-cloud.s3.amazonaws.com
      54.231.40.3	github-com.s3.amazonaws.com
      52.216.20.171	github-production-release-asset-2e65be.s3.amazonaws.com
      52.216.228.168	github-production-user-asset-6210df.s3.amazonaws.com
      

      添加到自己电脑的hosts文件里面,文件路径为/etc/hosts

      此时再次执行 rosdep init
      还是可能会失败,多试几次总会下载成功的。

      posted in 技术交流
      weijiz
      weijiz
    • RE: 超声波模块按照教程设置UDEV规则,启动超声波节点失败

      @孙超越a catkin_make 换成 catkin_make -DCATKIN_WHITELIST_PACKAGES="bw_sensors"试试

      posted in 技术交流
      weijiz
      weijiz
    • 使用wstool管理小强的工作空间

      wstool是一个ros中用于管理工作空间的工具。ws就是workspace的缩写。
      wstool通过rosinstall文件记录工作空间的软件信息。小强相关的rosinstall文件被整理在xiaoqiang-rosinstall软件源中。使用起来十分方便。

      下面是xiaoqiang-rosinstall软件源的使用说明。

      ROS Installs

      此软件源包含了小强相关的rosinstall文件。方便用户通过wstool工具对自己的工作空间进行管理。比如软件的更新,恢复出厂软件设置等等。

      文件说明

      文件 说明
      xq4-pro.rosintall 小强XQ4 Pro 工作空间文件
      mini.rosinstall 小强 mini 工作空间文件
      xq5.rosinstall 小强 XQ5 工作空间文件

      如何使用

      创建工作空间

      mkdir -p catkin_ws/src
      cd catkin_ws/src
      wstool init
      

      如上操作会在 catkin_ws/src 文件夹内创建一个.rosinstall文件。这个文件是wstool工具用来记录工作空间的软件信息的文件。catkin_ws为示例的工作空间路径。

      添加rosintall文件

      cd ~/Documents
      git clone https://github.com/bluewhalerobot/xiaoqiang-rosinstall.git
      cd catkin_ws/src
      # 此处以xiaoqiang xq4 pro 的工作空间为例。请根据你的版本选择不同的rosinstall文件
      wstool merge ~/Documents/xiaoqiang-rosinstall/xq4-pro.rosinstall
      

      以上操作会将对应的rosintall文件内容添加到本地工作空间的rosinstall文件中。
      添加rosinstall只需要第一次执行。如果已经添加过了,之后就不需要再添加了。

      更新软件

      wstool status
      wstool update
      

      如果有更新失败的软件包,说明本地文件发生了更改。如果想要获取到原版的小强程序可以直接把本地软件包删除。然后再次运行 wstool update。

      查看自己修改过哪些文件

      wstool status
      

      此指令会列出小强工作空间中左右被修改的文件。

      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
    • GPS在ROS中的测试和使用

      通过GPS机器人可以获取定位信息。ROS中也提供了GPS的相关驱动包,可以方便的使用GPS的定位信息。下面以蓝鲸GPS模块为例演示如何在ROS中使用GPS传感器。其他的可以通过串口指令发布nmea语句的GPS模块都是通用的。

      蓝鲸GPS模块采用AGPS定位方式,即GPS加手机基站的定位方式。相对于一般的GPS模块具有定位更加迅速和准确的优点。可以在官方淘宝店咨询购买。

      首先在机器人上安装对应的软件包

      安装gpsd

      sudo apt-get install gpsd gpsd-clients
      

      设置模块udev规则

      在机器人上运行

      dmesg --follow
      

      将GPS模块的串口插入机器人USB接口,可以看到终端输出了串口的信息

      [  434.206803] ftdi_sio 2-7.2:1.0: FTDI USB Serial Device converter detected
      [  434.206868] usb 2-7.2: Detected FT232BM
      [  434.207105] usb 2-7.2: FTDI USB Serial Device converter now attached to ttyUSB0
      

      记住 2-7.2:1.0这个端口号
      在/etc/udev/rules.d/95-persistent-serial.rules文件中添加下面的内容。如果没有这个文件就自己创建一个

      KERNELS=="2-7.2:1.0"         ,SYMLINK+="ttyUSB005", SYMLINK+="bwgps", OWNER="xiaoqiang" ,RUN+="/bin/setserial /dev/ttyUSB005 low_latency"
      

      其中KERNELS之后未刚才的端口号。OWNER设置未自己的用户。修改完成后保存退出,然后执行

      sudo udevadm control --reload
      

      执行完成之后重新插入GPS模块串口,然后就可以在/dev文件夹内看到bwgps和ttyUSB005两个文件。这样就说明之前的修改已经生效了。

      测试GPS数据

      给模块通电,并插好串口模块之后可以开始测试模块是否能够正常输出GPS数据。

      # 根据自己串口号和波特率设置
      screen /dev/bwgps 115200
      

      正常应该可以看到下面的输出。这样就说明GPS模块已经可以正常工作了。

      ff8ba1a5-783b-452c-a72c-4fa5e4bdec29-image.png

      执行下面的指令停止screen指令

      sudo killall screen
      

      设置 gpsd

      # 设置串口波特率,蓝鲸GPS模块的波特率是115200,对于不同的模块根据模块参数设置。
      sudo stty -F /dev/bwgps 115200
      # 启动gpsd
      gpsd -D 5 -n -N -b /dev/bwgps
      

      然后执行

      xgps
      

      4e6d7336-d82e-40a4-98d3-41d93a4ef0a6-image.png

      在空旷地方应该能够看到模块已经追踪的卫星。

      在ROS中使用gps数据

      在ROS中可以使用nmea_navsat_driver解析GPS数据。这个包会发出下面几个话题

      话题 类型 简介
      /fix sensor_msgs/NavSatFix GPS定位信息
      /extend_fix gps_common/GPSFix GPSFix消息包含GPS卫星状态和定位信息
      /time_reference sensor_msgs/TimeReference GPS时间信息
      /vel geometry_msgs/TwistStamped GPS的速度信息

      可以根据自己需求订阅相关信息

      安装

      首先下载安装这个包

      cd [到你的工作空间]/src
      git clone https://github.com/BluewhaleRobot/nmea_navsat_driver
      cd ..
      catkin_make -DCATKIN_WHITELIST_PACKAGES="nmea_navsat_driver"
      

      修改launch文件,蓝鲸GPS模块用户可以不用修改直接使用。

      <launch>
      
        <!-- A simple launch file for the nmea_serial_driver node. -->
      
        <arg name="port" default="/dev/bwgps" />
        <arg name="baud" default="115200" />
        <arg name="frame_id" default="gps" />
        <arg name="time_ref_source" default="gps" />
        <arg name="useRMC" default="false" />
      
        <node name="nmea_serial_driver_node" pkg="nmea_navsat_driver" type="nmea_serial_driver" output="screen">
          <param name="port" value="$(arg port)"/>
          <param name="baud" value="$(arg baud)" />
          <param name="frame_id" value="$(arg frame_id)" />
          <param name="time_ref_source" value="$(arg time_ref_source)" />
          <param name="useRMC" value="$(arg useRMC)" />
        </node>
      </launch>
      

      各个参数的含义都十分明确,根据自己的设备参数进行修改就可以了。

      运行测试

      roslaunch nmea_navsat_driver nmea_serial_driver.launch
      

      正常情况下就可以通过各个topic订阅信息了。注意如果之前运行了gpsd要先把gpsd关闭。

      ad78bd5b-a8a9-45fd-8eb0-9b1a25886f82-image.png

      左侧是extend_fix话题数据。可以通过satellite_visible_prn看到已经看到的卫星编号。注意在开阔环境下才会有比较好的定位效果。

      posted in ROS教程
      weijiz
      weijiz

    Latest posts made by weijiz

    • RE: 开机黑屏怎么办

      @123 什么设备

      posted in 技术交流
      weijiz
      weijiz
    • lio_sam和ndt导航精度差别的原因

      实际跑bag时发现,同样的地图同样的数据,参数调整好之后ndt导航的精度要比lio_sam的高。在机器人静止时,lio_sam大概有最大2厘米左右的定位波动。但是ndt可以做到2个毫米的定位波动。误差来自于雷达匹配误差上。

      由于lio_sam是scan 到 map的匹配,而map本身可能存在误差,地图的真实点在地图点云上表现可能是一个点云分布。lio_sam匹配时按照最近点去找很有可能找到不是真实值。由于寻找匹配的随机性这样就定位就存在波动。比如实际是一个平整的墙面,但是建图后的点云很可能是有一定厚度的点云分布,这样匹配就存在这个厚度的误差。

      ndt就不存在这个问题,它按照最大概率去匹配。很好的去掉了这个误差带来的随机影响。

      posted in 激光雷达
      weijiz
      weijiz
    • raid 更换硬盘后 Ubuntu系统无法进入的解决方法

      服务器是Ubuntu系统,安装在Intel的raid 10上。最近一个硬盘有坏道,尝试更换硬盘。首先在Ubuntu中下线有坏道的硬盘。然后关机安装上硬盘后显示如下画面

      e150b855-dcc6-4aba-b730-d0c32a688076-微信图片_20250108144154.jpg

      然后重启之后再也无法进入系统。尝试吧老硬盘换上去仍然没有效果。显示老硬盘状态为offline。
      再次插入新硬盘状态变成degraded。

      经过各种搜索尝试最终找到原因。主板自带的raid 10 不是完整raid。其必须要在操作系统的协助下才能完成raid的功能。正常情况下如果服务器系统是windows,那么应该可以直接启动进入系统开始raid rebuild。板载的raid是intel的rst,但是这个功能不支持Linux。详细的可以参考 https://zhuanlan.zhihu.com/p/106623640。

      我们采用的方法是在一块独立的硬盘上安装一个Windows Server 2016,然后装上对应版本的intel rst,注意版本一定要对应,可以根据主板信息到主板官网上去找。硬盘装上新盘。如果一切正常打开intel rst程序就能看到raid在rebuild。rst默认安装位置在 C:\Program Files (x86)\Intel\Intel(R) Rapid Storage Technology enterprise\IAStorUI.exe 。

      b66e05b5-fe3b-4681-ba4e-010eddee4076-rst.png

      如此等待重建完成就可以了。

      posted in 技术交流
      weijiz
      weijiz
    • 二维码摄像头和里程计的时间戳同步

      假设里程计时间戳和二维码摄像头的时间戳都是准确的(或者和真实时间都差了一个相同的固定值),那么同一时刻通过里程计计算的机器人移动的相对位姿应该和通过二维码计算的相对位资完全一样。因为两个传感器数据同一时刻对应的是同一个机器人位置。

      对于时间戳其真实值实际上对我们没有多大意义,更有意义的是不同传感器之间时间戳的偏差。通过这种方式我们可以用来校准这两个传感器的时间戳。我们可以以一个传感器的时间戳作为基准,其他传感器的时间戳对其到这个时间戳上。里程计时间戳就是一个很好的基准。

      我们控制机器人下方扫码摄像头在机器人正中央,保证机器人在原地旋转时二维码始终在自己的摄像头范围中央。同时录制摄像头和里程计数据。通过里程计数据可以计算出一个相对于初始位置的相对位姿,通过二维码数据也可以计算出一个相对位姿。机器人以固定速度原地旋转。很容易计算出这两个位姿的差就是 delta_theta = delta_t * w, 其中delta_t就是两个传感器的时间戳差别,w是机器人旋转的角速度。如果时间戳的差距是固定的,那么就应该有这个角度差也是固定的。

      通过实验我计算出 角度差均值是 -0.09949351795361913, 标准差是 0.014604546858801595
      可以看到这两个传感器的时间戳基本上确实是一个定值。机器人角速度为2rad/s,则计算出时间戳大概差50ms。把这个偏差加入到计算中相关精度有了明显的提升。

      posted in 技术交流
      weijiz
      weijiz
    • RE: 雷达数据的运动校准和里程计时间同步

      @weijiz 还有一点,如果不进行运动校准,直接在odom坐标系下看scan数据,你会发现之前存在的运动校准误差消失了。这是因为rviz在odom下显示scan数据的时候不是按照整体显示的,它会计算每个点的时间戳去显示。相当于完成了运动校准。所以如果你的运动校准计算正确,那么你的计算数据在odom下就应该和rviz的原始数据重合。

      posted in 激光雷达
      weijiz
      weijiz
    • 雷达数据的运动校准和里程计时间同步

      雷达固定在机器人上,当机器人运动时由于LaserScan每个beam存在时间差就会产生运动误差。同时如果里程计和雷达本身存在时间差,也会造成扫描误差。不过这两个误差的表现形式有所区别。

      首先是雷达的运动误差。如果在rviz中laser坐标系下看雷达数据。当机器人在原地快速旋转时,会发现雷达的x轴左右两边的数据是明显不一致的。如下图所示

      933d0dee-ff78-43e5-8230-5aa2317dd3d0-image.png

      右前方基本是两条平行线,当这个部分运动到雷达正前方时会发生形变

      e45b0e6f-b793-4be2-bc0e-211e139ade16-image.png

      两条直线不再平行。这是由于x轴两边的数据正好对应差了一个scan time。雷达产生的相对移动是最大的。

      通过计算实际时间差可以把这个修正回来。

      d4ee2e76-a8d9-444b-bd20-469ef8ab22a4-image.png
      图中红色就是修正后的数据。

      另一个主要的误差来自odom和scan的时间戳不同步。它会造成的误差表现是如果机器人在原地匀速旋转那么雷达数据和里程计当前对应的雷达数据就会差一个固定角度。如下图所示。

      7f115011-9515-4384-86b8-d20c2241a2ed-image.png

      其中绿色是真值红色是测量值。同时这个角度也很容易算出是delta_t * w, 其中delta_t是时间戳差值,w是旋转角速度。

      所以我们很容易通过现象去判断是否存在此误差。如果机器人原地旋转时在rviz中,odom坐标系下,你发现雷达数据随着角速度的不同有明显的整体的角度变化。那就说明存在一个雷达和里程计的时间戳是不同步的,有可能某个传感器的时间戳不准。

      posted in 激光雷达
      weijiz
      weijiz
    • RE: 小强ROS机器人教程(27)___bw_auto_dock自动充电功能包的使用和实现原理

      @xiaowei 没有就对应安装上 sudo apt install libboost-filesystem-dev

      posted in 产品服务
      weijiz
      weijiz
    • RE: 小强ROS机器人教程(27)___bw_auto_dock自动充电功能包的使用和实现原理

      @xiaowei 你的系统什么版本 默认boost应该是1.71.0的

      posted in 产品服务
      weijiz
      weijiz
    • RE: 小强ROS机器人教程(27)___bw_auto_dock自动充电功能包的使用和实现原理

      @xiaowei 执行上面的指令

      git clone http://git.bwbot.org/publish/bw_auto_dock.git
      cd bw_auto_dock
      git checkout noetic-version2
      

      如果不明白先学习一下git指令的使用

      posted in 产品服务
      weijiz
      weijiz
    • RE: 小强ROS机器人教程(27)___bw_auto_dock自动充电功能包的使用和实现原理

      @xiaowei 你切换到了noetic-version2 版本了吗 从代码看应该是没有

      posted in 产品服务
      weijiz
      weijiz