Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New launch files and Narrate skill rename #8

Open
wants to merge 2 commits into
base: laboratory_tour_cpp_datamodel_backup
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 0 additions & 108 deletions laboratory-tour/launch/bt_launch_robot.py

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
cmake_minimum_required(VERSION 3.16)
project(narrate_skill)
project(narrate_poi_skill)
# set(CMAKE_CXX_STANDARD 20)
# set(CMAKE_CXX_STANDARD_REQUIRED ON)

Expand Down Expand Up @@ -29,10 +29,10 @@ target_include_directories(${PROJECT_NAME}
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>)
target_sources( ${PROJECT_NAME} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/NarrateSkill.cpp
${CMAKE_CURRENT_SOURCE_DIR}/include/NarrateSkill.h
#${CMAKE_CURRENT_SOURCE_DIR}/src/NarrateDataModel.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp
${CMAKE_CURRENT_SOURCE_DIR}/src/NarratePoiSkill.cpp
${CMAKE_CURRENT_SOURCE_DIR}/include/NarratePoiSkill.h
#${CMAKE_CURRENT_SOURCE_DIR}/src/NarrateDataModel.cpp
#${CMAKE_CURRENT_SOURCE_DIR}/include/NarrateDataModel.h
)

Expand All @@ -50,6 +50,6 @@ if(BUILD_TESTING)
set(ament_cmake_cpplint_FOUND TRUE)
ament_lint_auto_find_test_dependencies()
endif()
qt6_add_statecharts(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/src/NarrateSkillSM.scxml)
qt6_add_statecharts(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/src/NarratePoiSkillSM.scxml)

ament_package()
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
#include <mutex>
#include <thread>
#include <rclcpp/rclcpp.hpp>
#include "NarrateSkillSM.h"
#include "NarratePoiSkillSM.h"
#include <bt_interfaces/msg/action_response.hpp>
#include <narrate_interfaces/srv/narrate.hpp>
#include <narrate_interfaces/srv/is_done.hpp>
Expand All @@ -24,10 +24,10 @@ enum class Status{
failure
};

class NarrateSkill
class NarratePoiSkill
{
public:
NarrateSkill(std::string name );
NarratePoiSkill(std::string name );
bool start(int argc, char * argv[]);
static void spin(std::shared_ptr<rclcpp::Node> node);
void tick( [[maybe_unused]] const std::shared_ptr<bt_interfaces::srv::TickAction::Request> request,
Expand All @@ -40,12 +40,12 @@ class NarrateSkill
std::shared_ptr<rclcpp::Node> m_node;
std::mutex m_requestMutex;
std::string m_name;
NarrateSkillAction m_stateMachine;
NarratePoiSkillAction m_stateMachine;

std::atomic<Status> m_tickResult{Status::undefined};
rclcpp::Service<bt_interfaces::srv::TickAction>::SharedPtr m_tickService;
std::atomic<bool> m_haltResult{false};
rclcpp::Service<bt_interfaces::srv::HaltAction>::SharedPtr m_haltService;

};

Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>narrate_skill</name>
<name>narrate_poi_skill</name>
<version>0.0.0</version>
<description>TODO: Package description</description>
<maintainer email="[email protected]">Stefano Bernagozzi</maintainer>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* *
******************************************************************************/

#include "NarrateSkill.h"
#include "NarratePoiSkill.h"
#include <future>
#include <QTimer>
#include <QDebug>
Expand All @@ -23,7 +23,7 @@ T convert(const std::string& str) {
return std::stod(str);
} else if constexpr (std::is_same_v<T, float>) {
return std::stof(str);
}
}
else if constexpr (std::is_same_v<T, std::string>) {
return str;
}
Expand All @@ -33,36 +33,36 @@ T convert(const std::string& str) {
}
}

NarrateSkill::NarrateSkill(std::string name ) :
NarratePoiSkill::NarratePoiSkill(std::string name ) :
m_name(std::move(name))
{
}

void NarrateSkill::spin(std::shared_ptr<rclcpp::Node> node)
void NarratePoiSkill::spin(std::shared_ptr<rclcpp::Node> node)
{
rclcpp::spin(node);
rclcpp::shutdown();
}

