【问题标题】:Getting my own ROS package on Gumstix overo (Bitbake yocto project)在 Gumstix overo 上获取我自己的 ROS 包(Bitbake yocto 项目)
【发布时间】:2014-08-22 11:16:02
【问题描述】:

我正在尝试让我自己的 ROS 包在 Gumstix Overo 上工作。该项目的最终目标是从 Caspa(相机)获取图像并使用 ROS 进行流式传输。为此,我在 Yocto 项目中取得了最大的成功:Pocky,它使用了 BitBake 交叉编译工具链。为此,我遵循了 GitHub 存储库中 README.md 中的说明:https://github.com/gumstix/Gumstix-YoctoProject-Repo

仅供参考,Gumstix 官方网站上的实际刷写和安装说明更清楚。

我使用以下命令成功编译了包含所有 ROS 元数据和附加内容的 BitBake 项目:

$ bitbake gumstix-console-image 

(需要相当长的时间和大量的磁盘空间),然后是刷新和安装。

这是我试图编译的包:https://github.com/elikos/groundStationPublic 我试图保持文件夹尽可能简单以限制潜在的路径问题,所以一切都在基本目录中......(我知道非常丑陋)

这是我的 CMakelist.txt:

cmake_minimum_required(VERSION 2.8.3)
project(groundStationPublic)

## Find catkin and any catkin packages
find_package(catkin REQUIRED COMPONENTS cv_bridge image_transport roscpp rospy std_msgs genmsg)

find_package(OpenCV REQUIRED)

## Declare ROS messages and services
#add_message_files(FILES Num.msg)
#add_service_files(FILES AddTwoInts.srv)

## Generate added messages and services
#generate_messages(DEPENDENCIES std_msgs)

## Declare a catkin package
catkin_package()

include_directories(include ${catkin_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS})

add_executable(talker talker.cpp)
target_link_libraries(talker ${catkin_LIBRARIES})
#add_dependencies(talker beginner_tutorials_generate_messages_cpp)

add_executable(listener listener.cpp)
target_link_libraries(listener ${catkin_LIBRARIES})
#add_dependencies(listener beginner_tutorials_generate_messages_cpp)

add_executable(cornerDetection main.cpp ConerDetection.cpp LineDetection.cpp ImagePublisher.cpp)
target_link_libraries(cornerDetection ${catkin_LIBRARIES} ${OpenCV_LIBRARIES})

add_executable(bonPublisher bonPublisher.cpp)
target_link_libraries(bonPublisher ${catkin_LIBRARIES} ${OpenCV_LIBRARIES})

这是我的 BitBake 包装配方:

DESCRIPTION = "Elikos groundstation code."
SECTION = "devel"
LICENSE = "BSD"
LIC_FILES_CHKSUM = "file://package.xml;beginline=8;endline=8;md5=d566ef916e9dedc494f5f793a6690ba5"

DEPENDS = "roscpp rospy catkin std-msgs"
RDEPENDS_${PN} = "roscpp rospy std-msgs"

SRC_URI = "git://github.com/elikos/groundStationPublic.git"

SRCREV = "${AUTOREV}"
PV = "1.0.0+gitr${SRCPV}"

S = "${WORKDIR}/git"

inherit catkin

ROS_SPN = "groundStationPublic"

我已在~/yocto/poky/meta-ros/recipes-ros/groundStationPublic找到它

如果我执行命令bitbake groundStationPublic,一切编译正常。没有错误。 (你可能会从 x264_git 得到一个错误,但正确的 sourcerev 是:SRCREV = "ffc3ad4945da69f3caa2b40e4eed715a9a8d9526")

最后,我的问题是:

  • 我的包裹在图片中的位置?
    • 它不在 /usr/share/ 中,就像我期望的那样......
  • 如果 rosrun 找不到我的包,我该如何运行它? (可能是因为它根本不存在)
    • 我希望它类似于rosrun groundStationPublic talker

【问题讨论】:

    标签: ros recipe bitbake gumstix yocto


    【解决方案1】:

    嗯,终于找到了我自己的问题的答案:

    我必须像 ~/yocto/poky/meta-gumstix-extras/recipies-images/gumstix/gumstix-consol-image.bb 那样在图片中添加我的包裹:

    UTILITIES_INSTALL = " \
      [...]
      packagegroup-ros-comm \
      python-wstool \
      python-email \
      python-distutils \
      git \
      git-perltools \
      python-rosinstall \
      rospy-tutorials \
      roscpp-tutorials \
      groundStationPublic \
      [...]
    "
    

    并确保将 UTILITIES_INSTALL 添加到:

    IMAGE_INSTALL += " \
      [...]
      ${UTILITIES_INSTALL} \
      [...]
    "
    

    我还必须更改 CMakelist.txt 以明确告诉它安装目标的位置,所以这是新的 CMakelist.txt(注意最后几行的差异):

    cmake_minimum_required(VERSION 2.8.3)
    project(groundStationPublic)
    
    ## Find catkin and any catkin packages
    find_package(catkin REQUIRED COMPONENTS cv_bridge image_transport roscpp rospy std_msgs genmsg)
    
    find_package(OpenCV REQUIRED)
    
    ## Declare ROS messages and services
    #add_message_files(FILES Num.msg)
    #add_service_files(FILES AddTwoInts.srv)
    
    ## Generate added messages and services
    #generate_messages(DEPENDENCIES std_msgs)
    
    ## Declare a catkin package
    catkin_package()
    
    include_directories(include ${catkin_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS})
    
    add_executable(talker src/talker.cpp)
    target_link_libraries(talker ${catkin_LIBRARIES})
    #add_dependencies(talker beginner_tutorials_generate_messages_cpp)
    
    add_executable(listener src/listener.cpp)
    target_link_libraries(listener ${catkin_LIBRARIES})
    #add_dependencies(listener beginner_tutorials_generate_messages_cpp)
    
    add_executable(cornerDetection src/main.cpp src/ConerDetection.cpp src/LineDetection.cpp src/ImagePublisher.cpp)
    target_link_libraries(cornerDetection ${catkin_LIBRARIES} ${OpenCV_LIBRARIES})
    
    add_executable(bonPublisher src/bonPublisher.cpp)
    target_link_libraries(bonPublisher ${catkin_LIBRARIES} ${OpenCV_LIBRARIES})
    
    add_executable(exempleSubscriber src/exempleSubscriber.cpp)
    target_link_libraries(exempleSubscriber ${catkin_LIBRARIES} ${OpenCV_LIBRARIES})
    
    install(TARGETS talker listener cornerDetection bonPublisher exempleSubscriber
        ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
        LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
        RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
    )
    

    不幸的是,我目前遇到了无法从 caspa(来自 /dev/video6)读取图像的 opencv 问题...但这是另一个问题!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-24
      • 2013-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-09
      • 1970-01-01
      相关资源
      最近更新 更多