yasmin icon indicating copy to clipboard operation
yasmin copied to clipboard

Not able to run the demo

Open amodpatil1 opened this issue 1 year ago • 88 comments
trafficstars

colcon build --packages-select yasmin ros2 run yasmin_demo yasmin_demo.py Package 'yasmin_demo' not found not able to run the command. please help me out.

amodpatil1 avatar Jun 04 '24 16:06 amodpatil1

Hey @amodpatil1, have you source (source install/setup.bash) after using colcon?

mgonzs13 avatar Jun 04 '24 19:06 mgonzs13

Yes, I did source the workspace before the running the command and I tried it multiple times and I also tried doing from start as well, but it did not work.

amodpatil1 avatar Jun 05 '24 08:06 amodpatil1

I think there is some problem with the action_client_demo.py

amodpatil1 avatar Jun 05 '24 08:06 amodpatil1

Have you colcon all the yasmin packages (yasmin, yasmin_msgs, yasmin_demo, yasmin_ros, yasmin_viewe) or only yasmin?

mgonzs13 avatar Jun 05 '24 08:06 mgonzs13

I did it for yasmin only. Shouldn't the entire package get built when I do Colcon build?

amodpatil1 avatar Jun 05 '24 09:06 amodpatil1

No, since they are different packages.

mgonzs13 avatar Jun 05 '24 09:06 mgonzs13

okay I will try that.

amodpatil1 avatar Jun 05 '24 09:06 amodpatil1

