私はROSフレームワークを使用した私的プロジェクトに取り組んでいますので、私のモチベーションは新しいC++ 14オートラムダ機能によって向上しました(この詳細はlinkを参照してください) 。rosパッケージC++ 14ラムダサポート
私が直面している問題は、ROSフレームワークが旧時代に固執していることです。C++03 for it's compilation。だから、C++ 14のコンパイルサポートを有効にするにはどうしたらいいですか?ラムダ関数を使うにはどうしたらいいですか?
出版社:
#include <ros/ros.h> #include <std_msgs/String.h> #include <std_msgs/Int8.h> #include <sstream> int main(int argc, char **argv) { ros::init(argc, argv, "talker"); ros::NodeHandle n; ros::Publisher string_pub = n.advertise<std_msgs::String>("chatter_string", 1000); ros::Publisher int_pub = n.advertise<std_msgs::Int8>("chatter_int", 1000); ros::Rate loop_rate(10); int count = 0; while (ros::ok()) { std_msgs::String str_msg; std::stringstream ss; ss << "hello world "; str_msg.data = ss.str(); std_msgs::Int8 int_msg; int_msg.data = count; string_pub.publish(str_msg); int_pub.publish(int_msg); ros::spinOnce(); loop_rate.sleep(); ++count; } return 0; }
加入者:
#include <ros/ros.h> #include <std_msgs/String.h> #include <std_msgs/Int8.h> //generic lambda to add two variables auto func = [](auto input) { return input + input; }; void StringCallback(const std_msgs::String::ConstPtr& msg) { ROS_INFO("I heard: [%s]", func(msg->data).c_str()); } void IntCallback(const std_msgs::Int8::ConstPtr& msg) { int result = msg->data; ROS_INFO("I heard: [%d]", func(result)); } int main(int argc, char **argv) { ros::init(argc, argv, "listener"); ros::NodeHandle n; ros::Subscriber string_sub = n.subscribe("chatter_string", 1000, StringCallback); ros::Subscriber int_sub = n.subscribe("chatter_int", 1000, IntCallback); ros::spin(); return 0; }
CMakeLists:ここ
は(加入者ノードで)ラムダ関数でテストするための簡単なノードです
この設定の後にパッケージを作るcmake_minimum_required(VERSION 2.8.3) project(tutocpp14) find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs ) catkin_package() include_directories(${catkin_INCLUDE_DIRS} include) add_executable(listener src/listener.cpp) add_executable(publisher src/publisher.cpp) target_link_libraries(listener ${catkin_LIBRARIES}) target_link_libraries(publisher ${catkin_LIBRARIES})
私に次のエラーをスロー:
tutocpp14/src/listener.cpp:10:43: error: ‘func’ was not declared in this scope
ROS_INFO("I heard: [%s]", func(msg->data).c_str());