Получение собственного пакета ROS для Gumstix overo (проект Bitbake yocto)

Я пытаюсь заставить свой собственный пакет ROS работать на Gumstix Overo. Конечная цель проекта - получить изображение с камеры (Caspa) и транслировать его с помощью ROS. Для этого мне больше всего понравился проект Yocto: Pocky, в котором используется цепочка инструментов кросс-компиляции BitBake. Для этого я следовал инструкциям README.md в этом репозитории GitHub: https://github.com/gumstix/Gumstix-YoctoProject-Repo

К вашему сведению, инструкции по фактической перепрошивке и установке более понятны на официальном сайте Gumstix.

Мне удалось скомпилировать проект BitBake со всеми метаданными ROS и дополнительными функциями с помощью следующей команды:

$ 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

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}
)

К сожалению, в настоящее время у меня возникают проблемы с opencv, который не может прочитать изображение из каспы (из /dev/video6)... Но это еще одна проблема!

Другие вопросы по тегам