bool NarrateSkill::start(int argc, char*argv[])
bool NarratePoiSkill::start(int argc, char*argv[])
{
if(!rclcpp::ok())
{
rclcpp::init(/*argc*/ argc, /*argv*/ argv);
}

m_node = rclcpp::Node::make_shared(m_name + "Skill");
RCLCPP_DEBUG_STREAM(m_node->get_logger(), "NarrateSkill::start");
std::cout << "NarrateSkill::start";
RCLCPP_DEBUG_STREAM(m_node->get_logger(), "NarratePoiSkill::start");
std::cout << "NarratePoiSkill::start";

m_tickService = m_node->create_service<bt_interfaces::srv::TickAction>(m_name + "Skill/tick",
std::bind(&NarrateSkill::tick,
std::bind(&NarratePoiSkill::tick,
this,
std::placeholders::_1,
std::placeholders::_2));

m_haltService = m_node->create_service<bt_interfaces::srv::HaltAction>(m_name + "Skill/halt",
std::bind(&NarrateSkill::halt,
std::bind(&NarratePoiSkill::halt,
this,
std::placeholders::_1,
std::placeholders::_2));
Expand All @@ -77,14 +77,14 @@ bool NarrateSkill::start(int argc, char*argv[])
RCLCPP_ERROR(rclcpp::get_logger("rclcpp"), "Interrupted while waiting for the service 'Narrate'. Exiting.");
wait_succeded = false;
m_stateMachine.submitEvent("NarrateComponent.Narrate.Return");
}
}
}
if (wait_succeded) {
// send the request
// send the request
auto result = clientNarrate->async_send_request(request);
auto futureResult = rclcpp::spin_until_future_complete(nodeNarrate, result);
auto response = result.get();
if (futureResult == rclcpp::FutureReturnCode::SUCCESS)
if (futureResult == rclcpp::FutureReturnCode::SUCCESS)
{
if( response->is_ok ==true) {
QVariantMap data;
Expand All @@ -102,7 +102,7 @@ bool NarrateSkill::start(int argc, char*argv[])
});

m_stateMachine.connectToEvent("TICK_RESPONSE", [this]([[maybe_unused]]const QScxmlEvent & event){
RCLCPP_INFO(m_node->get_logger(), "NarrateSkill::tickReturn %s", event.data().toMap()["result"].toString().toStdString().c_str());
RCLCPP_INFO(m_node->get_logger(), "NarratePoiSkill::tickReturn %s", event.data().toMap()["result"].toString().toStdString().c_str());
std::string result = event.data().toMap()["result"].toString().toStdString();
if (result == "SUCCESS" )
{
Expand All @@ -113,7 +113,7 @@ bool NarrateSkill::start(int argc, char*argv[])
m_tickResult.store(Status::running);
}
else if (result == "FAILURE" )
{
{
m_tickResult.store(Status::failure);
}
});
Expand All @@ -128,14 +128,14 @@ bool NarrateSkill::start(int argc, char*argv[])
RCLCPP_ERROR(rclcpp::get_logger("rclcpp"), "Interrupted while waiting for the service 'IsDone'. Exiting.");
wait_succeded = false;
m_stateMachine.submitEvent("NarrateComponent.IsDone.Return");
}
}
}
if (wait_succeded) {
// send the request
// send the request
auto result = clientIsDone->async_send_request(request);
auto futureResult = rclcpp::spin_until_future_complete(nodeIsDone, result);
auto response = result.get();
if (futureResult == rclcpp::FutureReturnCode::SUCCESS)
if (futureResult == rclcpp::FutureReturnCode::SUCCESS)
{
if( response->is_ok ==true) {
QVariantMap data;
Expand All @@ -153,7 +153,7 @@ bool NarrateSkill::start(int argc, char*argv[])
});

m_stateMachine.connectToEvent("HALT_RESPONSE", [this]([[maybe_unused]]const QScxmlEvent & event){
RCLCPP_INFO(m_node->get_logger(), "NarrateSkill::haltresponse");
RCLCPP_INFO(m_node->get_logger(), "NarratePoiSkill::haltresponse");
m_haltResult.store(true);
});

Expand All @@ -163,21 +163,21 @@ bool NarrateSkill::start(int argc, char*argv[])
return true;
}

void NarrateSkill::tick( [[maybe_unused]] const std::shared_ptr<bt_interfaces::srv::TickAction::Request> request,
void NarratePoiSkill::tick( [[maybe_unused]] const std::shared_ptr<bt_interfaces::srv::TickAction::Request> request,
std::shared_ptr<bt_interfaces::srv::TickAction::Response> response)
{
std::lock_guard<std::mutex> lock(m_requestMutex);
RCLCPP_INFO(m_node->get_logger(), "NarrateSkill::tick");
RCLCPP_INFO(m_node->get_logger(), "NarratePoiSkill::tick");
auto message = bt_interfaces::msg::ActionResponse();
m_tickResult.store(Status::undefined); //here we can put a struct
m_stateMachine.submitEvent("CMD_TICK");
while(m_tickResult.load()== Status::undefined)

while(m_tickResult.load()== Status::undefined)
{
std::this_thread::sleep_for (std::chrono::milliseconds(100));
// qInfo() << "active names" << m_stateMachine.activeStateNames();
}
switch(m_tickResult.load())
switch(m_tickResult.load())
{
case Status::running:
response->status.status = message.SKILL_RUNNING;
Expand All @@ -187,27 +187,27 @@ void NarrateSkill::tick( [[maybe_unused]] const std::shared_ptr<bt_interfaces::s
break;
case Status::success:
response->status.status = message.SKILL_SUCCESS;
break;
break;
}
RCLCPP_INFO(m_node->get_logger(), "NarrateSkill::tickDone");
RCLCPP_INFO(m_node->get_logger(), "NarratePoiSkill::tickDone");

response->is_ok = true;
}

void NarrateSkill::halt( [[maybe_unused]] const std::shared_ptr<bt_interfaces::srv::HaltAction::Request> request,
void NarratePoiSkill::halt( [[maybe_unused]] const std::shared_ptr<bt_interfaces::srv::HaltAction::Request> request,
[[maybe_unused]] std::shared_ptr<bt_interfaces::srv::HaltAction::Response> response)
{
std::lock_guard<std::mutex> lock(m_requestMutex);
RCLCPP_INFO(m_node->get_logger(), "NarrateSkill::halt");
RCLCPP_INFO(m_node->get_logger(), "NarratePoiSkill::halt");
m_haltResult.store(false); //here we can put a struct
m_stateMachine.submitEvent("CMD_HALT");
while(!m_haltResult.load())

while(!m_haltResult.load())
{
std::this_thread::sleep_for (std::chrono::milliseconds(100));
// qInfo() << "active names" << m_stateMachine.activeStateNames();
}
RCLCPP_INFO(m_node->get_logger(), "NarrateSkill::haltDone");
RCLCPP_INFO(m_node->get_logger(), "NarratePoiSkill::haltDone");

response->is_ok = true;
}
Loading