Skip to content

Commit efb17e1

Browse files
authored
nav/sim fixes, some param changes (#127)
* nav/sim fixes, some param changes * Changed back to IfCondition
1 parent 91cc3a2 commit efb17e1

12 files changed

Lines changed: 58 additions & 25 deletions

File tree

src/simulation/launch/control.launch.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def generate_launch_description():
1414
ackermann_controller_spawner = Node(
1515
package='controller_manager',
1616
executable='spawner',
17-
arguments=['rear_ackermann_controller'],
17+
arguments=['front_ackermann_controller'],
1818
output='screen',
1919
remappings=[
2020
("/ackermann_steering_controller/tf_odometry", "/tf"),

src/subsystems/drive/drive_controllers/src/front_ackermann_controller.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -223,17 +223,17 @@ controller_interface::return_type FrontAckermannController::update(
223223

224224
// Assign angles and velocities based on the hardware's actual behavior
225225
if (steer_cmd > 0.0) { // LEFT TURN: left wheel is INNER
226-
front_left_steer_angle = -inner_angle;
227-
front_right_steer_angle = -outer_angle;
226+
front_left_steer_angle = inner_angle;
227+
front_right_steer_angle = outer_angle;
228228

229229
front_left_vel = inner_front_vel;
230230
front_right_vel = outer_front_vel;
231231
rear_left_vel = inner_rear_vel;
232232
rear_right_vel = outer_rear_vel;
233233

234234
} else { // RIGHT TURN: right wheel is INNER
235-
front_left_steer_angle = outer_angle;
236-
front_right_steer_angle = inner_angle;
235+
front_left_steer_angle = -outer_angle;
236+
front_right_steer_angle = -inner_angle;
237237

238238
front_left_vel = outer_front_vel;
239239
front_right_vel = inner_front_vel;

src/subsystems/navigation/athena_planner/behavior_trees/gnss_navigation.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<BehaviorTree ID="GNSSNavigation">
33
<Sequence>
44
<PipelineSequence name="NavigateWithReplanning">
5-
<RateController hz="5.0">
5+
<RateController hz="0.2">
66
<ComputePathToPose goal="{goal}" path="{path}" planner_id="GridBased"/>
77
</RateController>
88
<FollowPath path="{path}" controller_id="FollowPath"/>

src/subsystems/navigation/athena_planner/config/nav2_params.yaml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,15 @@ planner_server:
4848
planner_plugins: ["GridBased"]
4949

5050
GridBased:
51-
plugin: "nav2_smac_planner/SmacPlannerHybrid"
52-
tolerance: 0.5
51+
plugin: "nav2_smac_planner/SmacPlanner2D"
52+
tolerance: 2.0
5353
downsample_costmap: false
5454
downsampling_factor: 1
5555
allow_unknown: true
5656
max_iterations: 1000000
5757
max_planning_time: 7.5
5858

59-
motion_model_for_search: "REEDS_SHEPP"
59+
motion_model_for_search: "DUBIN"
6060
angle_quantization_bins: 72
6161
analytic_expansion_ratio: 3.5
6262
analytic_expansion_max_length: 3.0
@@ -90,10 +90,10 @@ controller_server:
9090
movement_time_allowance: 10.0
9191

9292
general_goal_checker:
93-
stateful: true
93+
stateful: false
9494
plugin: "nav2_controller::SimpleGoalChecker"
95-
xy_goal_tolerance: 0.5
96-
yaw_goal_tolerance: 0.3
95+
xy_goal_tolerance: 1.0
96+
yaw_goal_tolerance: 6.283
9797

9898
FollowPath:
9999
plugin: "nav2_regulated_pure_pursuit_controller::RegulatedPurePursuitController"
@@ -114,7 +114,7 @@ controller_server:
114114
regulated_linear_scaling_min_radius: 1.5
115115
regulated_linear_scaling_min_speed: 0.25
116116
use_rotate_to_heading: false
117-
allow_reversing: true
117+
allow_reversing: false
118118
rotate_to_heading_min_angle: 0.785
119119
max_linear_accel: 1.0
120120
max_linear_decel: 1.5

src/subsystems/navigation/athena_planner/include/athena_planner/led_status_node.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class LedStatusNode : public BT::SyncActionNode
3434
rclcpp::Publisher<msgs::msg::LedStatus>::SharedPtr led_pub_;
3535

3636
std::string topic_name_;
37+
std::string last_logged_color_;
3738
};
3839

3940
} // namespace bt_nodes

src/subsystems/navigation/athena_planner/launch/navigation.launch.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@ def generate_launch_description():
3232

3333
waypoint_share = get_package_share_directory('waypoint_manager')
3434
waypoint_launch_file = os.path.join(waypoint_share, 'launch', 'waypoint_manager.launch.py')
35+
36+
yolo_ros_bt_share = get_package_share_directory('yolo_ros_bt')
37+
yolo_ros_launch_file = os.path.join(yolo_ros_bt_share, 'launch', 'yolo.ros.launch.py')
3538

3639
default_params = PathJoinSubstitution([
3740
FindPackageShare('athena_planner'), 'config', 'nav2_params.yaml'
@@ -56,6 +59,11 @@ def generate_launch_description():
5659
publish_zed_odom = PythonExpression(
5760
["'true' if '", use_localizer, "' == 'false' else 'false'"]
5861
)
62+
63+
cmd_vel_out_topic = PythonExpression([
64+
"'/front_ackermann_controller/reference' if '", sim,
65+
"' == 'true' else '/rear_ackermann_controller/reference'"
66+
])
5967

6068
twist_stamper_node = Node(
6169
package='twist_stamper',
@@ -64,7 +72,7 @@ def generate_launch_description():
6472
parameters=[{'use_sim_time': sim}],
6573
remappings=[
6674
('cmd_vel_in', '/cmd_vel_nav'),
67-
('cmd_vel_out', '/rear_ackermann_controller/reference'),
75+
('cmd_vel_out', cmd_vel_out_topic),
6876
],
6977
)
7078

@@ -108,6 +116,12 @@ def generate_launch_description():
108116
PythonLaunchDescriptionSource(gps_goal_launch_file),
109117
launch_arguments={'use_sim_time': sim}.items(),
110118
)
119+
120+
yolo_ros_launch = IncludeLaunchDescription(
121+
PythonLaunchDescriptionSource(yolo_ros_launch_file),
122+
launch_arguments={'use_sim_time': sim}.items(),
123+
condition=IfCondition(sim),
124+
)
111125

112126
point_cloud_filterer_sim = Node(
113127
package='point_cloud_filterer',
@@ -180,6 +194,7 @@ def generate_launch_description():
180194
sensors_launch,
181195
aruco_launch,
182196
waypoint_launch,
197+
yolo_ros_launch,
183198
point_cloud_filterer_sim,
184199
point_cloud_relay,
185200
gps_goal_launch,

src/subsystems/navigation/athena_planner/package.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@
3939
<exec_depend>localizer</exec_depend>
4040
<exec_depend>gps_goal</exec_depend>
4141
<exec_depend>point_cloud_filterer</exec_depend>
42+
<exec_depend>aruco_bt</exec_depend>
43+
<exec_depend>waypoint_manager</exec_depend>
44+
<exec_depend>yolo_ros_bt</exec_depend>
4245
<exec_depend>topic_tools</exec_depend>
4346

4447
<test_depend>ament_lint_auto</test_depend>

src/subsystems/navigation/athena_planner/plugins/led_status_node.cpp

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
#include "athena_planner/led_status_node.hpp"
22

3+
#include <algorithm>
4+
#include <string>
5+
36
namespace bt_nodes
47
{
58

@@ -26,19 +29,21 @@ BT::NodeStatus LedStatusNode::tick()
2629
return BT::NodeStatus::FAILURE;
2730
}
2831

32+
std::transform(color.begin(), color.end(), color.begin(), ::tolower);
33+
2934
msgs::msg::LedStatus msg;
3035
msg.cmd = msgs::msg::LedStatus::CMD_SOLID;
3136
msg.r = 0;
3237
msg.g = 0;
3338
msg.b = 0;
3439
msg.param = 0;
3540

36-
if (color == "red" || color == "RED") {
41+
if (color == "red") {
3742
msg.cmd = msgs::msg::LedStatus::CMD_SOLID;
3843
msg.r = 255;
3944
msg.g = 0;
4045
msg.b = 0;
41-
} else if (color == "green" || color == "GREEN") {
46+
} else if (color == "green") {
4247
msg.cmd = msgs::msg::LedStatus::CMD_FLASH;
4348
msg.r = 0;
4449
msg.g = 255;
@@ -53,13 +58,17 @@ BT::NodeStatus LedStatusNode::tick()
5358

5459
led_pub_->publish(msg);
5560

56-
RCLCPP_INFO(
57-
node_->get_logger(),
58-
"Published LED status: color=%s rgb=[%u, %u, %u]",
59-
color.c_str(),
60-
msg.r,
61-
msg.g,
62-
msg.b);
61+
if (color != last_logged_color_) {
62+
RCLCPP_INFO(
63+
node_->get_logger(),
64+
"Published LED status: color=%s rgb=[%u, %u, %u]",
65+
color.c_str(),
66+
msg.r,
67+
msg.g,
68+
msg.b);
69+
70+
last_logged_color_ = color;
71+
}
6372

6473
return BT::NodeStatus::SUCCESS;
6574
}

src/subsystems/navigation/athena_planner/plugins/nav_selector_node.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "athena_planner/get_aruco_pose_node.hpp"
1010
#include "athena_planner/spiral_coverage_action_node.hpp"
1111
#include "athena_planner/object_detected_node.hpp"
12+
#include "athena_planner/led_status_node.hpp"
1213

1314
#include "rclcpp/rclcpp.hpp"
1415

@@ -81,4 +82,5 @@ BT_REGISTER_NODES(factory)
8182
factory.registerNodeType<bt_nodes::GetArucoPose>("GetArucoPose");
8283
factory.registerNodeType<bt_nodes::SpiralCoverageAction>("SpiralCoverageAction");
8384
factory.registerNodeType<bt_nodes::ObjectDetected>("ObjectDetected");
85+
factory.registerNodeType<bt_nodes::LedStatusNode>("LedStatus");
8486
}

src/subsystems/navigation/yolo_ros_bt/launch/yolo.ros.launch.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ def generate_launch_description():
55
return LaunchDescription([
66
Node(
77
package='yolo_ros_bt',
8-
executable='yolo_ros_node',
8+
executable='yolo_node',
99
name='yolo_node',
1010
output='screen',
1111
parameters=[{

0 commit comments

Comments
 (0)