Starting >>> yasmin_demo --- stderr: yasmin_demo
In file included from /home/amodpatil/ros2/src/yasmin/yasmin_demo/src/action_client_demo.cpp:24: /home/amodpatil/ros2/install/yasmin_ros/include/yasmin_ros/action_state.hpp: In instantiation of ‘std::string yasmin_ros::ActionState<ActionT>::execute(std::shared_ptryasmin::blackboard::Blackboard) [with ActionT = action_tutorials_interfaces::action::Fibonacci; std::string = std::__cxx11::basic_string]’: /home/amodpatil/ros2/install/yasmin_ros/include/yasmin_ros/action_state.hpp:103:3: required from here /home/amodpatil/ros2/install/yasmin_ros/include/yasmin_ros/action_state.hpp:113:46: error: no match for ‘operator=’ (operand types are ‘rclcpp_action::Client<action_tutorials_interfaces::action::Fibonacci>::GoalResponseCallback’ {aka ‘std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >)>’} and ‘std::_Bind_helper<false, void (yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>::)(const std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> >&), yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>, const std::_Placeholder<1>&>::type’ {aka ‘std::_Bind<void (yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>::(yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>, std::_Placeholder<1>))(const std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> >&)>’}) 113 | send_goal_options.goal_response_callback = | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ 114 | std::bind(&ActionState::goal_response_callback, this, _1); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/future:48, from /opt/ros/foxy/include/rclcpp/executors.hpp:18, from /opt/ros/foxy/include/rclcpp/rclcpp.hpp:146, from /home/amodpatil/ros2/install/yasmin_ros/include/yasmin_ros/action_state.hpp:23, from /home/amodpatil/ros2/src/yasmin/yasmin_demo/src/action_client_demo.cpp:24: /usr/include/c++/9/bits/std_function.h:462:7: note: candidate: ‘std::function<_Res(_ArgTypes ...)>& std::function<_Res(_ArgTypes ...)>::operator=(const std::function<_Res(_ArgTypes ...)>&) [with _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >}]’ 462 | operator=(const function& __x) | ^~~~~~~~ /usr/include/c++/9/bits/std_function.h:462:33: note: no known conversion for argument 1 from ‘std::_Bind_helper<false, void (yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>::)(const std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> >&), yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>, const std::_Placeholder<1>&>::type’ {aka ‘std::_Bind<void (yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>::(yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>, std::_Placeholder<1>))(const std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> >&)>’} to ‘const std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >)>&’ 462 | operator=(const function& __x) | ~~~~~~~~~~~~~~~~^~~ /usr/include/c++/9/bits/std_function.h:480:7: note: candidate: ‘std::function<_Res(_ArgTypes ...)>& std::function<_Res(_ArgTypes ...)>::operator=(std::function<_Res(_ArgTypes ...)>&&) [with _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >}]’ 480 | operator=(function&& __x) noexcept | ^~~~~~~~ /usr/include/c++/9/bits/std_function.h:480:28: note: no known conversion for argument 1 from ‘std::_Bind_helper<false, void (yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>::)(const std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> >&), yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>, const std::_Placeholder<1>&>::type’ {aka ‘std::_Bind<void (yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>::(yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>, std::_Placeholder<1>))(const std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> >&)>’} to ‘std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >)>&&’ 480 | operator=(function&& __x) noexcept | ~~~~~~~~~~~^~~ /usr/include/c++/9/bits/std_function.h:494:7: note: candidate: ‘std::function<_Res(_ArgTypes ...)>& std::function<_Res(_ArgTypes ...)>::operator=(std::nullptr_t) [with _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >}; std::nullptr_t = std::nullptr_t]’ 494 | operator=(nullptr_t) noexcept | ^~~~~~~~ /usr/include/c++/9/bits/std_function.h:494:17: note: no known conversion for argument 1 from ‘std::_Bind_helper<false, void (yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>::)(const std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> >&), yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>, const std::_Placeholder<1>&>::type’ {aka ‘std::_Bind<void (yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>::(yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>, std::_Placeholder<1>))(const std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> >&)>’} to ‘std::nullptr_t’ 494 | operator=(nullptr_t) noexcept | ^~~~~~~~~ /usr/include/c++/9/bits/std_function.h:523:2: note: candidate: ‘template<class _Functor> std::function<_Res(_ArgTypes ...)>::_Requires<std::function<_Res(_ArgTypes ...)>::_Callable<typename std::decay<_Functor>::type>, std::function<_Res(_ArgTypes ...)>&> std::function<_Res(_ArgTypes ...)>::operator=(_Functor&&) [with _Functor = _Functor; _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >}]’ 523 | operator=(_Functor&& __f) | ^~~~~~~~ /usr/include/c++/9/bits/std_function.h:523:2: note: template argument deduction/substitution failed: /usr/include/c++/9/bits/std_function.h: In substitution of ‘template<class _Res, class ... _ArgTypes> template<class _Cond, class _Tp> using _Requires = typename std::enable_if<_Cond::value, _Tp>::type [with _Cond = std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >)>::_Callable<std::_Bind<void (yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>::(yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>, std::_Placeholder<1>))(const std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> >&)>, std::__invoke_result<std::_Bind<void (yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>::(yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>, std::_Placeholder<1>))(const std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> >&)>&, std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > > > >; _Tp = std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >)>&; _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >}]’: /usr/include/c++/9/bits/std_function.h:523:2: required by substitution of ‘template<class _Functor> std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >)>::_Requires<std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >)>::_Callable<typename std::decay<_Tp>::type, std::__invoke_result<typename std::decay<_Tp>::type&, std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > > > >, std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >)>&> std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >)>::operator=<_Functor>(_Functor&&) [with _Functor = std::_Bind<void (yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>::(yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>, std::_Placeholder<1>))(const std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> >&)>]’ /home/amodpatil/ros2/install/yasmin_ros/include/yasmin_ros/action_state.hpp:113:46: required from ‘std::string yasmin_ros::ActionState<ActionT>::execute(std::shared_ptryasmin::blackboard::Blackboard) [with ActionT = action_tutorials_interfaces::action::Fibonacci; std::string = std::__cxx11::basic_string]’ /home/amodpatil/ros2/install/yasmin_ros/include/yasmin_ros/action_state.hpp:103:3: required from here /usr/include/c++/9/bits/std_function.h:385:8: error: no type named ‘type’ in ‘struct std::enable_if<false, std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >)>&>’ 385 | using _Requires = typename enable_if<_Cond::value, _Tp>::type; | ^~~~~~~~~ /home/amodpatil/ros2/install/yasmin_ros/include/yasmin_ros/action_state.hpp: In instantiation of ‘std::string yasmin_ros::ActionState<ActionT>::execute(std::shared_ptryasmin::blackboard::Blackboard) [with ActionT = action_tutorials_interfaces::action::Fibonacci; std::string = std::__cxx11::basic_string]’: /home/amodpatil/ros2/install/yasmin_ros/include/yasmin_ros/action_state.hpp:103:3: required from here /usr/include/c++/9/bits/std_function.h:532:2: note: candidate: ‘template<class _Functor> std::function<_Res(_ArgTypes ...)>& std::function<_Res(_ArgTypes ...)>::operator=(std::reference_wrapper<_Functor>) [with _Functor = _Functor; _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >}]’ 532 | operator=(reference_wrapper<_Functor> __f) noexcept | ^~~~~~~~ /usr/include/c++/9/bits/std_function.h:532:2: note: template argument deduction/substitution failed: In file included from /home/amodpatil/ros2/src/yasmin/yasmin_demo/src/action_client_demo.cpp:24: /home/amodpatil/ros2/install/yasmin_ros/include/yasmin_ros/action_state.hpp:113:46: note: ‘std::_Bind<void (yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>::(yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>, std::_Placeholder<1>))(const std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> >&)>’ is not derived from ‘std::reference_wrapper<_Tp>’ 113 | send_goal_options.goal_response_callback = | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ 114 | std::bind(&ActionState::goal_response_callback, this, _1); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ make[2]: *** [CMakeFiles/action_client_demo.dir/build.make:63: CMakeFiles/action_client_demo.dir/src/action_client_demo.cpp.o] Error 1 make[1]: *** [CMakeFiles/Makefile2:84: CMakeFiles/action_client_demo.dir/all] Error 2 make[1]: *** Waiting for unfinished jobs.... make: *** [Makefile:141: all] Error 2

