※現状、2019/9/29 Hollo worldのビルドでビルドエラーがでて停止中。
ROSをWindows10 Homeに入れようとした
前回のエントリーでWindows10にROSを入れようとしましたが、実行してもエラーも出さずに終了してしまうためお手上げです。
実行するOSは何でもいいのですが、Windowsに対して見落としていた色々があったので、メモを残しておきます。
Docker for WindowsがWindows10 Homeでは動かない
Docker for Windowsをインストールしようとすると、
Docker for Windowsには、64ビットWindows 10 Pro、EnterpriseおよびEducation(1511年11月の更新、ビルド10586以降)およびMicrosoft Hyper-Vが必要です。前提条件の完全なリストについては、インストールする前に知っておくべきことを参照してください。
とコメントが出てきます。
Windows10上でLinux Kernelベースのコンテナを動かすには、Hyper-Vがないとダメなようです。
Hyper-Vがない場合、Oracle VM VirtualBoxを使うことになります。
Dockerコンテナを使っているのに、仮想マシンのLinuxのコンテナを使ってじゃないと動かないのであれば、潔く仮想マシンを使うべきかもしれません。
Dockerコンテナを使ってみましたが、(私のやる気のなさもあり)インストールしても動きが微妙です。
というわけで、普通にWindows10に仮想マシンを作ってUbuntuをインストールしました。
ROS2インストール
教科書はこちら
2-3 ROS2のインストールからそのまんまやっていきます。
一度、Jetson-nanoでやっているので慣れはありますが、Windows10の上のUbuntuで動くかどうかやってみます。
すると、あっさりサンプルまで動きますね。
Hellow Worldが動かない
調子に乗って、サンプルをgithubからとってきて動かすと、エラーが発生。
--- stderr: hello_world
/home/ros2/get-started-ros2/ros2/hello_world/src/listener.cpp: In constructor ‘Listener::Listener(const string&)’:
/home/ros2/get-started-ros2/ros2/hello_world/src/listener.cpp:36:27: warning: ‘std::shared_ptr<SubscriptionT> rclcpp::Node::create_subscription(const string&, CallbackT&&, const rmw_qos_profile_t&, rclcpp::callback_group::CallbackGroup::SharedPtr, bool, typename rclcpp::message_memory_strategy::MessageMemoryStrategy<typename rclcpp::subscription_traits::has_message_type<CallbackT>::type, AllocatorT>::SharedPtr, std::shared_ptr<PublisherT>) [with MessageT = std_msgs::msg::String_<std::allocator<void> >; CallbackT = Listener::Listener(const string&)::<lambda(std_msgs::msg::String_<std::allocator<void> >::SharedPtr)>&; Alloc = std::allocator<void>; SubscriptionT = rclcpp::Subscription<std_msgs::msg::String_<std::allocator<void> > >; std::__cxx11::string = std::__cxx11::basic_string<char>; rmw_qos_profile_t = rmw_qos_profile_t; rclcpp::callback_group::CallbackGroup::SharedPtr = std::shared_ptr<rclcpp::callback_group::CallbackGroup>; typename rclcpp::message_memory_strategy::MessageMemoryStrategy<typename rclcpp::subscription_traits::has_message_type<CallbackT>::type, AllocatorT>::SharedPtr = std::shared_ptr<rclcpp::message_memory_strategy::MessageMemoryStrategy<std_msgs::msg::String_<std::allocator<void> >, std::allocator<void> > >]’ is deprecated: use create_subscription(const std::string &, const rclcpp::QoS &, CallbackT, ...) instead [-Wdeprecated-declarations]
topic_name, callback);
^
In file included from /opt/ros/dashing/include/rclcpp/node.hpp:1206:0,
from /opt/ros/dashing/include/rclcpp/executors/single_threaded_executor.hpp:28,
from /opt/ros/dashing/include/rclcpp/executors.hpp:22,
from /opt/ros/dashing/include/rclcpp/rclcpp.hpp:144,
from /home/ros2/get-started-ros2/ros2/hello_world/src/listener.cpp:18:
/opt/ros/dashing/include/rclcpp/node_impl.hpp:139:1: note: declared here
Node::create_subscription(
^~~~
In file included from /home/ros2/get-started-ros2/ros2/hello_world/src/talker_listener_composition.cpp:18:0:
/home/ros2/get-started-ros2/ros2/hello_world/src/talker_no_main.cpp: In lambda function:
/home/ros2/get-started-ros2/ros2/hello_world/src/talker_no_main.cpp:39:27: warning: ‘void rclcpp::Publisher<MessageT, Alloc>::publish(const std::shared_ptr<const _Tp>&) [with MessageT = std_msgs::msg::String_<std::allocator<void> >; Alloc = std::allocator<void>]’ is deprecated: publishing an unique_ptr is prefered when using intra process communication. If using a shared_ptr, use publish(*msg). [-Wdeprecated-declarations]
pub_->publish(msg_);
^
In file included from /opt/ros/dashing/include/rclcpp/callback_group.hpp:24:0,
from /opt/ros/dashing/include/rclcpp/any_executable.hpp:20,
from /opt/ros/dashing/include/rclcpp/memory_strategy.hpp:24,
from /opt/ros/dashing/include/rclcpp/memory_strategies.hpp:18,
from /opt/ros/dashing/include/rclcpp/executor.hpp:33,
from /opt/ros/dashing/include/rclcpp/executors/multi_threaded_executor.hpp:24,
from /opt/ros/dashing/include/rclcpp/executors.hpp:21,
from /opt/ros/dashing/include/rclcpp/rclcpp.hpp:144,
from /home/ros2/get-started-ros2/ros2/hello_world/src/talker_listener_composition.cpp:16:
/opt/ros/dashing/include/rclcpp/publisher.hpp:137:3: note: declared here
publish(const std::shared_ptr<const MessageT> & msg)
^~~~~~~
In file included from /home/ros2/get-started-ros2/ros2/hello_world/src/talker_listener_composition.cpp:18:0:
/home/ros2/get-started-ros2/ros2/hello_world/src/talker_no_main.cpp: In constructor ‘Talker::Talker(const string&)’:
/home/ros2/get-started-ros2/ros2/hello_world/src/talker_no_main.cpp:43:62: warning: ‘std::shared_ptr<PublisherT> rclcpp::Node::create_publisher(const string&, const rmw_qos_profile_t&, std::shared_ptr<_Up>) [with MessageT = std_msgs::msg::String_<std::allocator<void> >; AllocatorT = std::allocator<void>; PublisherT = rclcpp::Publisher<std_msgs::msg::String_<std::allocator<void> > >; std::__cxx11::string = std::__cxx11::basic_string<char>; rmw_qos_profile_t = rmw_qos_profile_t]’ is deprecated: use create_publisher(const std::string &, const rclcpp::QoS &, ...) instead [-Wdeprecated-declarations]
pub_ = create_publisher<std_msgs::msg::String>(topic_name);
^
In file included from /opt/ros/dashing/include/rclcpp/node.hpp:1206:0,
from /opt/ros/dashing/include/rclcpp/executors/single_threaded_executor.hpp:28,
from /opt/ros/dashing/include/rclcpp/executors.hpp:22,
from /opt/ros/dashing/include/rclcpp/rclcpp.hpp:144,
from /home/ros2/get-started-ros2/ros2/hello_world/src/talker_listener_composition.cpp:16:
/opt/ros/dashing/include/rclcpp/node_impl.hpp:96:1: note: declared here
Node::create_publisher(
^~~~
In file included from /home/ros2/get-started-ros2/ros2/hello_world/src/talker_listener_composition.cpp:19:0:
/home/ros2/get-started-ros2/ros2/hello_world/src/listener_no_main.cpp: In constructor ‘Listener::Listener(const string&)’:
/home/ros2/get-started-ros2/ros2/hello_world/src/listener_no_main.cpp:36:27: warning: ‘std::shared_ptr<SubscriptionT> rclcpp::Node::create_subscription(const string&, CallbackT&&, const rmw_qos_profile_t&, rclcpp::callback_group::CallbackGroup::SharedPtr, bool, typename rclcpp::message_memory_strategy::MessageMemoryStrategy<typename rclcpp::subscription_traits::has_message_type<CallbackT>::type, AllocatorT>::SharedPtr, std::shared_ptr<PublisherT>) [with MessageT = std_msgs::msg::String_<std::allocator<void> >; CallbackT = Listener::Listener(const string&)::<lambda(std_msgs::msg::String_<std::allocator<void> >::SharedPtr)>&; Alloc = std::allocator<void>; SubscriptionT = rclcpp::Subscription<std_msgs::msg::String_<std::allocator<void> > >; std::__cxx11::string = std::__cxx11::basic_string<char>; rmw_qos_profile_t = rmw_qos_profile_t; rclcpp::callback_group::CallbackGroup::SharedPtr = std::shared_ptr<rclcpp::callback_group::CallbackGroup>; typename rclcpp::message_memory_strategy::MessageMemoryStrategy<typename rclcpp::subscription_traits::has_message_type<CallbackT>::type, AllocatorT>::SharedPtr = std::shared_ptr<rclcpp::message_memory_strategy::MessageMemoryStrategy<std_msgs::msg::String_<std::allocator<void> >, std::allocator<void> > >]’ is deprecated: use create_subscription(const std::string &, const rclcpp::QoS &, CallbackT, ...) instead [-Wdeprecated-declarations]
topic_name, callback);
^
In file included from /opt/ros/dashing/include/rclcpp/node.hpp:1206:0,
from /opt/ros/dashing/include/rclcpp/executors/single_threaded_executor.hpp:28,
from /opt/ros/dashing/include/rclcpp/executors.hpp:22,
from /opt/ros/dashing/include/rclcpp/rclcpp.hpp:144,
from /home/ros2/get-started-ros2/ros2/hello_world/src/talker_listener_composition.cpp:16:
/opt/ros/dashing/include/rclcpp/node_impl.hpp:139:1: note: declared here
Node::create_subscription(
^~~~
/home/ros2/get-started-ros2/ros2/hello_world/src/talker_with_service.cpp: In lambda function:
/home/ros2/get-started-ros2/ros2/hello_world/src/talker_with_service.cpp:41:27: warning: ‘void rclcpp::Publisher<MessageT, Alloc>::publish(const std::shared_ptr<const _Tp>&) [with MessageT = std_msgs::msg::String_<std::allocator<void> >; Alloc = std::allocator<void>]’ is deprecated: publishing an unique_ptr is prefered when using intra process communication. If using a shared_ptr, use publish(*msg). [-Wdeprecated-declarations]
pub_->publish(msg_);
^
In file included from /opt/ros/dashing/include/rclcpp/callback_group.hpp:24:0,
from /opt/ros/dashing/include/rclcpp/any_executable.hpp:20,
from /opt/ros/dashing/include/rclcpp/memory_strategy.hpp:24,
from /opt/ros/dashing/include/rclcpp/memory_strategies.hpp:18,
from /opt/ros/dashing/include/rclcpp/executor.hpp:33,
from /opt/ros/dashing/include/rclcpp/executors/multi_threaded_executor.hpp:24,
from /opt/ros/dashing/include/rclcpp/executors.hpp:21,
from /opt/ros/dashing/include/rclcpp/rclcpp.hpp:144,
from /home/ros2/get-started-ros2/ros2/hello_world/src/talker_with_service.cpp:20:
/opt/ros/dashing/include/rclcpp/publisher.hpp:137:3: note: declared here
publish(const std::shared_ptr<const MessageT> & msg)
^~~~~~~
/home/ros2/get-started-ros2/ros2/hello_world/src/talker_with_service.cpp: In constructor ‘Talker::Talker(const string&)’:
/home/ros2/get-started-ros2/ros2/hello_world/src/talker_with_service.cpp:44:62: warning: ‘std::shared_ptr<PublisherT> rclcpp::Node::create_publisher(const string&, const rmw_qos_profile_t&, std::shared_ptr<_Up>) [with MessageT = std_msgs::msg::String_<std::allocator<void> >; AllocatorT = std::allocator<void>; PublisherT = rclcpp::Publisher<std_msgs::msg::String_<std::allocator<void> > >; std::__cxx11::string = std::__cxx11::basic_string<char>; rmw_qos_profile_t = rmw_qos_profile_t]’ is deprecated: use create_publisher(const std::string &, const rclcpp::QoS &, ...) instead [-Wdeprecated-declarations]
pub_ = create_publisher<std_msgs::msg::String>(topic_name);
^
In file included from /opt/ros/dashing/include/rclcpp/node.hpp:1206:0,
from /opt/ros/dashing/include/rclcpp/executors/single_threaded_executor.hpp:28,
from /opt/ros/dashing/include/rclcpp/executors.hpp:22,
from /opt/ros/dashing/include/rclcpp/rclcpp.hpp:144,
from /home/ros2/get-started-ros2/ros2/hello_world/src/talker_with_service.cpp:20:
/opt/ros/dashing/include/rclcpp/node_impl.hpp:96:1: note: declared here
Node::create_publisher(
^~~~
/home/ros2/get-started-ros2/ros2/hello_world/src/talker_with_service_param.cpp: In lambda function:
/home/ros2/get-started-ros2/ros2/hello_world/src/talker_with_service_param.cpp:42:27: warning: ‘void rclcpp::Publisher<MessageT, Alloc>::publish(const std::shared_ptr<const _Tp>&) [with MessageT = std_msgs::msg::String_<std::allocator<void> >; Alloc = std::allocator<void>]’ is deprecated: publishing an unique_ptr is prefered when using intra process communication. If using a shared_ptr, use publish(*msg). [-Wdeprecated-declarations]
pub_->publish(msg_);
^
In file included from /opt/ros/dashing/include/rclcpp/callback_group.hpp:24:0,
from /opt/ros/dashing/include/rclcpp/any_executable.hpp:20,
from /opt/ros/dashing/include/rclcpp/memory_strategy.hpp:24,
from /opt/ros/dashing/include/rclcpp/memory_strategies.hpp:18,
from /opt/ros/dashing/include/rclcpp/executor.hpp:33,
from /opt/ros/dashing/include/rclcpp/executors/multi_threaded_executor.hpp:24,
from /opt/ros/dashing/include/rclcpp/executors.hpp:21,
from /opt/ros/dashing/include/rclcpp/rclcpp.hpp:144,
from /home/ros2/get-started-ros2/ros2/hello_world/src/talker_with_service_param.cpp:19:
/opt/ros/dashing/include/rclcpp/publisher.hpp:137:3: note: declared here
publish(const std::shared_ptr<const MessageT> & msg)
^~~~~~~
/home/ros2/get-started-ros2/ros2/hello_world/src/talker_with_service_param.cpp: In constructor ‘Talker::Talker(const string&)’:
/home/ros2/get-started-ros2/ros2/hello_world/src/talker_with_service_param.cpp:45:62: warning: ‘std::shared_ptr<PublisherT> rclcpp::Node::create_publisher(const string&, const rmw_qos_profile_t&, std::shared_ptr<_Up>) [with MessageT = std_msgs::msg::String_<std::allocator<void> >; AllocatorT = std::allocator<void>; PublisherT = rclcpp::Publisher<std_msgs::msg::String_<std::allocator<void> > >; std::__cxx11::string = std::__cxx11::basic_string<char>; rmw_qos_profile_t = rmw_qos_profile_t]’ is deprecated: use create_publisher(const std::string &, const rclcpp::QoS &, ...) instead [-Wdeprecated-declarations]
pub_ = create_publisher<std_msgs::msg::String>(topic_name);
^
In file included from /opt/ros/dashing/include/rclcpp/node.hpp:1206:0,
from /opt/ros/dashing/include/rclcpp/executors/single_threaded_executor.hpp:28,
from /opt/ros/dashing/include/rclcpp/executors.hpp:22,
from /opt/ros/dashing/include/rclcpp/rclcpp.hpp:144,
from /home/ros2/get-started-ros2/ros2/hello_world/src/talker_with_service_param.cpp:19:
/opt/ros/dashing/include/rclcpp/node_impl.hpp:96:1: note: declared here
Node::create_publisher(
^~~~
/home/ros2/get-started-ros2/ros2/hello_world/src/talker.cpp: In lambda function:
/home/ros2/get-started-ros2/ros2/hello_world/src/talker.cpp:39:27: warning: ‘void rclcpp::Publisher<MessageT, Alloc>::publish(const std::shared_ptr<const _Tp>&) [with MessageT = std_msgs::msg::String_<std::allocator<void> >; Alloc = std::allocator<void>]’ is deprecated: publishing an unique_ptr is prefered when using intra process communication. If using a shared_ptr, use publish(*msg). [-Wdeprecated-declarations]
pub_->publish(msg_);
^
In file included from /opt/ros/dashing/include/rclcpp/callback_group.hpp:24:0,
from /opt/ros/dashing/include/rclcpp/any_executable.hpp:20,
from /opt/ros/dashing/include/rclcpp/memory_strategy.hpp:24,
from /opt/ros/dashing/include/rclcpp/memory_strategies.hpp:18,
from /opt/ros/dashing/include/rclcpp/executor.hpp:33,
from /opt/ros/dashing/include/rclcpp/executors/multi_threaded_executor.hpp:24,
from /opt/ros/dashing/include/rclcpp/executors.hpp:21,
from /opt/ros/dashing/include/rclcpp/rclcpp.hpp:144,
from /home/ros2/get-started-ros2/ros2/hello_world/src/talker.cpp:19:
/opt/ros/dashing/include/rclcpp/publisher.hpp:137:3: note: declared here
publish(const std::shared_ptr<const MessageT> & msg)
^~~~~~~
/home/ros2/get-started-ros2/ros2/hello_world/src/talker.cpp: In constructor ‘Talker::Talker(const string&)’:
/home/ros2/get-started-ros2/ros2/hello_world/src/talker.cpp:43:62: warning: ‘std::shared_ptr<PublisherT> rclcpp::Node::create_publisher(const string&, const rmw_qos_profile_t&, std::shared_ptr<_Up>) [with MessageT = std_msgs::msg::String_<std::allocator<void> >; AllocatorT = std::allocator<void>; PublisherT = rclcpp::Publisher<std_msgs::msg::String_<std::allocator<void> > >; std::__cxx11::string = std::__cxx11::basic_string<char>; rmw_qos_profile_t = rmw_qos_profile_t]’ is deprecated: use create_publisher(const std::string &, const rclcpp::QoS &, ...) instead [-Wdeprecated-declarations]
pub_ = create_publisher<std_msgs::msg::String>(topic_name);
^
In file included from /opt/ros/dashing/include/rclcpp/node.hpp:1206:0,
from /opt/ros/dashing/include/rclcpp/executors/single_threaded_executor.hpp:28,
from /opt/ros/dashing/include/rclcpp/executors.hpp:22,
from /opt/ros/dashing/include/rclcpp/rclcpp.hpp:144,
from /home/ros2/get-started-ros2/ros2/hello_world/src/talker.cpp:19:
/opt/ros/dashing/include/rclcpp/node_impl.hpp:96:1: note: declared here
Node::create_publisher(
^~~~
/home/ros2/get-started-ros2/ros2/hello_world/src/listener_component.cpp: In constructor ‘hello_world::ListenerComponent::ListenerComponent(const rclcpp::NodeOptions&)’:
/home/ros2/get-started-ros2/ros2/hello_world/src/listener_component.cpp:43:26: warning: ‘std::shared_ptr<SubscriptionT> rclcpp::Node::create_subscription(const string&, CallbackT&&, const rmw_qos_profile_t&, rclcpp::callback_group::CallbackGroup::SharedPtr, bool, typename rclcpp::message_memory_strategy::MessageMemoryStrategy<typename rclcpp::subscription_traits::has_message_type<CallbackT>::type, AllocatorT>::SharedPtr, std::shared_ptr<PublisherT>) [with MessageT = std_msgs::msg::String_<std::allocator<void> >; CallbackT = hello_world::ListenerComponent::ListenerComponent(const rclcpp::NodeOptions&)::<lambda(std_msgs::msg::String_<std::allocator<void> >::SharedPtr)>&; Alloc = std::allocator<void>; SubscriptionT = rclcpp::Subscription<std_msgs::msg::String_<std::allocator<void> > >; std::__cxx11::string = std::__cxx11::basic_string<char>; rmw_qos_profile_t = rmw_qos_profile_t; rclcpp::callback_group::CallbackGroup::SharedPtr = std::shared_ptr<rclcpp::callback_group::CallbackGroup>; typename rclcpp::message_memory_strategy::MessageMemoryStrategy<typename rclcpp::subscription_traits::has_message_type<CallbackT>::type, AllocatorT>::SharedPtr = std::shared_ptr<rclcpp::message_memory_strategy::MessageMemoryStrategy<std_msgs::msg::String_<std::allocator<void> >, std::allocator<void> > >]’ is deprecated: use create_subscription(const std::string &, const rclcpp::QoS &, CallbackT, ...) instead [-Wdeprecated-declarations]
"chatter", callback);
^
In file included from /opt/ros/dashing/include/rclcpp/node.hpp:1206:0,
from /opt/ros/dashing/include/rclcpp/executors/single_threaded_executor.hpp:28,
from /opt/ros/dashing/include/rclcpp/executors.hpp:22,
from /opt/ros/dashing/include/rclcpp/rclcpp.hpp:144,
from /home/ros2/get-started-ros2/ros2/hello_world/src/listener_component.cpp:18:
/opt/ros/dashing/include/rclcpp/node_impl.hpp:139:1: note: declared here
Node::create_subscription(
^~~~
/home/ros2/get-started-ros2/ros2/hello_world/src/talker_component.cpp: In lambda function:
/home/ros2/get-started-ros2/ros2/hello_world/src/talker_component.cpp:49:27: warning: ‘void rclcpp::Publisher<MessageT, Alloc>::publish(const std::shared_ptr<const _Tp>&) [with MessageT = std_msgs::msg::String_<std::allocator<void> >; Alloc = std::allocator<void>]’ is deprecated: publishing an unique_ptr is prefered when using intra process communication. If using a shared_ptr, use publish(*msg). [-Wdeprecated-declarations]
pub_->publish(msg_);
^
In file included from /opt/ros/dashing/include/rclcpp/callback_group.hpp:24:0,
from /opt/ros/dashing/include/rclcpp/any_executable.hpp:20,
from /opt/ros/dashing/include/rclcpp/memory_strategy.hpp:24,
from /opt/ros/dashing/include/rclcpp/memory_strategies.hpp:18,
from /opt/ros/dashing/include/rclcpp/executor.hpp:33,
from /opt/ros/dashing/include/rclcpp/executors/multi_threaded_executor.hpp:24,
from /opt/ros/dashing/include/rclcpp/executors.hpp:21,
from /opt/ros/dashing/include/rclcpp/rclcpp.hpp:144,
from /home/ros2/get-started-ros2/ros2/hello_world/src/talker_component.cpp:19:
/opt/ros/dashing/include/rclcpp/publisher.hpp:137:3: note: declared here
publish(const std::shared_ptr<const MessageT> & msg)
^~~~~~~
/home/ros2/get-started-ros2/ros2/hello_world/src/talker_component.cpp: In constructor ‘hello_world::TalkerComponent::TalkerComponent(const rclcpp::NodeOptions&)’:
/home/ros2/get-started-ros2/ros2/hello_world/src/talker_component.cpp:53:61: warning: ‘std::shared_ptr<PublisherT> rclcpp::Node::create_publisher(const string&, const rmw_qos_profile_t&, std::shared_ptr<_Up>) [with MessageT = std_msgs::msg::String_<std::allocator<void> >; AllocatorT = std::allocator<void>; PublisherT = rclcpp::Publisher<std_msgs::msg::String_<std::allocator<void> > >; std::__cxx11::string = std::__cxx11::basic_string<char>; rmw_qos_profile_t = rmw_qos_profile_t]’ is deprecated: use create_publisher(const std::string &, const rclcpp::QoS &, ...) instead [-Wdeprecated-declarations]
pub_ = create_publisher<std_msgs::msg::String>("chatter");
^
In file included from /opt/ros/dashing/include/rclcpp/node.hpp:1206:0,
from /opt/ros/dashing/include/rclcpp/executors/single_threaded_executor.hpp:28,
from /opt/ros/dashing/include/rclcpp/executors.hpp:22,
from /opt/ros/dashing/include/rclcpp/rclcpp.hpp:144,
from /home/ros2/get-started-ros2/ros2/hello_world/src/talker_component.cpp:19:
/opt/ros/dashing/include/rclcpp/node_impl.hpp:96:1: note: declared here
Node::create_publisher(
^~~~
---
Finished <<< hello_world [31.4s]
Summary: 7 packages finished [1min 45s]
2 packages had stderr output: hello_world libcreate
エラーコード長いよ。
gtestがインストールできていないみたいなので、インストールを試みますが、うまく動きません。