Skip to content

Commit ca731fb

Browse files
isamu-takagiStepTurtle
authored andcommitted
feat(default_ad_api): apply route_selector (autowarefoundation#6364)
* feat(default_ad_api): apply route_selector Signed-off-by: Takagi, Isamu <isamu.takagi@tier4.jp> * add interrupted state Signed-off-by: Takagi, Isamu <isamu.takagi@tier4.jp> * fix initializing state handling Signed-off-by: Takagi, Isamu <isamu.takagi@tier4.jp> --------- Signed-off-by: Takagi, Isamu <isamu.takagi@tier4.jp>
1 parent 522758b commit ca731fb

File tree

8 files changed

+251
-113
lines changed

8 files changed

+251
-113
lines changed

common/component_interface_specs/CMakeLists.txt

+1-22
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,8 @@ project(component_interface_specs)
44
find_package(autoware_cmake REQUIRED)
55
autoware_package()
66

7-
include_directories(
8-
include
9-
SYSTEM
10-
${rclcpp_INCLUDE_DIRS}
11-
${rosidl_runtime_cpp_INCLUDE_DIRS}
12-
${rcl_INCLUDE_DIRS}
13-
${autoware_adapi_v1_msgs_INCLUDE_DIRS}
14-
${autoware_auto_planning_msgs_INCLUDE_DIRS}
15-
${autoware_planning_msgs_INCLUDE_DIRS}
16-
${autoware_auto_vehicle_msgs_INCLUDE_DIRS}
17-
${tier4_control_msgs_INCLUDE_DIRS}
18-
${nav_msgs_INCLUDE_DIRS}
19-
${tier4_system_msgs_INCLUDE_DIRS}
20-
${tier4_vehicle_msgs_INCLUDE_DIRS}
21-
${autoware_auto_perception_msgs_INCLUDE_DIRS}
22-
${tier4_map_msgs_INCLUDE_DIRS}
23-
)
24-
257
if(BUILD_TESTING)
26-
ament_add_ros_isolated_gtest(test_component_interface_specs
8+
ament_auto_add_gtest(gtest_${PROJECT_NAME}
279
test/gtest_main.cpp
2810
test/test_planning.cpp
2911
test/test_control.cpp
@@ -33,9 +15,6 @@ if(BUILD_TESTING)
3315
test/test_perception.cpp
3416
test/test_vehicle.cpp
3517
)
36-
target_include_directories(test_component_interface_specs
37-
PRIVATE include
38-
)
3918
endif()
4019

4120
ament_auto_package()

common/component_interface_specs/include/component_interface_specs/planning.hpp

+17-46
Original file line numberDiff line numberDiff line change
@@ -17,77 +17,48 @@
1717

1818
#include <rclcpp/qos.hpp>
1919

20-
#include <autoware_adapi_v1_msgs/msg/route_state.hpp>
21-
#include <autoware_adapi_v1_msgs/srv/clear_route.hpp>
22-
#include <autoware_adapi_v1_msgs/srv/set_route.hpp>
23-
#include <autoware_adapi_v1_msgs/srv/set_route_points.hpp>
2420
#include <autoware_auto_planning_msgs/msg/trajectory.hpp>
2521
#include <autoware_planning_msgs/msg/lanelet_route.hpp>
22+
#include <tier4_planning_msgs/msg/route_state.hpp>
23+
#include <tier4_planning_msgs/srv/clear_route.hpp>
24+
#include <tier4_planning_msgs/srv/set_lanelet_route.hpp>
25+
#include <tier4_planning_msgs/srv/set_waypoint_route.hpp>
2626

2727
namespace planning_interface
2828
{
2929

30-
struct SetRoutePoints
30+
struct SetLaneletRoute
3131
{
32-
using Service = autoware_adapi_v1_msgs::srv::SetRoutePoints;
33-
static constexpr char name[] = "/planning/mission_planning/set_route_points";
32+
using Service = tier4_planning_msgs::srv::SetLaneletRoute;
33+
static constexpr char name[] = "/planning/mission_planning/route_selector/main/set_lanelet_route";
3434
};
3535

36-
struct SetRoute
36+
struct SetWaypointRoute
3737
{
38-
using Service = autoware_adapi_v1_msgs::srv::SetRoute;
39-
static constexpr char name[] = "/planning/mission_planning/set_route";
40-
};
41-
42-
struct ChangeRoutePoints
43-
{
44-
using Service = autoware_adapi_v1_msgs::srv::SetRoutePoints;
45-
static constexpr char name[] = "/planning/mission_planning/change_route_points";
46-
};
47-
48-
struct ChangeRoute
49-
{
50-
using Service = autoware_adapi_v1_msgs::srv::SetRoute;
51-
static constexpr char name[] = "/planning/mission_planning/change_route";
38+
using Service = tier4_planning_msgs::srv::SetWaypointRoute;
39+
static constexpr char name[] =
40+
"/planning/mission_planning/route_selector/main/set_waypoint_route";
5241
};
5342

5443
struct ClearRoute
5544
{
56-
using Service = autoware_adapi_v1_msgs::srv::ClearRoute;
57-
static constexpr char name[] = "/planning/mission_planning/clear_route";
45+
using Service = tier4_planning_msgs::srv::ClearRoute;
46+
static constexpr char name[] = "/planning/mission_planning/route_selector/main/clear_route";
5847
};
5948

6049
struct RouteState
6150
{
62-
using Message = autoware_adapi_v1_msgs::msg::RouteState;
63-
static constexpr char name[] = "/planning/mission_planning/route_state";
64-
static constexpr size_t depth = 1;
65-
static constexpr auto reliability = RMW_QOS_POLICY_RELIABILITY_RELIABLE;
66-
static constexpr auto durability = RMW_QOS_POLICY_DURABILITY_TRANSIENT_LOCAL;
67-
};
68-
69-
struct Route
70-
{
71-
using Message = autoware_planning_msgs::msg::LaneletRoute;
72-
static constexpr char name[] = "/planning/mission_planning/route";
73-
static constexpr size_t depth = 1;
74-
static constexpr auto reliability = RMW_QOS_POLICY_RELIABILITY_RELIABLE;
75-
static constexpr auto durability = RMW_QOS_POLICY_DURABILITY_TRANSIENT_LOCAL;
76-
};
77-
78-
struct NormalRoute
79-
{
80-
using Message = autoware_planning_msgs::msg::LaneletRoute;
81-
static constexpr char name[] = "/planning/mission_planning/normal_route";
51+
using Message = tier4_planning_msgs::msg::RouteState;
52+
static constexpr char name[] = "/planning/mission_planning/route_selector/main/state";
8253
static constexpr size_t depth = 1;
8354
static constexpr auto reliability = RMW_QOS_POLICY_RELIABILITY_RELIABLE;
8455
static constexpr auto durability = RMW_QOS_POLICY_DURABILITY_TRANSIENT_LOCAL;
8556
};
8657

87-
struct MrmRoute
58+
struct LaneletRoute
8859
{
8960
using Message = autoware_planning_msgs::msg::LaneletRoute;
90-
static constexpr char name[] = "/planning/mission_planning/mrm_route";
61+
static constexpr char name[] = "/planning/mission_planning/route_selector/main/route";
9162
static constexpr size_t depth = 1;
9263
static constexpr auto reliability = RMW_QOS_POLICY_RELIABILITY_RELIABLE;
9364
static constexpr auto durability = RMW_QOS_POLICY_DURABILITY_TRANSIENT_LOCAL;

common/component_interface_specs/package.xml

+3-7
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,8 @@
99
<license>Apache License 2.0</license>
1010

1111
<buildtool_depend>ament_cmake_auto</buildtool_depend>
12-
<buildtool_depend>ament_cmake_core</buildtool_depend>
13-
<buildtool_depend>ament_cmake_export_dependencies</buildtool_depend>
14-
<buildtool_depend>ament_cmake_test</buildtool_depend>
1512
<buildtool_depend>autoware_cmake</buildtool_depend>
1613

17-
<buildtool_export_depend>ament_cmake_core</buildtool_export_depend>
18-
<buildtool_export_depend>ament_cmake_test</buildtool_export_depend>
19-
2014
<depend>autoware_adapi_v1_msgs</depend>
2115
<depend>autoware_auto_perception_msgs</depend>
2216
<depend>autoware_auto_planning_msgs</depend>
@@ -28,9 +22,11 @@
2822
<depend>rosidl_runtime_cpp</depend>
2923
<depend>tier4_control_msgs</depend>
3024
<depend>tier4_map_msgs</depend>
25+
<depend>tier4_planning_msgs</depend>
3126
<depend>tier4_system_msgs</depend>
3227
<depend>tier4_vehicle_msgs</depend>
33-
<test_depend>ament_cmake_ros</test_depend>
28+
29+
<test_depend>ament_cmake_gtest</test_depend>
3430
<test_depend>ament_lint_auto</test_depend>
3531
<test_depend>autoware_lint_common</test_depend>
3632

common/component_interface_specs/test/test_planning.cpp

+2-20
Original file line numberDiff line numberDiff line change
@@ -27,26 +27,8 @@ TEST(planning, interface)
2727
}
2828

2929
{
30-
using planning_interface::Route;
31-
Route route;
32-
size_t depth = 1;
33-
EXPECT_EQ(route.depth, depth);
34-
EXPECT_EQ(route.reliability, RMW_QOS_POLICY_RELIABILITY_RELIABLE);
35-
EXPECT_EQ(route.durability, RMW_QOS_POLICY_DURABILITY_TRANSIENT_LOCAL);
36-
}
37-
38-
{
39-
using planning_interface::NormalRoute;
40-
NormalRoute route;
41-
size_t depth = 1;
42-
EXPECT_EQ(route.depth, depth);
43-
EXPECT_EQ(route.reliability, RMW_QOS_POLICY_RELIABILITY_RELIABLE);
44-
EXPECT_EQ(route.durability, RMW_QOS_POLICY_DURABILITY_TRANSIENT_LOCAL);
45-
}
46-
47-
{
48-
using planning_interface::MrmRoute;
49-
MrmRoute route;
30+
using planning_interface::LaneletRoute;
31+
LaneletRoute route;
5032
size_t depth = 1;
5133
EXPECT_EQ(route.depth, depth);
5234
EXPECT_EQ(route.reliability, RMW_QOS_POLICY_RELIABILITY_RELIABLE);

system/default_ad_api/src/routing.cpp

+91-8
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,33 @@
1818

1919
#include <memory>
2020

21+
namespace
22+
{
23+
24+
using autoware_adapi_v1_msgs::msg::ResponseStatus;
25+
26+
template <class InterfaceT>
27+
ResponseStatus route_already_set()
28+
{
29+
ResponseStatus status;
30+
status.success = false;
31+
status.code = InterfaceT::Service::Response::ERROR_INVALID_STATE;
32+
status.message = "The route is already set.";
33+
return status;
34+
}
35+
36+
template <class InterfaceT>
37+
ResponseStatus route_is_not_set()
38+
{
39+
ResponseStatus status;
40+
status.success = false;
41+
status.code = InterfaceT::Service::Response::ERROR_INVALID_STATE;
42+
status.message = "The route is not set yet.";
43+
return status;
44+
}
45+
46+
} // namespace
47+
2148
namespace default_ad_api
2249
{
2350

@@ -30,20 +57,25 @@ RoutingNode::RoutingNode(const rclcpp::NodeOptions & options) : Node("routing",
3057
adaptor.init_sub(sub_state_, this, &RoutingNode::on_state);
3158
adaptor.init_sub(sub_route_, this, &RoutingNode::on_route);
3259
adaptor.init_cli(cli_clear_route_, group_cli_);
60+
adaptor.init_cli(cli_set_waypoint_route_, group_cli_);
61+
adaptor.init_cli(cli_set_lanelet_route_, group_cli_);
3362
adaptor.init_srv(srv_clear_route_, this, &RoutingNode::on_clear_route);
34-
adaptor.relay_service(cli_set_route_, srv_set_route_, group_cli_);
35-
adaptor.relay_service(cli_set_route_points_, srv_set_route_points_, group_cli_);
36-
adaptor.relay_service(cli_change_route_, srv_change_route_, group_cli_);
37-
adaptor.relay_service(cli_change_route_points_, srv_change_route_points_, group_cli_);
63+
adaptor.init_srv(srv_set_route_, this, &RoutingNode::on_set_route);
64+
adaptor.init_srv(srv_set_route_points_, this, &RoutingNode::on_set_route_points);
65+
adaptor.init_srv(srv_change_route_, this, &RoutingNode::on_change_route);
66+
adaptor.init_srv(srv_change_route_points_, this, &RoutingNode::on_change_route_points);
3867

3968
adaptor.init_cli(cli_operation_mode_, group_cli_);
4069
adaptor.init_sub(sub_operation_mode_, this, &RoutingNode::on_operation_mode);
70+
71+
is_auto_mode_ = false;
72+
state_.state = State::Message::UNKNOWN;
4173
}
4274

4375
void RoutingNode::change_stop_mode()
4476
{
4577
using OperationModeRequest = system_interface::ChangeOperationMode::Service::Request;
46-
if (is_auto_mode) {
78+
if (is_auto_mode_) {
4779
const auto req = std::make_shared<OperationModeRequest>();
4880
req->mode = OperationModeRequest::STOP;
4981
cli_operation_mode_->async_send_request(req);
@@ -52,12 +84,19 @@ void RoutingNode::change_stop_mode()
5284

5385
void RoutingNode::on_operation_mode(const OperationModeState::Message::ConstSharedPtr msg)
5486
{
55-
is_auto_mode = msg->mode == OperationModeState::Message::AUTONOMOUS;
87+
is_auto_mode_ = msg->mode == OperationModeState::Message::AUTONOMOUS;
5688
}
5789

5890
void RoutingNode::on_state(const State::Message::ConstSharedPtr msg)
5991
{
60-
pub_state_->publish(*msg);
92+
// TODO(Takagi, Isamu): Add adapi initializing state.
93+
// Represent initializing state by not publishing the topic for now.
94+
if (msg->state == State::Message::INITIALIZING) {
95+
return;
96+
}
97+
98+
state_ = *msg;
99+
pub_state_->publish(conversion::convert_state(*msg));
61100

62101
// Change operation mode to stop when the vehicle arrives.
63102
if (msg->state == State::Message::ARRIVED) {
@@ -80,7 +119,51 @@ void RoutingNode::on_clear_route(
80119
const autoware_ad_api::routing::ClearRoute::Service::Response::SharedPtr res)
81120
{
82121
change_stop_mode();
83-
*res = *cli_clear_route_->call(req);
122+
res->status = conversion::convert_call(cli_clear_route_, req);
123+
}
124+
125+
void RoutingNode::on_set_route_points(
126+
const autoware_ad_api::routing::SetRoutePoints::Service::Request::SharedPtr req,
127+
const autoware_ad_api::routing::SetRoutePoints::Service::Response::SharedPtr res)
128+
{
129+
if (state_.state != State::Message::UNSET) {
130+
res->status = route_already_set<autoware_ad_api::routing::SetRoutePoints>();
131+
return;
132+
}
133+
res->status = conversion::convert_call(cli_set_waypoint_route_, req);
134+
}
135+
136+
void RoutingNode::on_set_route(
137+
const autoware_ad_api::routing::SetRoute::Service::Request::SharedPtr req,
138+
const autoware_ad_api::routing::SetRoute::Service::Response::SharedPtr res)
139+
{
140+
if (state_.state != State::Message::UNSET) {
141+
res->status = route_already_set<autoware_ad_api::routing::SetRoute>();
142+
return;
143+
}
144+
res->status = conversion::convert_call(cli_set_lanelet_route_, req);
145+
}
146+
147+
void RoutingNode::on_change_route_points(
148+
const autoware_ad_api::routing::SetRoutePoints::Service::Request::SharedPtr req,
149+
const autoware_ad_api::routing::SetRoutePoints::Service::Response::SharedPtr res)
150+
{
151+
if (state_.state != State::Message::SET) {
152+
res->status = route_is_not_set<autoware_ad_api::routing::SetRoutePoints>();
153+
return;
154+
}
155+
res->status = conversion::convert_call(cli_set_waypoint_route_, req);
156+
}
157+
158+
void RoutingNode::on_change_route(
159+
const autoware_ad_api::routing::SetRoute::Service::Request::SharedPtr req,
160+
const autoware_ad_api::routing::SetRoute::Service::Response::SharedPtr res)
161+
{
162+
if (state_.state != State::Message::SET) {
163+
res->status = route_is_not_set<autoware_ad_api::routing::SetRoute>();
164+
return;
165+
}
166+
res->status = conversion::convert_call(cli_set_lanelet_route_, req);
84167
}
85168

86169
} // namespace default_ad_api

system/default_ad_api/src/routing.hpp

+21-9
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ class RoutingNode : public rclcpp::Node
3333
explicit RoutingNode(const rclcpp::NodeOptions & options);
3434

3535
private:
36+
using OperationModeState = system_interface::OperationModeState;
37+
using State = planning_interface::RouteState;
38+
using Route = planning_interface::LaneletRoute;
39+
3640
rclcpp::CallbackGroup::SharedPtr group_cli_;
3741
Pub<autoware_ad_api::routing::RouteState> pub_state_;
3842
Pub<autoware_ad_api::routing::Route> pub_route_;
@@ -42,26 +46,34 @@ class RoutingNode : public rclcpp::Node
4246
Srv<autoware_ad_api::routing::ChangeRoute> srv_change_route_;
4347
Srv<autoware_ad_api::routing::ClearRoute> srv_clear_route_;
4448
Sub<planning_interface::RouteState> sub_state_;
45-
Sub<planning_interface::Route> sub_route_;
46-
Cli<planning_interface::SetRoutePoints> cli_set_route_points_;
47-
Cli<planning_interface::SetRoute> cli_set_route_;
48-
Cli<planning_interface::ChangeRoutePoints> cli_change_route_points_;
49-
Cli<planning_interface::ChangeRoute> cli_change_route_;
49+
Sub<planning_interface::LaneletRoute> sub_route_;
50+
Cli<planning_interface::SetWaypointRoute> cli_set_waypoint_route_;
51+
Cli<planning_interface::SetLaneletRoute> cli_set_lanelet_route_;
5052
Cli<planning_interface::ClearRoute> cli_clear_route_;
5153
Cli<system_interface::ChangeOperationMode> cli_operation_mode_;
5254
Sub<system_interface::OperationModeState> sub_operation_mode_;
53-
bool is_auto_mode = false;
55+
bool is_auto_mode_;
56+
State::Message state_;
5457

55-
using OperationModeState = system_interface::OperationModeState;
56-
using State = planning_interface::RouteState;
57-
using Route = planning_interface::Route;
5858
void change_stop_mode();
5959
void on_operation_mode(const OperationModeState::Message::ConstSharedPtr msg);
6060
void on_state(const State::Message::ConstSharedPtr msg);
6161
void on_route(const Route::Message::ConstSharedPtr msg);
6262
void on_clear_route(
6363
const autoware_ad_api::routing::ClearRoute::Service::Request::SharedPtr req,
6464
const autoware_ad_api::routing::ClearRoute::Service::Response::SharedPtr res);
65+
void on_set_route_points(
66+
const autoware_ad_api::routing::SetRoutePoints::Service::Request::SharedPtr req,
67+
const autoware_ad_api::routing::SetRoutePoints::Service::Response::SharedPtr res);
68+
void on_set_route(
69+
const autoware_ad_api::routing::SetRoute::Service::Request::SharedPtr req,
70+
const autoware_ad_api::routing::SetRoute::Service::Response::SharedPtr res);
71+
void on_change_route_points(
72+
const autoware_ad_api::routing::SetRoutePoints::Service::Request::SharedPtr req,
73+
const autoware_ad_api::routing::SetRoutePoints::Service::Response::SharedPtr res);
74+
void on_change_route(
75+
const autoware_ad_api::routing::SetRoute::Service::Request::SharedPtr req,
76+
const autoware_ad_api::routing::SetRoute::Service::Response::SharedPtr res);
6577
};
6678

6779
} // namespace default_ad_api

0 commit comments

Comments
 (0)