Failed <<< yasmin_demo [7.38s, exited with code 2]

Summary: 0 packages finished [7.67s] 1 package failed: yasmin_demo 1 package had stderr output: yasmin_demo

I built all other packages but the demo is only facing an issue

amodpatil1 avatar Jun 05 '24 09:06 amodpatil1

That is a problem with the ROS 2 distro. Foxy EOL was on June 20th, 2023. Thus, yasmin was updated to Humble.

mgonzs13 avatar Jun 05 '24 09:06 mgonzs13

I have just added support for Foxy. It should work now.

mgonzs13 avatar Jun 05 '24 10:06 mgonzs13

okay I will try

amodpatil1 avatar Jun 05 '24 10:06 amodpatil1

--- stderr: yasmin_demo
In file included from /home/amodpatil/ros2/src/yasmin/yasmin_demo/src/action_client_demo.cpp:24: /home/amodpatil/ros2/install/yasmin_ros/include/yasmin_ros/action_state.hpp: In instantiation of ‘std::string yasmin_ros::ActionState<ActionT>::execute(std::shared_ptryasmin::blackboard::Blackboard) [with ActionT = action_tutorials_interfaces::action::Fibonacci; std::string = std::__cxx11::basic_string]’: /home/amodpatil/ros2/install/yasmin_ros/include/yasmin_ros/action_state.hpp:103:3: required from here /home/amodpatil/ros2/install/yasmin_ros/include/yasmin_ros/action_state.hpp:113:46: error: no match for ‘operator=’ (operand types are ‘rclcpp_action::Client<action_tutorials_interfaces::action::Fibonacci>::GoalResponseCallback’ {aka ‘std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >)>’} and ‘std::_Bind_helper<false, void (yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>::)(const std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> >&), yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>, const std::_Placeholder<1>&>::type’ {aka ‘std::_Bind<void (yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>::(yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>, std::_Placeholder<1>))(const std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> >&)>’}) 113 | send_goal_options.goal_response_callback = | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ 114 | std::bind(&ActionState::goal_response_callback, this, _1); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In file included from /usr/include/c++/9/future:48, from /opt/ros/foxy/include/rclcpp/executors.hpp:18, from /opt/ros/foxy/include/rclcpp/rclcpp.hpp:146, from /home/amodpatil/ros2/install/yasmin_ros/include/yasmin_ros/action_state.hpp:23, from /home/amodpatil/ros2/src/yasmin/yasmin_demo/src/action_client_demo.cpp:24: /usr/include/c++/9/bits/std_function.h:462:7: note: candidate: ‘std::function<_Res(_ArgTypes ...)>& std::function<_Res(_ArgTypes ...)>::operator=(const std::function<_Res(_ArgTypes ...)>&) [with _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >}]’ 462 | operator=(const function& __x) | ^~~~~~~~ /usr/include/c++/9/bits/std_function.h:462:33: note: no known conversion for argument 1 from ‘std::_Bind_helper<false, void (yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>::)(const std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> >&), yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>, const std::_Placeholder<1>&>::type’ {aka ‘std::_Bind<void (yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>::(yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>, std::_Placeholder<1>))(const std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> >&)>’} to ‘const std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >)>&’ 462 | operator=(const function& __x) | ~~~~~~~~~~~~~~~~^~~ /usr/include/c++/9/bits/std_function.h:480:7: note: candidate: ‘std::function<_Res(_ArgTypes ...)>& std::function<_Res(_ArgTypes ...)>::operator=(std::function<_Res(_ArgTypes ...)>&&) [with _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >}]’ 480 | operator=(function&& __x) noexcept | ^~~~~~~~ /usr/include/c++/9/bits/std_function.h:480:28: note: no known conversion for argument 1 from ‘std::_Bind_helper<false, void (yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>::)(const std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> >&), yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>, const std::_Placeholder<1>&>::type’ {aka ‘std::_Bind<void (yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>::(yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>, std::_Placeholder<1>))(const std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> >&)>’} to ‘std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >)>&&’ 480 | operator=(function&& __x) noexcept | ~~~~~~~~~~~^~~ /usr/include/c++/9/bits/std_function.h:494:7: note: candidate: ‘std::function<_Res(_ArgTypes ...)>& std::function<_Res(_ArgTypes ...)>::operator=(std::nullptr_t) [with _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >}; std::nullptr_t = std::nullptr_t]’ 494 | operator=(nullptr_t) noexcept | ^~~~~~~~ /usr/include/c++/9/bits/std_function.h:494:17: note: no known conversion for argument 1 from ‘std::_Bind_helper<false, void (yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>::)(const std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> >&), yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>, const std::_Placeholder<1>&>::type’ {aka ‘std::_Bind<void (yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>::(yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>, std::_Placeholder<1>))(const std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> >&)>’} to ‘std::nullptr_t’ 494 | operator=(nullptr_t) noexcept | ^~~~~~~~~ /usr/include/c++/9/bits/std_function.h:523:2: note: candidate: ‘template<class _Functor> std::function<_Res(_ArgTypes ...)>::_Requires<std::function<_Res(_ArgTypes ...)>::_Callable<typename std::decay<_Functor>::type>, std::function<_Res(_ArgTypes ...)>&> std::function<_Res(_ArgTypes ...)>::operator=(_Functor&&) [with _Functor = _Functor; _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >}]’ 523 | operator=(_Functor&& __f) | ^~~~~~~~ /usr/include/c++/9/bits/std_function.h:523:2: note: template argument deduction/substitution failed: /usr/include/c++/9/bits/std_function.h: In substitution of ‘template<class _Res, class ... _ArgTypes> template<class _Cond, class _Tp> using _Requires = typename std::enable_if<_Cond::value, _Tp>::type [with _Cond = std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >)>::_Callable<std::_Bind<void (yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>::(yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>, std::_Placeholder<1>))(const std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> >&)>, std::__invoke_result<std::_Bind<void (yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>::(yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>, std::_Placeholder<1>))(const std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> >&)>&, std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > > > >; _Tp = std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >)>&; _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >}]’: /usr/include/c++/9/bits/std_function.h:523:2: required by substitution of ‘template<class _Functor> std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >)>::_Requires<std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >)>::_Callable<typename std::decay<_Tp>::type, std::__invoke_result<typename std::decay<_Tp>::type&, std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > > > >, std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >)>&> std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >)>::operator=<_Functor>(_Functor&&) [with _Functor = std::_Bind<void (yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>::(yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>, std::_Placeholder<1>))(const std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> >&)>]’ /home/amodpatil/ros2/install/yasmin_ros/include/yasmin_ros/action_state.hpp:113:46: required from ‘std::string yasmin_ros::ActionState<ActionT>::execute(std::shared_ptryasmin::blackboard::Blackboard) [with ActionT = action_tutorials_interfaces::action::Fibonacci; std::string = std::__cxx11::basic_string]’ /home/amodpatil/ros2/install/yasmin_ros/include/yasmin_ros/action_state.hpp:103:3: required from here /usr/include/c++/9/bits/std_function.h:385:8: error: no type named ‘type’ in ‘struct std::enable_if<false, std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >)>&>’ 385 | using _Requires = typename enable_if<_Cond::value, _Tp>::type; | ^~~~~~~~~ /home/amodpatil/ros2/install/yasmin_ros/include/yasmin_ros/action_state.hpp: In instantiation of ‘std::string yasmin_ros::ActionState<ActionT>::execute(std::shared_ptryasmin::blackboard::Blackboard) [with ActionT = action_tutorials_interfaces::action::Fibonacci; std::string = std::__cxx11::basic_string]’: /home/amodpatil/ros2/install/yasmin_ros/include/yasmin_ros/action_state.hpp:103:3: required from here /usr/include/c++/9/bits/std_function.h:532:2: note: candidate: ‘template<class _Functor> std::function<_Res(_ArgTypes ...)>& std::function<_Res(_ArgTypes ...)>::operator=(std::reference_wrapper<_Functor>) [with _Functor = _Functor; _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> > >}]’ 532 | operator=(reference_wrapper<_Functor> __f) noexcept | ^~~~~~~~ /usr/include/c++/9/bits/std_function.h:532:2: note: template argument deduction/substitution failed: In file included from /home/amodpatil/ros2/src/yasmin/yasmin_demo/src/action_client_demo.cpp:24: /home/amodpatil/ros2/install/yasmin_ros/include/yasmin_ros/action_state.hpp:113:46: note: ‘std::_Bind<void (yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>::(yasmin_ros::ActionState<action_tutorials_interfaces::action::Fibonacci>, std::_Placeholder<1>))(const std::shared_ptr<rclcpp_action::ClientGoalHandle<action_tutorials_interfaces::action::Fibonacci> >&)>’ is not derived from ‘std::reference_wrapper<_Tp>’ 113 | send_goal_options.goal_response_callback = | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ 114 | std::bind(&ActionState::goal_response_callback, this, _1); | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ make[2]: *** [CMakeFiles/action_client_demo.dir/build.make:63: CMakeFiles/action_client_demo.dir/src/action_client_demo.cpp.o] Error 1 make[1]: *** [CMakeFiles/Makefile2:84: CMakeFiles/action_client_demo.dir/all] Error 2 make[1]: *** Waiting for unfinished jobs.... make: *** [Makefile:141: all] Error 2

