Skip to content

Commit a7b2593

Browse files
committed
Merge branch 'humble-devel' of https://github.com/CoreSenseEU/CoreSense4Home into humble-devel
2 parents 3adc99c + 4812857 commit a7b2593

File tree

19 files changed

+962
-203
lines changed

19 files changed

+962
-203
lines changed

bt_nodes/bt_test/CMakeLists.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ find_package(arm REQUIRED)
2424
find_package(tf2_ros REQUIRED)
2525
find_package(hri REQUIRED)
2626
find_package(perception_system_interfaces REQUIRED)
27+
find_package(kb_msgs REQUIRED)
2728
# find_package(backward_ros REQUIRED)
2829

2930
set(CMAKE_CXX_STANDARD 17)
@@ -45,6 +46,7 @@ set(dependencies
4546
arm
4647
geometry_msgs
4748
perception_system_interfaces
49+
kb_msgs
4850
# backward_ros
4951
)
5052

@@ -204,6 +206,11 @@ add_executable(extract_person_description_test src/extract_person_description_te
204206
ament_target_dependencies(extract_person_description_test ${dependecies})
205207
target_link_libraries(extract_person_description_test perception::extract_person_description_bt_node perception::is_detected_bt_node hri::speak_bt_node)
206208

209+
# store guest info test
210+
add_executable(store_guest_info_test src/store_guest_info_test.cpp)
211+
ament_target_dependencies(store_guest_info_test ${dependencies})
212+
target_link_libraries(store_guest_info_test hri::store_guest_info_bt_node hri::get_guest_info_bt_node)
213+
207214
# gpsr test
208215
add_executable(gpsr_test src/gpsr_test.cpp)
209216
ament_target_dependencies(gpsr_test ${dependencies})
@@ -400,6 +407,7 @@ install(TARGETS
400407
extract_person_description_test
401408
music_test
402409
set_blackboard_test
410+
store_guest_info_test
403411

404412
gpsr_test
405413
gpsr_answerquiz_test
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?xml version="1.0"?>
2+
<root main_tree_to_execute="BehaviorTree">
3+
<!-- ////////// -->
4+
<BehaviorTree ID="BehaviorTree">
5+
<Sequence>
6+
<!-- <Action ID="StoreGuestInfo" guest_name="Irene" guest_drink="Cola" guest_description="Long hair and glasses."/> -->
7+
<Action ID="GetGuestInfo" guest_name="{guest_name}" guest_drink="{guest_drink}" guest_description="{guest_description}"/>
8+
</Sequence>
9+
</BehaviorTree>
10+
<!-- ////////// -->
11+
<TreeNodesModel>
12+
<Action ID="StoreGuestInfo">
13+
<input_port name="guest_name"/>
14+
<input_port name="guest_drink"/>
15+
<input_port name="guest_description"/>
16+
</Action>
17+
</TreeNodesModel>
18+
</root>

bt_nodes/bt_test/package.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
<depend>tf2_ros</depend>
2626
<depend>hri</depend>
2727
<depend>perception_system_interfaces</depend>
28+
<depend>kb_msgs</depend>
2829

2930
<test_depend>ament_lint_auto</test_depend>
3031
<test_depend>ament_lint_common</test_depend>
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#include "ament_index_cpp/get_package_share_directory.hpp"
2+
#include "behaviortree_cpp_v3/behavior_tree.h"
3+
#include "behaviortree_cpp_v3/bt_factory.h"
4+
#include "behaviortree_cpp_v3/loggers/bt_zmq_publisher.h"
5+
#include "behaviortree_cpp_v3/utils/shared_library.h"
6+
#include "rclcpp/rclcpp.hpp"
7+
#include "rclcpp_cascade_lifecycle/rclcpp_cascade_lifecycle.hpp"
8+
9+
int main(int argc, char * argv[])
10+
{
11+
rclcpp::init(argc, argv);
12+
auto node = std::make_shared<rclcpp_cascade_lifecycle::CascadeLifecycleNode>("store_guest_info_test_node");
13+
BT::BehaviorTreeFactory factory;
14+
BT::SharedLibrary loader;
15+
16+
factory.registerFromPlugin(loader.getOSName("store_guest_info_bt_node"));
17+
factory.registerFromPlugin(loader.getOSName("get_guest_info_bt_node"));
18+
std::string pkgpath = ament_index_cpp::get_package_share_directory("bt_test");
19+
std::string xml_file = pkgpath + "/bt_xml/store_guest_info.xml";
20+
21+
auto blackboard = BT::Blackboard::create();
22+
blackboard->set("node", node);
23+
BT::Tree tree = factory.createTreeFromFile(xml_file, blackboard);
24+
25+
auto publisher_zmq = std::make_shared<BT::PublisherZMQ>(tree, 10, 2666, 2667);
26+
27+
node->trigger_transition(lifecycle_msgs::msg::Transition::TRANSITION_CONFIGURE);
28+
node->trigger_transition(lifecycle_msgs::msg::Transition::TRANSITION_ACTIVATE);
29+
30+
rclcpp::Rate rate(10);
31+
32+
BT::NodeStatus status = BT::NodeStatus::RUNNING;
33+
bool finish = false;
34+
while (!finish && rclcpp::ok()) {
35+
rclcpp::spin_some(node->get_node_base_interface());
36+
37+
status = tree.rootNode()->executeTick();
38+
finish = (status == BT::NodeStatus::SUCCESS) || (status == BT::NodeStatus::FAILURE);
39+
40+
rate.sleep();
41+
}
42+
std::cout << "Store Guest Info Finished with status: " << status << std::endl;
43+
rclcpp::shutdown();
44+
return 0;
45+
}

bt_nodes/configuration/src/configuration/init_receptionist.cpp

Lines changed: 41 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@ InitReceptionist::InitReceptionist(
2323
{
2424
config().blackboard->get("node", node_);
2525

26-
node_->declare_parameter("cam_frame", "head_front_camera_rgb_optical_frame");
26+
node_->declare_parameter("cam_frame", "head_front_camera_color_optical_frame");
2727
node_->declare_parameter("manipulation_frame", "base_link");
2828
// node_->declare_parameter("party_wp", std::vector<double>{0.0, 0.0, 0.0});
2929
// node_->declare_parameter("entrance_wp", std::vector<double>{0.0, 0.0, 0.0});
3030
node_->declare_parameter("host_name", "John Doe");
3131
node_->declare_parameter("host_drink", "beer");
32-
// node_->declare_parameter("waypoints_names", std::vector<std::string>{});
32+
node_->declare_parameter("waypoints_names", std::vector<std::string>{});
3333

3434
tf_buffer_ = std::make_shared<tf2_ros::Buffer>(node_->get_clock());
3535
tf_listener_ = std::make_shared<tf2_ros::TransformListener>(*tf_buffer_);
@@ -43,47 +43,58 @@ BT::NodeStatus InitReceptionist::tick()
4343

4444
if (
4545
node_->has_parameter("cam_frame") && node_->has_parameter("manipulation_frame") &&
46-
node_->has_parameter("host_name") && node_->has_parameter("host_drink"))
47-
// && node_->has_parameter("waypoints_names"))
46+
node_->has_parameter("host_name") && node_->has_parameter("host_drink")
47+
&& node_->has_parameter("waypoints_names"))
4848
// node_->has_parameter("party_wp") && node_->has_parameter("entrance_wp"))
4949
{
5050
node_->get_parameter("cam_frame", cam_frame_);
5151
node_->get_parameter("manipulation_frame", manipulation_frame_);
5252
node_->get_parameter("host_name", host_name_);
5353
node_->get_parameter("host_drink", host_drink_);
54-
// node_->get_parameter("waypoints_names", wp_names_);
55-
56-
// for (auto wp : wp_names_) {
57-
// node_->declare_parameter("waypoints." + wp, std::vector<double>());
58-
// std::vector<double> wp_pos;
59-
// node_->get_parameter("waypoints." + wp, wp_pos);
60-
// geometry_msgs::msg::TransformStamped transform_msg;
61-
// tf2::Quaternion q;
62-
63-
// if (wp.find("entrance")!=std::string::npos) {
64-
// setOutput("entrance_wp", wp);
65-
// } else if (wp.find("party")!=std::string::npos) {
66-
// setOutput("party_wp", wp);
67-
// }
68-
69-
// q.setRPY(0, 0, wp_pos[2]);
70-
// transform_msg.header.frame_id = "map";
71-
72-
// transform_msg.child_frame_id = wp;
73-
// transform_msg.transform.translation.x = wp_pos[0];
74-
// transform_msg.transform.translation.y = wp_pos[1];
75-
// transform_msg.transform.rotation = tf2::toMsg(q);
76-
// tf_static_broadcaster_->sendTransform(transform_msg);
77-
// rclcpp::spin_some(node_);
78-
// }
54+
node_->get_parameter("waypoints_names", wp_names_);
55+
56+
RCLCPP_INFO(
57+
node_->get_logger(), "Waypoints to be initialized: [%s]",
58+
std::to_string(wp_names_.size()).c_str());
59+
60+
for (auto wp : wp_names_) {
61+
node_->declare_parameter("waypoints." + wp, std::vector<double>());
62+
std::vector<double> wp_pos;
63+
node_->get_parameter("waypoints." + wp, wp_pos);
64+
RCLCPP_INFO(
65+
node_->get_logger(), "Waypoint [%s] position: x: %.2f, y: %.2f, yaw: %.2f", wp.c_str(),
66+
wp_pos[0], wp_pos[1], wp_pos[2]);
67+
geometry_msgs::msg::TransformStamped transform_msg;
68+
tf2::Quaternion q;
69+
70+
if (wp.find("entrance")!=std::string::npos) {
71+
setOutput("entrance_wp", wp);
72+
RCLCPP_INFO(
73+
node_->get_logger(), "Entrance waypoint set to frame: [%s]", wp.c_str());
74+
} else if (wp.find("party")!=std::string::npos) {
75+
setOutput("party_wp", wp);
76+
}
77+
78+
q.setRPY(0, 0, wp_pos[2]);
79+
transform_msg.header.frame_id = "map";
80+
81+
transform_msg.child_frame_id = wp;
82+
transform_msg.transform.translation.x = wp_pos[0];
83+
transform_msg.transform.translation.y = wp_pos[1];
84+
transform_msg.transform.rotation = tf2::toMsg(q);
85+
tf_static_broadcaster_->sendTransform(transform_msg);
86+
RCLCPP_INFO(
87+
node_->get_logger(), "Published static transform for waypoint [%s]", wp.c_str());
88+
rclcpp::spin_some(node_->get_node_base_interface());
89+
}
7990

8091
geometry_msgs::msg::TransformStamped transform_msg;
8192

8293
transform_msg.header.frame_id = "base_link";
8394

8495
transform_msg.child_frame_id = "attention_home";
8596
transform_msg.transform.translation.x = 1.5;
86-
transform_msg.transform.translation.z = 1.5;
97+
transform_msg.transform.translation.z = 0.5;
8798
tf_static_broadcaster_->sendTransform(transform_msg);
8899
rclcpp::spin_some(node_->get_node_base_interface());
89100

bt_nodes/hri/CMakeLists.txt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ find_package(std_srvs REQUIRED)
2121
find_package(sensor_msgs REQUIRED)
2222
find_package(gpsr_msgs REQUIRED)
2323
find_package(audio_common_msgs REQUIRED)
24+
find_package(perception_system_interfaces REQUIRED)
25+
find_package(kb_msgs REQUIRED)
2426
set(CMAKE_CXX_STANDARD 17)
2527

2628
set(dependencies
@@ -38,6 +40,8 @@ set(dependencies
3840
gpsr_msgs
3941
std_srvs
4042
audio_common_msgs
43+
perception_system_interfaces
44+
kb_msgs
4145
)
4246

4347
include_directories(include)
@@ -75,6 +79,12 @@ list(APPEND plugin_libs start_music_bt_node)
7579
add_library(stop_music_bt_node SHARED src/hri/stop_music.cpp)
7680
list(APPEND plugin_libs stop_music_bt_node)
7781

82+
add_library(store_guest_info_bt_node SHARED src/hri/dialog/store_guest_info.cpp)
83+
list(APPEND plugin_libs store_guest_info_bt_node)
84+
85+
add_library(get_guest_info_bt_node SHARED src/hri/dialog/get_guest_info.cpp)
86+
list(APPEND plugin_libs get_guest_info_bt_node)
87+
7888
foreach(bt_plugin ${plugin_libs})
7989
ament_target_dependencies(${bt_plugin} ${dependencies})
8090
target_compile_definitions(${bt_plugin} PRIVATE BT_PLUGIN_EXPORT)

bt_nodes/hri/include/hri/check_policy.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
#include "rclcpp/rclcpp.hpp"
2727
#include "rclcpp_cascade_lifecycle/rclcpp_cascade_lifecycle.hpp"
2828
#include "std_msgs/msg/int8.hpp"
29+
#include "perception_system_interfaces/msg/detection_array.hpp"
2930

3031
namespace dialog
3132
{
@@ -56,8 +57,8 @@ class CheckPolicy
5657
std::string image_topic_;
5758
bool value_;
5859
sensor_msgs::msg::Image::SharedPtr image_;
59-
rclcpp::Subscription<sensor_msgs::msg::Image>::SharedPtr image_sub_;
60-
void image_callback(const sensor_msgs::msg::Image::SharedPtr msg);
60+
rclcpp::Subscription<perception_system_interfaces::msg::DetectionArray>::SharedPtr image_sub_;
61+
void image_callback(const perception_system_interfaces::msg::DetectionArray::SharedPtr msg);
6162

6263
};
6364

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
// Copyright 2024 Intelligent Robotics Lab - Gentlebots
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions andGO2OBJECT
13+
// limitations under the License.
14+
15+
#ifndef HRI__GEST_GUEST_INFO_HPP_
16+
#define HRI__GEST_GUEST_INFO_HPP_
17+
18+
#include <chrono>
19+
#include <functional>
20+
21+
#include "behaviortree_cpp_v3/behavior_tree.h"
22+
#include "behaviortree_cpp_v3/bt_factory.h"
23+
#include "std_msgs/msg/string.hpp"
24+
#include "kb_msgs/srv/query.hpp"
25+
#include "rclcpp/rclcpp.hpp"
26+
#include "rclcpp_cascade_lifecycle/rclcpp_cascade_lifecycle.hpp"
27+
#include "hri/bt_service_node.hpp"
28+
29+
namespace dialog
30+
{
31+
32+
class GetGuestInfo : public hri::BtServiceNode<
33+
kb_msgs::srv::Query,
34+
rclcpp_cascade_lifecycle::CascadeLifecycleNode>
35+
{
36+
public:
37+
explicit GetGuestInfo(const std::string & xml_tag_name, const std::string & srv_name,
38+
const BT::NodeConfiguration & conf);
39+
40+
void on_tick() override;
41+
void on_result() override;
42+
43+
static BT::PortsList providedPorts()
44+
{
45+
return BT::PortsList(
46+
{BT::OutputPort<std::string>("guest_name"),
47+
BT::OutputPort<std::string>("guest_drink"),
48+
BT::OutputPort<std::string>("guest_description"),
49+
});
50+
}
51+
52+
private:
53+
std::shared_ptr<rclcpp_cascade_lifecycle::CascadeLifecycleNode> node_;
54+
rclcpp::Publisher<std_msgs::msg::String>::SharedPtr kb_publisher_;
55+
56+
std::string guest_name_, guest_drink_, guest_description_, guest_id_;
57+
};
58+
59+
} // namespace dialog
60+
61+
#endif // HRI__GEST_GUEST_INFO_HPP_
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
// Copyright 2024 Intelligent Robotics Lab - Gentlebots
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions andGO2OBJECT
13+
// limitations under the License.
14+
15+
#ifndef HRI__STORE_GUEST_INFO_HPP_
16+
#define HRI__STORE_GUEST_INFO_HPP_
17+
18+
#include <chrono>
19+
#include <functional>
20+
21+
#include "behaviortree_cpp_v3/behavior_tree.h"
22+
#include "behaviortree_cpp_v3/bt_factory.h"
23+
#include "std_msgs/msg/string.hpp"
24+
#include "kb_msgs/srv/query.hpp"
25+
#include "rclcpp/rclcpp.hpp"
26+
#include "rclcpp_cascade_lifecycle/rclcpp_cascade_lifecycle.hpp"
27+
#include "hri/bt_service_node.hpp"
28+
29+
namespace dialog
30+
{
31+
32+
class StoreGuestInfo : public hri::BtServiceNode<
33+
kb_msgs::srv::Query,
34+
rclcpp_cascade_lifecycle::CascadeLifecycleNode>
35+
{
36+
public:
37+
explicit StoreGuestInfo(const std::string & xml_tag_name, const std::string & srv_name,
38+
const BT::NodeConfiguration & conf);
39+
40+
void on_tick() override;
41+
void on_result() override;
42+
43+
static BT::PortsList providedPorts()
44+
{
45+
return BT::PortsList(
46+
{BT::InputPort<std::string>("guest_name"),
47+
BT::InputPort<std::string>("guest_drink"),
48+
BT::InputPort<std::string>("guest_description"),
49+
});
50+
}
51+
52+
private:
53+
std::shared_ptr<rclcpp_cascade_lifecycle::CascadeLifecycleNode> node_;
54+
rclcpp::Publisher<std_msgs::msg::String>::SharedPtr kb_publisher_;
55+
56+
std::string guest_name_, guest_drink_, guest_description_;
57+
};
58+
59+
} // namespace dialog
60+
61+
#endif // HRI__STORE_GUEST_INFO_HPP_

bt_nodes/hri/package.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
<depend>shape_msgs</depend>
2020
<depend>std_msgs</depend>
2121
<depend>gpsr_msgs</depend>
22+
<depend>perception_system_interfaces</depend>
23+
<depend>kb_msgs</depend>
2224

2325
<test_depend>ament_lint_auto</test_depend>
2426
<test_depend>ament_lint_common</test_depend>

0 commit comments

Comments
 (0)