yasmin
yasmin copied to clipboard
Not able to run the demo
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.
Hey @amodpatil1, have you source (source install/setup.bash) after using colcon?
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.
I think there is some problem with the action_client_demo.py
Have you colcon all the yasmin packages (yasmin, yasmin_msgs, yasmin_demo, yasmin_ros, yasmin_viewe) or only yasmin?
I did it for yasmin only. Shouldn't the entire package get built when I do Colcon build?
No, since they are different packages.
okay I will try that.
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
That is a problem with the ROS 2 distro. Foxy EOL was on June 20th, 2023. Thus, yasmin was updated to Humble.
I have just added support for Foxy. It should work now.
okay I will try
--- 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
Pull and try again. I have done another update.
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
The service demo is not running
Both the commands are not executable
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).
I am able to find the demos for foxy, can you please help me out?
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?
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, 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.
Do I need to have a separate package for my state machine?
Yes, you should create a new package with your code.
do I need to add the dependencies from yasmin into my package.xml as well?
No, but you can add them to the package.xml.
What would be the effieicent way to implement yasmin? Would it be via creating a package or a YAML file?
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}"
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?
I mean can I write my state machine using the one you wrote as a base for mine custom state machine
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