Failed <<< yasmin_demo [6.82s, exited with code 2]

Summary: 0 packages finished [7.10s] 1 package failed: yasmin_demo 1 package had stderr output: yasmin_demo

still the same error

amodpatil1 avatar Jun 05 '24 10:06 amodpatil1

Pull and try again. I have done another update.

mgonzs13 avatar Jun 05 '24 10:06 mgonzs13

It is working now. But now there is this ros2 run demo_nodes_py add_two_ints_servers No executable found. I am sorry for too many questions

amodpatil1 avatar Jun 05 '24 11:06 amodpatil1

The service demo is not running

amodpatil1 avatar Jun 05 '24 11:06 amodpatil1

Both the commands are not executable

amodpatil1 avatar Jun 05 '24 11:06 amodpatil1

You have to install the ROS 2 demo packages (ros-humble-demo-nodes-py, ros-humble-demo-nodes-cpp, ros-humble-action-tutorials-py, ros-humble-action-tutorials-cpp).

mgonzs13 avatar Jun 05 '24 11:06 mgonzs13

I am able to find the demos for foxy, can you please help me out?

amodpatil1 avatar Jun 05 '24 12:06 amodpatil1

Have you tried to install them with sudo apt install ros-foxy-demo-nodes-py, ros-foxy-demo-nodes-cpp, ros-foxy-action-tutorials-py, ros-foxy-action-tutorials-cpp?

