Skip to content

Commit 50af903

Browse files
committed
recfactor: cleanup
1 parent 301adf5 commit 50af903

37 files changed

+1039
-671
lines changed

.bazelrc

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ build --action_env=LD_LIBRARY_PATH=
5252
# customizations somehow.
5353

5454
# build with snopt
55-
# build --define=WITH_SNOPT=ON
55+
build --define=WITH_SNOPT=ON
5656
build --define=WITH_GUROBI=ON
5757
build --define=NO_CLARABEL=ON
5858

@@ -62,5 +62,3 @@ build:omp --linkopt=-fopenmp
6262

6363
# use python3 by default
6464
build --python_path=python3
65-
66-
build --local_cpu_resources=4

WORKSPACE

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -198,17 +198,10 @@ http_archive(
198198
],
199199
)
200200

201-
# load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
202-
# git_repository(
203-
# name = "c3",
204-
# remote = "https://github.com/DAIRLab/c3",
205-
# # branch = "stephen/dairlib-plate-balancing-example",
206-
# commit = "720d12bab40d011522afe3cdb7c42ad6334a0a47",
207-
# )
208-
209-
load("@bazel_tools//tools/build_defs/repo:local.bzl", "local_repository")
210-
local_repository(
201+
load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
202+
git_repository(
211203
name = "c3",
212-
path = "../c3"
204+
remote = "https://github.com/DAIRLab/c3",
205+
commit = "84ad88911358b93e44ef487730d3aae8e5f01edc",
213206
)
214207

examples/plate-balancing/config/LCM/lcm_channels_simulation.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ franka_input_echo: FRANKA_INPUT_ECHO
77
osc_channel: OSC_FRANKA
88
osc_debug_channel: OSC_DEBUG_FRANKA
99

10-
c3_actor_channel: C3_TRAJECTORY_ACTOR # lcmt_timestamped_saved_traj
11-
c3_object_channel: C3_TRAJECTORY_TRAY # lcmt_timestamped_saved_traj
10+
c3_actor_channel: C3_TRAJECTORY_ACTOR # lcmt_c3_trajectory
11+
c3_object_channel: C3_TRAJECTORY_TRAY # lcmt_c3_trajectory
1212
c3_force_channel: C3_FORCES
1313
c3_debug_output_channel: C3_DEBUG
14-
c3_target_state_channel: C3_TARGET # lcmt_c3_state
15-
c3_actual_state_channel: C3_ACTUAL # lcmt_c3_state
14+
c3_target_state_channel: C3_TARGET # lcmt_robot_state
15+
c3_actual_state_channel: C3_ACTUAL # lcmt_robot_state
1616

1717
radio_channel: RADIO

examples/plate-balancing/forward_kinematics_for_lcs.cc

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include "systems/robot_lcm_systems.h"
2525
#include "systems/system_utils.h"
2626

27+
// Command line flags for config file and simulation mode
2728
DEFINE_string(plate_balancing_config,
2829
"examples/plate-balancing/config/plate_balancing_config.yaml",
2930
"Controller settings such as channels. Attempting to minimize "
@@ -56,11 +57,12 @@ namespace dairlib {
5657
namespace examples {
5758
namespace plate_balancing {
5859

60+
// Main function to build and run the plate balancing forward kinematics system
5961
int DoMain(int argc, char* argv[]) {
6062
gflags::ParseCommandLineFlags(&argc, &argv, true);
6163
drake::lcm::DrakeLcm lcm("udpm://239.255.76.67:7667?ttl=0");
6264

63-
// Load parameters from YAML files
65+
// Load configuration and parameters from YAML files
6466
drake::yaml::LoadYamlOptions yaml_options;
6567
yaml_options.allow_yaml_with_no_cpp = true;
6668

@@ -77,7 +79,7 @@ int DoMain(int argc, char* argv[]) {
7779
FLAGS_simulation ? main_config.lcm_simulation_settings_file
7880
: main_config.lcm_hardware_settings_file);
7981

80-
// Build the MultibodyPlant for Franka
82+
// Build MultibodyPlant for Franka robot
8183
DiagramBuilder<double> plant_builder;
8284
MultibodyPlant<double> plant_franka(0.0);
8385
Parser parser_franka(&plant_franka, nullptr);
@@ -86,7 +88,7 @@ int DoMain(int argc, char* argv[]) {
8688
parser_franka.AddModels(
8789
FindResourceOrThrow(scene_params.end_effector_model))[0];
8890

89-
// Weld frames for Franka
91+
// Weld Franka base and end effector frames
9092
RigidTransform<double> X_WI = RigidTransform<double>::Identity();
9193
plant_franka.WeldFrames(plant_franka.world_frame(),
9294
plant_franka.GetFrameByName("panda_link0"), X_WI);
@@ -101,14 +103,14 @@ int DoMain(int argc, char* argv[]) {
101103
plant_franka.Finalize();
102104
auto franka_context = plant_franka.CreateDefaultContext();
103105

104-
// Build the MultibodyPlant for the tray
106+
// Build MultibodyPlant for tray object
105107
MultibodyPlant<double> plant_tray(0.0);
106108
Parser parser_tray(&plant_tray, nullptr);
107109
parser_tray.AddModels(scene_params.object_models[0]);
108110
plant_tray.Finalize();
109111
auto tray_context = plant_tray.CreateDefaultContext();
110112

111-
// Build the overall diagram
113+
// Build the overall system diagram
112114
DiagramBuilder<double> builder;
113115

114116
// Add LCM subscribers for tray and radio state
@@ -129,7 +131,7 @@ int DoMain(int argc, char* argv[]) {
129131
scene_params.end_effector_name, "tray",
130132
main_config.include_end_effector_orientation);
131133

132-
// Add systems for radio parsing and C3 state handling
134+
// Add system to parse radio input
133135
auto radio_to_vector = builder.AddSystem<RadioToVector>();
134136

135137
// Add plate balancing target generator
@@ -143,7 +145,7 @@ int DoMain(int argc, char* argv[]) {
143145
target_config.third_target[main_config.scene_index],
144146
target_config.x_scale, target_config.y_scale, target_config.z_scale);
145147

146-
// Add multiplexer for target state
148+
// Add multiplexer for target state (combines multiple input vectors)
147149
std::vector<int> input_sizes = {3, 7, 3, 6};
148150
auto target_state_mux =
149151
builder.AddSystem<drake::systems::Multiplexer>(input_sizes);
@@ -156,7 +158,7 @@ int DoMain(int argc, char* argv[]) {
156158
builder.AddSystem<drake::systems::ConstantVectorSource>(
157159
VectorXd::Zero(6));
158160

159-
// Connect the systems
161+
// Connect all systems in the diagram
160162
builder.Connect(*radio_sub, *radio_to_vector);
161163
builder.Connect(tray_state_receiver->get_output_port(),
162164
plate_balancing_target->get_input_port_tray_state());
@@ -177,14 +179,15 @@ int DoMain(int argc, char* argv[]) {
177179
builder.Connect(tray_zero_velocity_source->get_output_port(),
178180
target_state_mux->get_input_port(3));
179181

180-
// Define state names for C3 state sender
182+
// Define state names for C3 state LCM publishers
181183
std::vector<std::string> state_names = {
182184
"end_effector_x", "end_effector_y", "end_effector_z", "tray_qw",
183185
"tray_qx", "tray_qy", "tray_qz", "tray_x",
184186
"tray_y", "tray_z", "end_effector_vx", "end_effector_vy",
185187
"end_effector_vz", "tray_wx", "tray_wy", "tray_wz",
186188
"tray_vz", "tray_vz", "tray_vz",
187189
};
190+
// Add LCM publishers for target and actual C3 state
188191
RobotStateGenerator::AddLcmPublisherToBuilder(
189192
builder, state_names, false, target_state_mux->get_output_port(),
190193
lcm_channel_params.c3_target_state_channel, &lcm,
@@ -198,12 +201,13 @@ int DoMain(int argc, char* argv[]) {
198201
auto owned_diagram = builder.Build();
199202
owned_diagram->set_name(("franka_forward_kinematics"));
200203

201-
// Run lcm-driven simulation
204+
// Run LCM-driven simulation loop
202205
LcmDrivenLoop<dairlib::lcmt_robot_output> loop(
203206
&lcm, std::move(owned_diagram), franka_state_receiver,
204207
lcm_channel_params.franka_state_channel, true);
205208
DrawAndSaveDiagramGraph(*loop.get_diagram());
206209

210+
// Wait for tray state message before starting simulation
207211
LcmHandleSubscriptionsUntil(
208212
&lcm, [&]() { return tray_state_sub->GetInternalMessageCount() > 1; });
209213
loop.Simulate();
@@ -214,6 +218,7 @@ int DoMain(int argc, char* argv[]) {
214218
} // namespace examples
215219
} // namespace dairlib
216220

221+
// Entry point
217222
int main(int argc, char* argv[]) {
218223
return dairlib::examples::plate_balancing::DoMain(argc, argv);
219224
}

examples/plate-balancing/franka_osc_controller.cc

Lines changed: 38 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#include <dairlib/lcmt_radio_out.hpp>
2-
#include <dairlib/lcmt_timestamped_saved_traj.hpp>
32
#include <gflags/gflags.h>
43

4+
// Core includes for configuration, system building, and OSC
55
#include "common/eigen_utils.h"
66
#include "examples/plate-balancing/parameters/lcm_channel_config.h"
77
#include "examples/plate-balancing/parameters/osc_controller_config.h"
@@ -44,11 +44,11 @@ using Eigen::MatrixXd;
4444
using Eigen::Vector3d;
4545
using Eigen::VectorXd;
4646

47+
// Command-line flags for configuration
4748
DEFINE_string(plate_balancing_config,
4849
"examples/plate-balancing/config/plate_balancing_config.yaml",
49-
"Controller settings such as channels. Attempting to minimize "
50-
"number of gflags");
51-
DEFINE_bool(simulation, true, "Running in simulation or hardware");
50+
"YAML file specifying controller and channel settings.");
51+
DEFINE_bool(simulation, true, "Run in simulation (true) or hardware (false)");
5252

5353
namespace dairlib {
5454

@@ -70,10 +70,11 @@ using systems::controllers::TransTaskSpaceTrackingData;
7070
namespace examples {
7171
namespace plate_balancing {
7272

73+
// Entry point for the OSC controller application
7374
int DoMain(int argc, char* argv[]) {
7475
gflags::ParseCommandLineFlags(&argc, &argv, true);
7576

76-
// Load parameters from YAML files
77+
// Load all configuration parameters from YAML files
7778
drake::yaml::LoadYamlOptions yaml_options;
7879
yaml_options.allow_yaml_with_no_cpp = true;
7980
PlateBalancingConfig main_config =
@@ -94,20 +95,20 @@ int DoMain(int argc, char* argv[]) {
9495
FindResourceOrThrow(main_config.osc_osqp_setting_file))
9596
.GetAsSolverOptions(drake::solvers::OsqpSolver::id());
9697

97-
// Build the Drake diagram
98+
// Build the system diagram for the OSC controller
9899
DiagramBuilder<double> builder;
99100

100-
// Create and configure the MultibodyPlant
101+
// Construct the MultibodyPlant for the robot and parse models
101102
drake::multibody::MultibodyPlant<double> plant(0.0);
102103
Parser parser(&plant, nullptr);
103104
parser.AddModelsFromUrl(controller_config.franka_model);
104105

105-
// Weld the robot to the world frame
106+
// Weld the robot base to the world frame
106107
RigidTransform<double> X_WI = RigidTransform<double>::Identity();
107108
plant.WeldFrames(plant.world_frame(), plant.GetFrameByName("panda_link0"),
108109
X_WI);
109110

110-
// Add the end effector if specified in the config
111+
// Optionally add and weld the end effector, if specified in config
111112
if (!controller_config.end_effector_name.empty()) {
112113
drake::multibody::ModelInstanceIndex end_effector_index = parser.AddModels(
113114
FindResourceOrThrow(controller_config.end_effector_model))[0];
@@ -126,13 +127,13 @@ int DoMain(int argc, char* argv[]) {
126127
plant.Finalize();
127128
auto plant_context = plant.CreateDefaultContext();
128129

129-
// Create LCM interface
130+
// Create LCM interface for communication
130131
drake::lcm::DrakeLcm lcm("udpm://239.255.76.67:7667?ttl=0");
131132

132-
// Add LCM systems for communication
133+
// Add LCM systems for state, command, and trajectory communication
133134
auto state_receiver = builder.AddSystem<RobotOutputReceiver>(plant);
134-
auto end_effector_trajectory_sub = builder.AddSystem(
135-
LcmSubscriberSystem::Make<c3::lcmt_c3_trajectory>(
135+
auto end_effector_trajectory_sub =
136+
builder.AddSystem(LcmSubscriberSystem::Make<c3::lcmt_c3_trajectory>(
136137
lcm_channel_params.c3_actor_channel, &lcm));
137138
auto end_effector_position_receiver =
138139
builder.AddSystem<LcmC3TrajectoryReceiver>(
@@ -152,6 +153,8 @@ int DoMain(int argc, char* argv[]) {
152153
TriggerTypeSet({TriggerType::kForced})));
153154
auto franka_command_sender = builder.AddSystem<RobotCommandSender>(plant);
154155
auto osc_command_sender = builder.AddSystem<RobotCommandSender>(plant);
156+
157+
// Trajectory generators for end effector position, orientation, and force
155158
auto end_effector_trajectory =
156159
builder.AddSystem<systems::EndEffectorTrajectoryGenerator>(
157160
controller_config.neutral_position);
@@ -164,6 +167,8 @@ int DoMain(int argc, char* argv[]) {
164167
controller_config.track_end_effector_orientation);
165168
auto end_effector_force_trajectory =
166169
builder.AddSystem<systems::EndEffectorForceTrajectoryGenerator>();
170+
171+
// Radio input for remote control
167172
auto radio_sub =
168173
builder.AddSystem(LcmSubscriberSystem::Make<dairlib::lcmt_radio_out>(
169174
lcm_channel_params.radio_channel, &lcm));
@@ -173,7 +178,7 @@ int DoMain(int argc, char* argv[]) {
173178
auto osc = builder.AddSystem<OperationalSpaceControl>(
174179
plant, plant_context.get(), false);
175180

176-
// Add debug publisher if specified
181+
// Optionally add debug publisher for OSC internal state
177182
if (controller_config.publish_debug_info) {
178183
auto osc_debug_pub =
179184
builder.AddSystem(LcmPublisherSystem::Make<dairlib::lcmt_osc_output>(
@@ -183,7 +188,7 @@ int DoMain(int argc, char* argv[]) {
183188
osc_debug_pub->get_input_port());
184189
}
185190

186-
// Configure tracking data for OSC
191+
// Configure tracking data for OSC: position, orientation, force, and joint
187192
auto end_effector_position_tracking_data =
188193
std::make_unique<TransTaskSpaceTrackingData>(
189194
"end_effector_target", controller_config.K_p_end_effector,
@@ -195,6 +200,7 @@ int DoMain(int argc, char* argv[]) {
195200
controller_config.end_effector_acceleration * Vector3d::Ones();
196201
end_effector_position_tracking_data->SetCmdAccelerationBounds(
197202
-end_effector_acceleration_limits, end_effector_acceleration_limits);
203+
198204
auto mid_link_position_tracking_data_for_rel =
199205
std::make_unique<JointSpaceTrackingData>(
200206
"panda_joint2_target", controller_config.K_p_mid_link,
@@ -216,8 +222,11 @@ int DoMain(int argc, char* argv[]) {
216222
controller_config.W_end_effector_rot, plant, plant);
217223
end_effector_orientation_tracking_data->AddFrameToTrack(
218224
controller_config.end_effector_name);
225+
219226
Eigen::VectorXd orientation_target = Eigen::VectorXd::Zero(4);
220227
orientation_target(0) = 1;
228+
229+
// Register all tracking data with the OSC
221230
osc->AddTrackingData(std::move(end_effector_position_tracking_data));
222231
osc->AddConstTrackingData(std::move(mid_link_position_tracking_data_for_rel),
223232
1.6 * VectorXd::Ones(1));
@@ -232,7 +241,10 @@ int DoMain(int argc, char* argv[]) {
232241

233242
osc->Build();
234243

235-
// Connect systems in the diagram
244+
// Connect all systems in the diagram
245+
246+
// If enabled, remove gravity compensation from OSC output before sending to
247+
// robot
236248
if (controller_config.cancel_gravity_compensation) {
237249
auto gravity_compensator =
238250
builder.AddSystem<GravityCompensationRemover>(plant, *plant_context);
@@ -251,24 +263,29 @@ int DoMain(int argc, char* argv[]) {
251263
franka_command_sender->get_input_port(0));
252264
}
253265

266+
// Connect radio input to trajectory generators
254267
builder.Connect(*radio_sub, *radio_to_vector);
255268
builder.Connect(radio_to_vector->get_output_port(),
256269
end_effector_trajectory->get_input_port_radio());
257270
builder.Connect(radio_to_vector->get_output_port(),
258271
end_effector_orientation_trajectory->get_input_port_radio());
259272
builder.Connect(radio_to_vector->get_output_port(),
260273
end_effector_force_trajectory->get_input_port_radio());
274+
275+
// Connect command senders to LCM publishers
261276
builder.Connect(franka_command_sender->get_output_port(),
262277
franka_command_pub->get_input_port());
263278
builder.Connect(osc_command_sender->get_output_port(),
264279
osc_command_pub->get_input_port());
265280
builder.Connect(osc->get_output_port_osc_command(),
266281
osc_command_sender->get_input_port(0));
267282

283+
// Connect state and trajectory receivers to OSC and trajectory generators
268284
builder.Connect(state_receiver->get_output_port(0),
269285
osc->get_input_port_robot_output());
270-
builder.Connect(end_effector_trajectory_sub->get_output_port(),
271-
end_effector_position_receiver->get_input_port_lcm_trajectory());
286+
builder.Connect(
287+
end_effector_trajectory_sub->get_output_port(),
288+
end_effector_position_receiver->get_input_port_lcm_trajectory());
272289
builder.Connect(end_effector_trajectory_sub->get_output_port(),
273290
end_effector_force_receiver->get_input_port_lcm_trajectory());
274291
builder.Connect(
@@ -289,11 +306,11 @@ int DoMain(int argc, char* argv[]) {
289306
builder.Connect(end_effector_force_trajectory->get_output_port(0),
290307
osc->get_input_port_tracking_data("end_effector_force"));
291308

292-
// Build the complete diagram
309+
// Build the complete system diagram
293310
auto owned_diagram = builder.Build();
294311
owned_diagram->set_name(("plate_balancing/osc_controller"));
295312

296-
// Run lcm-driven simulation
313+
// Run the LCM-driven control loop (real-time or simulation)
297314
LcmDrivenLoop<dairlib::lcmt_robot_output> loop(
298315
&lcm, std::move(owned_diagram), state_receiver,
299316
lcm_channel_params.franka_state_channel, true);
@@ -305,6 +322,7 @@ int DoMain(int argc, char* argv[]) {
305322
} // namespace examples
306323
} // namespace dairlib
307324

325+
// Main entry point
308326
int main(int argc, char* argv[]) {
309327
return dairlib::examples::plate_balancing::DoMain(argc, argv);
310328
}

0 commit comments

Comments
 (0)