1515#include " examples/plate-balancing/parameters/lcm_channel_config.h"
1616#include " examples/plate-balancing/parameters/plate_balancing_config.h"
1717#include " examples/plate-balancing/parameters/plate_balancing_target_config.h"
18- #include " examples/plate-balancing/systems/c3_state_sender.h"
1918#include " examples/plate-balancing/systems/franka_kinematics.h"
2019#include " examples/plate-balancing/systems/plate_balancing_target.h"
2120#include " multibody/multibody_utils.h"
2221#include " systems/framework/lcm_driven_loop.h"
22+ #include " systems/lcmt_generators/robot_state_generator.h"
2323#include " systems/primitives/radio_parser.h"
2424#include " systems/robot_lcm_systems.h"
2525#include " systems/system_utils.h"
@@ -50,6 +50,7 @@ using dairlib::systems::LcmDrivenLoop;
5050using dairlib::systems::ObjectStateReceiver;
5151using dairlib::systems::RadioToVector;
5252using dairlib::systems::RobotOutputReceiver;
53+ using dairlib::systems::lcmt_generators::RobotStateGenerator;
5354
5455namespace dairlib {
5556namespace examples {
@@ -131,17 +132,6 @@ int DoMain(int argc, char* argv[]) {
131132 // Add systems for radio parsing and C3 state handling
132133 auto radio_to_vector = builder.AddSystem <RadioToVector>();
133134
134- // Define state names for C3 state sender
135- std::vector<std::string> state_names = {
136- " end_effector_x" , " end_effector_y" , " end_effector_z" , " tray_qw" ,
137- " tray_qx" , " tray_qy" , " tray_qz" , " tray_x" ,
138- " tray_y" , " tray_z" , " end_effector_vx" , " end_effector_vy" ,
139- " end_effector_vz" , " tray_wx" , " tray_wy" , " tray_wz" ,
140- " tray_vz" , " tray_vz" , " tray_vz" ,
141- };
142- auto c3_state_sender =
143- builder.AddSystem <systems::C3StateSender>(3 + 7 + 3 + 6 , state_names);
144-
145135 // Add plate balancing target generator
146136 auto plate_balancing_target =
147137 builder.AddSystem <systems::PlateBalancingTargetGenerator>(
@@ -166,16 +156,6 @@ int DoMain(int argc, char* argv[]) {
166156 builder.AddSystem <drake::systems::ConstantVectorSource>(
167157 VectorXd::Zero (6 ));
168158
169- // Add LCM publishers for C3 state
170- auto c3_actual_state_publisher =
171- builder.AddSystem (LcmPublisherSystem::Make<dairlib::lcmt_c3_state>(
172- lcm_channel_params.c3_actual_state_channel , &lcm,
173- TriggerTypeSet ({TriggerType::kForced })));
174- auto c3_target_state_publisher =
175- builder.AddSystem (LcmPublisherSystem::Make<dairlib::lcmt_c3_state>(
176- lcm_channel_params.c3_target_state_channel , &lcm,
177- TriggerTypeSet ({TriggerType::kForced })));
178-
179159 // Connect the systems
180160 builder.Connect (*radio_sub, *radio_to_vector);
181161 builder.Connect (tray_state_receiver->get_output_port (),
@@ -192,19 +172,29 @@ int DoMain(int argc, char* argv[]) {
192172 reduced_order_model_receiver->get_input_port_franka_state ());
193173 builder.Connect (tray_state_receiver->get_output_port (),
194174 reduced_order_model_receiver->get_input_port_object_state ());
195- builder.Connect (reduced_order_model_receiver->get_output_port_lcs_state (),
196- c3_state_sender->get_input_port_actual_state ());
197- builder.Connect (target_state_mux->get_output_port (),
198- c3_state_sender->get_input_port_target_state ());
199- builder.Connect (c3_state_sender->get_output_port_actual_c3_state (),
200- c3_actual_state_publisher->get_input_port ());
201- builder.Connect (c3_state_sender->get_output_port_target_c3_state (),
202- c3_target_state_publisher->get_input_port ());
203175 builder.Connect (end_effector_zero_velocity_source->get_output_port (),
204176 target_state_mux->get_input_port (2 ));
205177 builder.Connect (tray_zero_velocity_source->get_output_port (),
206178 target_state_mux->get_input_port (3 ));
207179
180+ // Define state names for C3 state sender
181+ std::vector<std::string> state_names = {
182+ " end_effector_x" , " end_effector_y" , " end_effector_z" , " tray_qw" ,
183+ " tray_qx" , " tray_qy" , " tray_qz" , " tray_x" ,
184+ " tray_y" , " tray_z" , " end_effector_vx" , " end_effector_vy" ,
185+ " end_effector_vz" , " tray_wx" , " tray_wy" , " tray_wz" ,
186+ " tray_vz" , " tray_vz" , " tray_vz" ,
187+ };
188+ RobotStateGenerator::AddLcmPublisherToBuilder (
189+ builder, state_names, false , target_state_mux->get_output_port (),
190+ lcm_channel_params.c3_target_state_channel , &lcm,
191+ TriggerTypeSet ({TriggerType::kForced }));
192+ RobotStateGenerator::AddLcmPublisherToBuilder (
193+ builder, state_names, true ,
194+ reduced_order_model_receiver->get_output_port_lcs_state (),
195+ lcm_channel_params.c3_actual_state_channel , &lcm,
196+ TriggerTypeSet ({TriggerType::kForced }));
197+
208198 auto owned_diagram = builder.Build ();
209199 owned_diagram->set_name ((" franka_forward_kinematics" ));
210200
0 commit comments