导航

    蓝鲸ROS机器人论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 热门
    1. 主页
    2. weijiz
    3. 帖子
    ROS交流群
    ROS Group
    产品服务
    Product Service
    开源代码库
    Github
    官网
    Official website
    技术交流
    Technological exchanges
    激光雷达
    LIDAR
    ROS教程
    ROS Tourials
    深度学习
    Deep Learning
    机器视觉
    Computer Vision
    • 资料
    • 关注 0
    • 粉丝 11
    • 主题 248
    • 帖子 705
    • 最佳 11
    • 群组 1

    weijiz 发布的帖子

    • RE: 在小强中使用语音识别和语音合成

      @robot0612 这个错误可以忽略,继续进行

      发布在 产品服务
      weijiz
      weijiz
    • RE: hikey 970 debian 镜像(有opencl 和 tensorflow)

      @SprayHank nvme我没有测试过,可能内核没有开启对应的驱动模块。Tensorflow不需要从源码编译,这个镜像已经有编译好的版本。

      发布在 技术交流
      weijiz
      weijiz
    • RE: 使用python代码启动launch文件

      @几何木偶 因为没有join方法,所以程序出错后退出了。tracking_launch.start()是不阻塞的,需要自己阻塞主线程。比如

      import roslaunch
      import rospy
      import time
      
      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()
      while not rospy.is_shutdown():
          time.sleep(1)
      
      发布在 技术交流
      weijiz
      weijiz
    • RE: 使用python代码启动launch文件

      @几何木偶 你的代码是什么样的

      发布在 技术交流
      weijiz
      weijiz
    • 校正kinect tf 关系

      在教程10使用kinect避障过程中,我们可能会遇到kinect前端显示有障碍物而实际上没有的情况。这可能是由于kinect的tf关系和默认值差别太大的原因。导致kinect没有正确的识别水平面而把地面当作了障碍物。我们可以重新对kinect tf关系进行校准修复这个问题。

      首先启动服务

      sudo service startup start
      

      将Kinect放置于空旷的地方,保证kinect前面2m范围内没有障碍物。然后启动kinect驱动程序

      roslaunch freenect_launch freenect-xyz.launch
      

      设置kinect角度

      rostopic pub /set_tilt_degree std_msgs/Int16 '{data: -19}' -1
      

      运行校正程序

      rosrun nav_test kinect2base.py
      

      等待程序运行完成,会有如下输出

      
      FINAL R: [[ 0.         -0.34659864  0.93801353]
       [-1.          0.          0.        ]
       [ 0.         -0.93801353 -0.34659864]]
      

      这个R是经过校正的kinect的tf旋转矩阵。把这个值设置到 /home/xiaoqiang/Documents/ros/src/image_pipeline/depth_image_proc/occupancy_xyz.yaml文件中的 transform rotation matrix。

      这样就可以了。

      发布在 产品服务
      weijiz
      weijiz
    • 如何在Windows上使用roscpp

      原理说明

      基本想法就是把roscpp库编译成dll或者lib的形式,然后项目通过引用对应的链接库文件使用roscpp的功能。
      roscpp的代码本身是支持在Windows平台编译的。但是这个库依赖于其他很多ros库。有些库不支持在Windows平台上编译,有些库在Windows平台上编译非常麻烦。所以我们要对相关文件进行修改,删除不必要的依赖就可以编译了。下面是具体的编译方法。

      如果你不想自己编译相关的库,想要直接使用,那么可以跳到最后,看创建项目使用roscpp的内容。

      安装boost

      下载boost库源代码 下载链接
      注意版本,版本应该是越新越好。我使用的是1.66版本。

      解压后以管理员身份开启一个powershell窗口,cd到boost源代码目录。然后执行下面指令

      .\bootstrap.bat
      .\b2.exe variant=release threading=multi threadapi=win32 link=static runtime-link=shared --prefix=C:\boost address-model=64 architecture=x86 install -j8
      .\b2.exe variant=debug threading=multi threadapi=win32 link=static runtime-link=shared --prefix=C:\boost address-model=64 architecture=x86 install -j8
      

      这样程序会在C:/boost文件夹内安装boost库

      安装CMake

      下载相关安装包 下载地址

      安装完成即可,注意cmake的路径也要添加到系统环境变量里面。

      安装catkin_pkg

      如果系统没有安装Python2.7需要先安装Python2.7。并且设置好环境变量把python添加到Path里面去

      以管理员权限打开一个powershell窗口,然后执行下面的指令

      pip install catkin_pkg
      

      准备ros工作空间

      创建一个文件夹名称随意,这里取为catkin_ws,作为caktin的工作空间。
      执行下面指令下载相关源代码

      cd [到你的工作空间]
      mkdir src
      cd src
      git clone https://github.com/ros/catkin
      git clone https://github.com/ros/gencpp
      git clone https://github.com/jsk-ros-pkg/geneus
      git clone https://github.com/ros/genlisp
      git clone https://github.com/ros/genmsg
      git clone https://github.com/RethinkRobotics-opensource/gennodejs
      git clone https://github.com/ros/genpy
      git clone https://github.com/ros/message_generation
      git clone https://github.com/ros/message_runtime
      git clone https://github.com/BluewhaleRobot/rosconsole
      git clone https://github.com/BluewhaleRobot/roscpp_core
      git clone https://github.com/BluewhaleRobot/ros_comm
      git clone https://github.com/ros/ros_comm_msgs
      git clone https://github.com/ros/std_msgs
      

      编译安装

      cd [到你的工作空间]
      python .\src\catkin\bin\catkin_make
      # 此时会提示错误,但是没有关系。这个程序会帮我们创建很多相关文件
      cd build
      # 把build文件夹内容删除后执行下面的指令
      cmake E:\workspace\catkin_ws\src -DCATKIN_DEVEL_PREFIX=E:\workspace\catkin_ws\devel -DCMAKE_INSTALL_PREFIX=E:\workspace\catkin_ws\install -G "Visual Studio 15 2017 Win64" -DCATKIN_ENABLE_TESTING=OFF -DBoost_USE_STATIC_LIBS=ON -DCMAKE_BUILD_TYPE=Debug -DBUILD_SHARED_LIBS=OFF
      # 其中的E:\workspace\catkin_ws\src是我的工作空间相关路径,你要换成自己的对应路径。Visual Studio 15 2017 Win64 为Visual Studio的版本信息,根据自己的Visual Studio版本进行设置。这个指令可以没有错误正常执行。
      

      正常应该会有下面这样的输出

      ...
      -- ==> add_subdirectory(ros_comm/clients/roscpp)
      -- Using these message generators: gencpp;geneus;genlisp;gennodejs;genpy
      -- Boost version: 1.66.0
      -- Found the following Boost libraries:
      --   chrono
      --   filesystem
      --   signals
      --   system
      -- roscpp: 1 messages, 3 services
      -- Configuring done
      -- Generating done
      -- Build files have been written to: E:/workspace/catkin_ws/build
      

      然后我们就可以开始编译了。还是在build文件夹内,执行下面的指令。等待编译完成就可以了。

      cmake --build . --config Debug --target INSTALL
      

      编译完成后,我们可以在工作空间的install 文件夹内找到我们需要的文件。

      e1bfef77-4000-45d0-ac05-51af1c956da1-image.png

      其中我们要用到的是include文件夹内的内容和lib文件夹的内容。上面的编译方式是生成静态链接库,在windows上对应.lib文件。我们把生成的头文件和静态链接库文件添加到自己的项目依赖里面就可以使用roscpp了。

      创建项目使用roscpp库

      c552797d-6c00-4bc3-8121-a5cd20b4d511-image.png

      在Visual Studio中创建一个新的Windows控制台程序,命名为roscppExample

      进入到项目目录然后创建一个include文件夹和lib文件夹

      50450419-632b-4354-bbee-fdb84f21f0bf-image.png

      把boost的头文件内容和caktin工作空间install里面的头文件内容复制进去
      复制完成后的include文件夹内容如下所示

      1a3edd10-2b33-40d2-9f1b-4cc54b0ca993-image.png

      然后从boost/lib文件夹内复制一下的几个文件到刚才创建的lib文件夹

      libboost_filesystem-vc141-mt-gd-x64-1_66.lib
      libboost_filesystem-vc141-mt-x64-1_66.lib
      libboost_chrono-vc141-mt-gd-x64-1_66.lib
      libboost_chrono-vc141-mt-x64-1_66.lib
      libboost_date_time-vc141-mt-gd-x64-1_66.lib
      libboost_date_time-vc141-mt-x64-1_66.lib
      libboost_system-vc141-mt-gd-x64-1_66.lib
      libboost_system-vc141-mt-x64-1_66.lib
      libboost_thread-vc141-mt-gd-x64-1_66.lib
      libboost_thread-vc141-mt-x64-1_66.lib
      libboost_regex-vc141-mt-gd-x64-1_66.lib
      libboost_regex-vc141-mt-x64-1_66.lib
      

      然后把caktin工作空间install/lib文件夹内的几个.lib文件复制到之前创建的lib文件夹中
      现在的lib文件夹如下图所示

      86f781f1-a356-4217-9f46-0d8da2ac28e7-image.png

      注意上面的库编译的是64位Debug版本。如果需要Release版本对上面cmake的参数进行调整。
      设置Visual Studio项目位64 Debug版。

      打开项目属性,设置VC++目录

      d47a550a-c94b-4228-8aad-1acaa0bd5351-image.png

      在包含目录里面添加刚才创建的include目录

      5d25965a-d0af-4b2a-b062-4348513a91b0-image.png

      同理在库目录里面添加刚才创建的lib文件夹。现在的项目路径如下图所示

      c6e03adb-f98a-48d2-9576-2a106820cf91-image.png

      打开链接器输入,附加依赖项。添加上lib中文件的文件名

      libboost_filesystem-vc141-mt-x64-1_66.lib
      libboost_chrono-vc141-mt-x64-1_66.lib
      libboost_date_time-vc141-mt-x64-1_66.lib
      libboost_system-vc141-mt-x64-1_66.lib
      libboost_thread-vc141-mt-x64-1_66.lib
      libboost_regex-vc141-mt-x64-1_66.lib
      roscpp.lib
      roscpp_serialization.lib
      cpp_common.lib
      rosconsole.lib
      rosconsole_backend_interface.lib
      rosconsole_print.lib
      rostime.lib
      xmlrpcpp.lib
      

      aabffcc7-8a94-4ae6-8b88-96f1c1373811-image.png

      现在就可以在程序中使用roscpp了。下面是一个简单的发消息的cpp程序。

      #include "stdafx.h"
      #define WIN32
      #include "ros/ros.h"
      #include "std_msgs/String.h"
      #pragma comment(lib, "Ws2_32.lib")
      
      int main(int argc, char **argv)
      {
      	std::map<std::string, std::string> params;
      	params.insert(std::pair<std::string, std::string>("__master", "http://192.168.0.32:11311"));
      	params.insert(std::pair<std::string, std::string>("__ip", "192.168.0.8"));
      	ros::init(params, "talker");
      	ros::NodeHandle n;
      	ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
      	ros::Rate loop_rate(10);
      	int count = 0;
      	while (ros::ok())
      	{
      		std_msgs::String msg;
      		std::stringstream ss;
      		ss << "hello world " << count;
      		msg.data = ss.str();
      		std::cout << "send message: hello world" << std::endl;
      		chatter_pub.publish(msg);
      		ros::spinOnce();
      		loop_rate.sleep();
      		++count;
      	}
      	return 0;
      }
      

      编译完成就可以执行了。

      按F5看一下运行效果

      82a084bd-4d61-4d9c-8409-d749d0b66e92-image.png

      此时订阅/chatter可以看到输入

      b19ff302-44a2-4e9c-b6ec-b4ac1ad02f97-image.png

      这个roscppExample项目已经上传至Github。下载完成后用Visual Studio 2017可以直接打开编译运行,不需要安装其他依赖。如果想要在自己的其他项目里面使用roscpp可以把这个项目include和lib对应的添加到自己项目里。

      发布在 技术交流
      weijiz
      weijiz
    • 在Windows上cmake无法正确找到boost库模块的问题

      在我们安装完boost库之后。如果有其他程序通过cmake引用boost库的时候。很有可能出现boost库已经找到,但是对应的模块无法载入。这个问题在于boost的编译版本有很多,比如32位,64位,Debug版或Release版。不同的编译版本生成的链接库文件的名字是不一样的。cmake程序要根据系统的情况和编译配置去猜测文件名。如果猜对了就可以找到,但是也有猜错的情况。这时候就需要进行配置才能找到对应的库文件。

      CMake Error at C:/Program Files/CMake 2.8/share/cmake-2.8/Modules/FindBoost.cmake:1106     (message):
      Unable to find the requested Boost libraries.
      
      Boost version: 1.54.0
      
      Boost include path: D:/boost_1_54_0
      
      The following Boost libraries could not be found:
      
            boost_thread
            boost_system
            boost_log
            boost_log_setup
            boost_program_options
      
      No Boost libraries were found.  You may need to set BOOST_LIBRARYDIR to the
      directory containing Boost libraries or BOOST_ROOT to the location of Boost.
      Call Stack (most recent call first):
      CMakeLists.txt:20 (find_package)
      

      在cmake的安装路径里找到下面的文件
      CMake\share\cmake-3.13\Modules\FindBoost.cmake

      这个文件有在开头有很多注释,里面有很多参数。通过配置这些参数可以帮助cmake找到对应的库文件。
      下面是比较关键的几个参数

      set(Boost_DEBUG ON) #是否开启Boost Debug模式,ON位开启,OFF关闭。开启之后会输出很多调试信息,方便寻找错误
      set(Boost_ARCHITECTURE "-x32") # CPU架构,对应库文件文件名里的x32或者x64
      set(Boost_THREADAPI "win32") # 线程类型,对应thread模块文件名里面的pthread或者win32
      

      只要其猜测的文件名和实际文件名能够对应上库的引用就没有问题。你可以把这几个参数设置在自己项目的CMakeLists.txt文件中

      发布在 技术交流
      weijiz
      weijiz
    • 在Windows上编译安装boost库

      boost是一个C++的库,用途很广。

      下载源码

      从sourceforge上下载源码

      编译安装

      下载后解压进入源码目录
      打开一个命令行程序,cd 到源码目录。注意要以管理员权限执行。

      9fffdc6f-7c48-4d80-9faf-d9ab9b6d9e9d-image.png

      执行 .\bootstrap.bat 文件,输出入下图(注意要下载新版本的,老版本的执行会出错)

      0a82a175-108a-464a-8f5f-cb679828014d-image.png

      根据提示执行b2.exe程序。根据我们不同的需求可以给b2.exe增加很多参数。下面是常用的几个参数

      安装参数

      toolset 编译器类别,可以是gcc,或者是msvc
      target-os 目标操作系统,可以是Windows,Linux
      variant 生成类型,可以是 debug或者release
      threadapi 线程API的实现,可以是win32或者pthread,在windows上编译就用win32
      link 链接库类型,可以是静态的,也可以是shared,对应windows上的库就是.lib或者是dll
      prefix 安装路径
      user-config 用户自定义配置文件,在cross compile的时候可以用来配置编译工具链
      address-model 生成32位还是64位库文件
      architecture=x86  cpu架构,一般台式机位x86,嵌入式平台位arm
      

      比如我们想要在windows上编译安装64位的Release版的静态链接库到C:\boost路径下就可以执行下面的指令

      .\b2.exe variant=release threading=multi threadapi=win32 link=static runtime-link=shared --prefix=C:\boost address-model=64 architecture=x86 install -j8
      

      最后我们加了-j8参数。这个代表8线程同时编译,可以提高编译安装的速度。

      如果我们想要安装Mingw-w64版本的boost就可以用下面的指令

      .\b2.exe toolset=gcc variant=release threading=multi threadapi=win32 link=static runtime-link=shared --prefix=C:\boost address-model=64 architecture=x86 install -j8
      

      当然前提是已经安装了mingw-w64程序。

      编译完成后可以在C:\boost文件夹内看到include和lib文件夹。这里就是编译好的boost文件。

      发布在 技术交流
      weijiz
      weijiz
    • RE: The /scan observation buffer has not been updated的问题

      @kkk123 在 The /scan observation buffer has not been updated的问题 中说:

      cc_fake_move_base_blank_map

      你可以订阅一下/scan看看实际的频率是多少。消息有没有被message filter过滤。

      发布在 技术交流
      weijiz
      weijiz
    • RE: new question

      @xiaoxutongxie 已经更新了

      发布在 技术交流
      weijiz
      weijiz
    • RE: 小强ROS机器人教程(22)_操作6自由度机械臂

      @kadian 没有

      发布在 产品服务
      weijiz
      weijiz
    • RE: new question

      @xiaoxutongxie 先等待mini发布更新

      发布在 技术交流
      weijiz
      weijiz
    • RE: 罕见bug解决办法: kienct 1代运行错误Failed to claim camera interface: LIBUSB_ERROR_NOT_FOUND

      @王雷 kinect没有识别。从错误信息看可能是硬件问题。你可以先在自己的电脑上试试能不能正常使用。

      发布在 技术交流
      weijiz
      weijiz
    • RE: 教程20里面出现的问题

      @xiaoxutongxie 可以按Print Screen 按钮

      发布在 技术交流
      weijiz
      weijiz
    • RE: 小强ROS机器人教程(22)_操作6自由度机械臂

      @kadian 有一个系统自带的包会干扰程序,需要把它卸载掉。

       sudo apt-get remove fwupd
      
      发布在 产品服务
      weijiz
      weijiz
    • RE: 罕见bug解决办法: kienct 1代运行错误Failed to claim camera interface: LIBUSB_ERROR_NOT_FOUND

      @王雷 可以在开机后运行 dmesg --follow 再插入看看有什么提示信息。
      插入后运行 lsusb 看看设备列表里面是不是有kinect。

      发布在 技术交流
      weijiz
      weijiz
    • RE: 小强ROS机器人教程(22)_操作6自由度机械臂

      @kadian 这篇文章内用到的软件包可以在这里下载

      发布在 产品服务
      weijiz
      weijiz
    • RE: RVIZ可视化窗口中能给检测到目标添加一个立方体的框吗?

      @道灼 可以用 line list 类型。就是把点的坐标设置好,最后会生成点的连线图形。

      发布在 ROS教程
      weijiz
      weijiz
    • RE: 解决systemback 无法生成超过4G的iso的问题

      @ldh 这是另外一个问题,你的文件有超过4G的。这个是没办法的。总的iso大小可以超过4G但是里面的单个文件不能超过4G。

      发布在 技术交流
      weijiz
      weijiz
    • RE: 解决systemback 无法生成超过4G的iso的问题

      @ldh 上一级目录

      发布在 技术交流
      weijiz
      weijiz
    • 1
    • 2
    • 18
    • 19
    • 20
    • 21
    • 22
    • 35
    • 36
    • 20 / 36