mgonzs13 avatar Jun 05 '24 12:06 mgonzs13

Yes it started working but I am not able to understand how can I build a custom FSM on yasmin. Could we please have a call on this where you can explain me the implementation of yasmin on my project? I am a Masters student at Coburg University of applied science in germany and I am currently working on an autonomous vehicle, where the vehicle needs to park itself autonomously in the parking spot and I am working on the behaviour planning component which decides the state of the vehicle.

amodpatil1 avatar Jun 05 '24 14:06 amodpatil1

@amodpatil1, you have several examples in the README that includes basic states, ROS 2-based states and a demo with Nav2. If you want further explanations, you can send me an email.

mgonzs13 avatar Jun 06 '24 08:06 mgonzs13

Do I need to have a separate package for my state machine?

amodpatil1 avatar Jun 06 '24 15:06 amodpatil1

Yes, you should create a new package with your code.

mgonzs13 avatar Jun 06 '24 16:06 mgonzs13

do I need to add the dependencies from yasmin into my package.xml as well?

amodpatil1 avatar Jun 06 '24 16:06 amodpatil1

No, but you can add them to the package.xml.

mgonzs13 avatar Jun 06 '24 19:06 mgonzs13

What would be the effieicent way to implement yasmin? Would it be via creating a package or a YAML file?

