3

ファイルimage_transportと. _ ubuntu 16でROS Kinelticを使用していますが、ros indigoとjadeを使用してubuntu 14でも同じ問題が発生しました。CMakepackake.xml

私のCMakeファイルは次のとおりです。

find_package(catkin REQUIRED COMPONENTS
  cv_bridge
  image_transport
  roscpp
  rospy
  std_msgs
  message_generation
  genmsg
  )

generate_messages(
  DEPENDENCIES
  std_msgs
  )

catkin_package(
  CATKIN_DEPENDS  cv_bridge image_transport roscpp rospy std_msgs message_generation
  )
    include_directories(
   ${catkin_INCLUDE_DIRS}
   ) 
....

package.xmlがいる間

<buildtool_depend>catkin</buildtool_depend>
 <build_depend>cv_bridge</build_depend>
  <build_depend>image_transport</build_depend>
  <build_depend>roscpp</build_depend>
 <build_depend>rospy</build_depend>
  <build_depend>std_msgs</build_depend>
  <build_depend>message_generation</build_depend>
   <run_depend>cv_bridge</run_depend>
  <run_depend>image_transport</run_depend>
  <run_depend>roscpp</run_depend>
  <run_depend>rospy</run_depend>
 <run_depend>std_msgs</run_depend>
  <run_depend>message_runtime</run_depend>
 <run_depend>message_generation</run_depend>
    <run_depend>image_transport</run_depend>

そして私の.cppファイルで

#include <ros/ros.h>
#include <image_transport/image_transport.h>
.....
int main(int argc, char **argv)
{

  ros::init(argc, argv, "imagegraber");
  ros::NodeHandle nodea;

 image_transport::ImageTransport it(nodea);

image_transport::Subscriber sub = it.subscribe("/pg_15508342/image_raw", 1, imageCallback);


 ros::spin();
return 0;
}

それでも、Segmentation fault (core dumped)コードを実行すると受信します....何が問題なのですか? コードがクラッシュするimage_transport::ImageTransport it(nodea);

コマンドラインで image_transport を実行できることに注意してください: rosrun image_transport republish raw in:=/pg_15508342/image_raw raw out:=/newim. 走行も可能image_view

4

1 に答える 1

0

これで問題の原因がわかったと思います。外部ROSから同梱されているBoostが関係しています。実際、質問で完全な CMakeLists.txt を報告する必要がありましたが、最初は問題がどのように関連しているとは考えていませんでした...

私のCMakeLists.txtには、次のような独自のブースト(ソースからダウンロードした最新バージョン)を含めました

SET (BOOST_DIR "/home/polar/soft/lib/boost/boost_1_61_0")
SET (BOOST_INCLUDEDIR "/home/polar/soft/lib/boost/boost_1_61_0/build/include")
SET (BOOST_LIBRARYDIR "/home/polar/soft/lib/boost/boost_1_61_0/build/lib")

FIND_PACKAGE(Boost 1.61.0 REQUIRED thread)
if (NOT Boost_FOUND)
  message(FATAL_ERROR " Fatal error: Boost (version >= 1.55) required.")
else()
  message(STATUS "Setting up BOOST")
  message(STATUS " Includes - ${Boost_INCLUDE_DIRS}")
  message(STATUS " Library  - ${Boost_LIBRARY_DIRS}")
  include_directories(${Boost_INCLUDE_DIRS})
  link_directories(${Boost_LIBRARY_DIRS})
endif (NOT Boost_FOUND)

そのため、でセグメンテーション違反が発生しました image_transport::ImageTransport it(nh);。ただし、上記のCMakeコードをのみに置き換えた後

FIND_PACKAGE(Boost)

そのセグメンテーション違反はもうありません。ROS の Boost と私のスタンドアローンの Boost の間の最終的な衝突に関して、ros によって与えられる警告メッセージにもっと注意を払うべきだった....

したがって、別の質問として、ROS catkin でスタンドアロン Boost を使用する方法は??

于 2016-07-19T03:26:27.507 に答える