[🤔 ROS2?] /chatbot/set_locale
#
Caution
This documentation page has been auto-generated.
It may be missing some details.
/chatbot/set_locale
Quick Facts
- Category
- Message type
Sets the current language of the RASA chatbot engine. Returns immediately if the required language is already loaded.
See Dialogue management and Internationalisation and language support for details.
Quick snippets#
Send a goal from the command-line#
$ ros2 action send_goal /chatbot/set_locale i18n_msgs/action/SetLocale # press Tab to complete the message prototype
How to use in your code#
Call the action from a Python script#
#!/usr/bin/env python
import rclpy
from rclpy.action import ActionClient
from rclpy.node import Node
from i18n_msgs.action import SetLocale
class SetLocaleActionClient(Node):
def __init__(self):
super().__init__('chatbot_set_locale_client')
self._action_client = ActionClient(self, SetLocale, '/chatbot/set_locale')
def send_goal(self, a, b):
goal_msg = SetLocale.Goal()
# TODO: adapt to the action's parameters
# check https://github.com/pal-robotics/i18n_msgs/tree/humble-devel/action/SetLocale.action
# for the possible goal parameters
# goal_msg.a = a
# goal_msg.b = b
self._action_client.wait_for_server()
return self._action_client.send_goal_async(goal_msg)
if __name__ == '__main__':
rclpy.init(args=args)
action_client = SetLocaleActionClient()
# TODO: adapt to your action's parameters
future = action_client.send_goal(a, b)
rclpy.spin_until_future_complete(action_client, future)
rclpy.shutdown()
Call the action from a C++ program#
#include <functional>
#include <future>
#include <memory>
#include <string>
#include <sstream>
#include <chrono>
#include "i18n_msgs/action/set_locale.hpp"
#include "rclcpp/rclcpp.hpp"
#include "rclcpp_action/rclcpp_action.hpp"
#include "rclcpp_components/register_node_macro.hpp"
using namespace std::chrono_literals;
using namespace std;
class SetLocaleActionClient : public rclcpp::Node
{
public:
using SetLocale = i18n_msgs::action::SetLocale;
using GoalHandleSetLocale = rclcpp_action::ClientGoalHandle<SetLocale>;
explicit SetLocaleActionClient(const rclcpp::NodeOptions & options)
: Node("chatbot_set_locale_action_client", options)
{
this->client_ptr_ = rclcpp_action::create_client<SetLocale>(
this,
"/chatbot/set_locale");
this->timer_ = this->create_wall_timer(
500ms,
bind(&SetLocaleActionClient::send_goal, this));
}
void send_goal()
{
using namespace std::placeholders;
this->timer_->cancel();
if (!this->client_ptr_->wait_for_action_server()) {
RCLCPP_ERROR(this->get_logger(), "Action server not available after waiting");
rclcpp::shutdown();
}
auto goal_msg = SetLocale::Goal();
// check https://github.com/pal-robotics/i18n_msgs/tree/humble-devel/action/SetLocale.action
// for the possible goal parameters
// goal_msg.... = ...;
RCLCPP_INFO(this->get_logger(), "Sending goal");
auto send_goal_options = rclcpp_action::Client<SetLocale>::SendGoalOptions();
send_goal_options.goal_response_callback =
bind(&SetLocaleActionClient::goal_response_callback, this, _1);
send_goal_options.feedback_callback =
bind(&SetLocaleActionClient::feedback_callback, this, _1, _2);
send_goal_options.result_callback =
bind(&SetLocaleActionClient::result_callback, this, _1);
this->client_ptr_->async_send_goal(goal_msg, send_goal_options);
}
private:
rclcpp_action::Client<SetLocale>::SharedPtr client_ptr_;
rclcpp::TimerBase::SharedPtr timer_;
void goal_response_callback(const GoalHandleSetLocale::SharedPtr & goal_handle)
{
if (!goal_handle) {
RCLCPP_ERROR(this->get_logger(), "Goal was rejected by server");
} else {
RCLCPP_INFO(this->get_logger(), "Goal accepted by server, waiting for result");
}
}
void feedback_callback(
GoalHandleSetLocale::SharedPtr,
const shared_ptr<const SetLocale::Feedback> feedback)
{
stringstream ss;
ss << "Next number in sequence received: ";
for (auto number : feedback->partial_sequence) {
ss << number << " ";
}
RCLCPP_INFO(this->get_logger(), ss.str().c_str());
}
void result_callback(const GoalHandleSetLocale::WrappedResult & result)
{
switch (result.code) {
case rclcpp_action::ResultCode::SUCCEEDED:
break;
case rclcpp_action::ResultCode::ABORTED:
RCLCPP_ERROR(this->get_logger(), "Goal was aborted");
return;
case rclcpp_action::ResultCode::CANCELED:
RCLCPP_ERROR(this->get_logger(), "Goal was canceled");
return;
default:
RCLCPP_ERROR(this->get_logger(), "Unknown result code");
return;
}
stringstream ss;
ss << "Result received: ";
for (auto number : result.result->sequence) {
ss << number << " ";
}
RCLCPP_INFO(this->get_logger(), ss.str().c_str());
rclcpp::shutdown();
}
}; // class SetLocaleActionClient
RCLCPP_COMPONENTS_REGISTER_NODE(SetLocaleActionClient)