amodpatil1 avatar Jun 07 '24 09:06 amodpatil1

Can I use this as a reference for my custom machine?

Copyright (C) 2023 Miguel Ángel González Santamarta

This program is free software: you can redistribute it and/or modify

it under the terms of the GNU General Public License as published by

the Free Software Foundation, either version 3 of the License, or

(at your option) any later version.

This program is distributed in the hope that it will be useful,

but WITHOUT ANY WARRANTY; without even the implied warranty of

MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the

GNU General Public License for more details.

You should have received a copy of the GNU General Public License

along with this program. If not, see https://www.gnu.org/licenses/.

from typing import Dict, List, Union from threading import Lock from yasmin.state import State from yasmin.blackboard import Blackboard

class StateMachine(State): def init(self, outcomes: List[str]) -> None:

    super().__init__(outcomes)

    self._states = {}
    self._start_state = None
    self.__current_state = None
    self.__current_state_lock = Lock()

def add_state(
    self,
    name: str,
    state: State,
    transitions: Dict[str, str] = None
) -> None:

    if not transitions:
        transitions = {}

    self._states[name] = {
        "state": state,
        "transitions": transitions
    }

    if not self._start_state:
        self._start_state = name

def set_start_state(self, name: str) -> None:
    self._start_state = name

def get_start_state(self) -> str:
    return self._start_state

def cancel_state(self) -> None:
    super().cancel_state()
    with self.__current_state_lock:
        if self.__current_state:
            self._states[self.__current_state]["state"].cancel_state()

def execute(self, blackboard: Blackboard) -> str:

    with self.__current_state_lock:
        self.__current_state = self._start_state

    while True:

        with self.__current_state_lock:
            state = self._states[self.__current_state]

        outcome = state["state"](blackboard)

        # check outcome belongs to state
        if outcome not in state["state"].get_outcomes():
            raise Exception(
                f"Outcome ({outcome}) is not register in state {self.__current_state}")

        # translate outcome using transitions
        if outcome in state["transitions"]:
            outcome = state["transitions"][outcome]

        # outcome is an outcome of the sm
        if outcome in self.get_outcomes():
            with self.__current_state_lock:
                self.__current_state = None
            return outcome

        # outcome is a state
        elif outcome in self._states:
            with self.__current_state_lock:
                self.__current_state = outcome

        # outcome is not in the sm
        else:
            raise Exception(f"Outcome ({outcome}) without transition")

def get_states(self) -> Dict[str, Union[State, Dict[str, str]]]:
    return self._states

def get_current_state(self) -> str:
    with self.__current_state_lock:
        if self.__current_state:
            return self.__current_state

    return ""

def __str__(self) -> str:
    return f"StateMachine: {self._states}"

amodpatil1 avatar Jun 07 '24 09:06 amodpatil1

What would be the effieicent way to implement yasmin? Would it be via creating a package or a YAML file?

I prefer using new packages. What do you mean by a YAML file?

Can I use this as a reference for my custom machine?

What do you mean by reference?

mgonzs13 avatar Jun 07 '24 10:06 mgonzs13

I mean can I write my state machine using the one you wrote as a base for mine custom state machine

amodpatil1 avatar Jun 08 '24 21:06 amodpatil1

states:

  • id: idle on_enter:

    • log: Entered idle state
    • custom_action: adapt_vi_start
    • custom_action: adapt_loc_start
    • custom_action: adapt_obj_start
    • custom_action: adapt_envmod_start
    • custom_action: ylidar_start
    • custom_action: adapt_livtrac_start transitions:
    • trigger: start target: driving
  • id: driving on_enter:

    • log: Entered driving state
    • custom_action: adapt_vi_drive
    • custom_action: adapt_loc_drive
    • custom_action: adapt_obj_drive
    • custom_action: adapt_envmod_drive
    • custom_action: ylidar_drive
    • custom_action: adapt_livtrac_drive transitions:
    • trigger: stop target: idle

This is the example for the yaml file I have not implemented this

amodpatil1 avatar Jun 08 '24 21:06 amodpatil1