@@ -137,111 +137,122 @@ PYBIND11_MODULE(_core, m) {
137137 .def_readwrite (" kp_r" , &rcs::hw::FrankaConfig::kp_r)
138138 .def_readwrite (" load_parameters" , &rcs::hw::FrankaConfig::load_parameters)
139139 .def_readwrite (" world_to_robot" , &rcs::hw::FrankaConfig::world_to_robot)
140- .def_readwrite (" tcp_offset" , &rcs::hw::FrankaConfig::tcp_offset)
140+ .def_property (
141+ " tcp_offset" ,
142+ [](const rcs::hw::FrankaConfig& config) { return config.tcp_offset ; },
143+ [](rcs::hw::FrankaConfig& config,
144+ const rcs::common::Pose& tcp_offset) {
145+ config.tcp_offset = tcp_offset;
146+ config.tcp_offset_explicit = true ;
147+ })
148+ .def_readwrite (" tcp_offset_explicit" ,
149+ &rcs::hw::FrankaConfig::tcp_offset_explicit)
141150 .def_readwrite (" async_control" , &rcs::hw::FrankaConfig::async_control)
142151 .def_readwrite (" ignore_realtime" , &rcs::hw::FrankaConfig::ignore_realtime)
143152 .def_readwrite (" ip" , &rcs::hw::FrankaConfig::ip);
144153
145154 rcs::hw::FR3Config default_fr3_config;
146155 py::class_<rcs::hw::FR3Config, rcs::hw::FrankaConfig>(hw, " FR3Config" )
147- .def (py::init ([](const std::string& ip, rcs::hw::IKSolver ik_solver,
148- double speed_factor, const rcs::common::Vector7d& kp,
149- const rcs::common::Vector7d& kd,
150- const Eigen::Vector3d& kp_p, double kp_r,
151- std::optional<rcs::hw::FrankaLoad> load_parameters,
152- std::optional<rcs::common::Pose> world_to_robot,
153- bool async_control, bool ignore_realtime,
154- std::optional<rcs::common::Pose> tcp_offset,
155- std::string attachment_site,
156- std::string kinematic_model_path,
157- const rcs::common::Vector7d& torque_limit,
158- bool allow_high_collision) {
159- rcs::hw::FR3Config cfg;
160- cfg.ik_solver = ik_solver;
161- cfg.speed_factor = speed_factor;
162- cfg.kp = kp;
163- cfg.kd = kd;
164- cfg.torque_limit = torque_limit;
165- cfg.allow_high_collision = allow_high_collision;
166- cfg.kp_p = kp_p;
167- cfg.kp_r = kp_r;
168- cfg.load_parameters = load_parameters;
169- cfg.world_to_robot = world_to_robot;
170- cfg.async_control = async_control;
171- cfg.ignore_realtime = ignore_realtime;
172- cfg.ip = ip;
173- cfg.tcp_offset = tcp_offset;
174- cfg.attachment_site = attachment_site;
175- cfg.kinematic_model_path = kinematic_model_path;
176- return cfg;
177- }),
178- py::arg (" ip" ), py::arg (" ik_solver" ) = default_fr3_config.ik_solver ,
179- py::arg (" speed_factor" ) = default_fr3_config.speed_factor ,
180- py::arg (" kp" ) = default_fr3_config.kp ,
181- py::arg (" kd" ) = default_fr3_config.kd ,
182- py::arg (" kp_p" ) = default_fr3_config.kp_p ,
183- py::arg (" kp_r" ) = default_fr3_config.kp_r ,
184- py::arg (" load_parameters" ) = default_fr3_config.load_parameters ,
185- py::arg (" world_to_robot" ) = default_fr3_config.world_to_robot ,
186- py::arg (" async_control" ) = default_fr3_config.async_control ,
187- py::arg (" ignore_realtime" ) = default_fr3_config.ignore_realtime ,
188- py::arg (" tcp_offset" ) = default_fr3_config.tcp_offset ,
189- py::arg (" attachment_site" ) = default_fr3_config.attachment_site ,
190- py::arg (" kinematic_model_path" ) =
191- default_fr3_config.kinematic_model_path ,
192- py::arg (" torque_limit" ) = default_fr3_config.torque_limit ,
193- py::arg (" allow_high_collision" ) =
194- default_fr3_config.allow_high_collision );
156+ .def (
157+ py::init ([](const std::string& ip, rcs::hw::IKSolver ik_solver,
158+ double speed_factor, const rcs::common::Vector7d& kp,
159+ const rcs::common::Vector7d& kd,
160+ const Eigen::Vector3d& kp_p, double kp_r,
161+ std::optional<rcs::hw::FrankaLoad> load_parameters,
162+ std::optional<rcs::common::Pose> world_to_robot,
163+ bool async_control, bool ignore_realtime,
164+ rcs::common::Pose tcp_offset, std::string attachment_site,
165+ std::string kinematic_model_path,
166+ const rcs::common::Vector7d& torque_limit,
167+ bool allow_high_collision) {
168+ rcs::hw::FR3Config cfg;
169+ cfg.ik_solver = ik_solver;
170+ cfg.speed_factor = speed_factor;
171+ cfg.kp = kp;
172+ cfg.kd = kd;
173+ cfg.torque_limit = torque_limit;
174+ cfg.allow_high_collision = allow_high_collision;
175+ cfg.kp_p = kp_p;
176+ cfg.kp_r = kp_r;
177+ cfg.load_parameters = load_parameters;
178+ cfg.world_to_robot = world_to_robot;
179+ cfg.async_control = async_control;
180+ cfg.ignore_realtime = ignore_realtime;
181+ cfg.ip = ip;
182+ cfg.tcp_offset = tcp_offset;
183+ cfg.tcp_offset_explicit = true ;
184+ cfg.attachment_site = attachment_site;
185+ cfg.kinematic_model_path = kinematic_model_path;
186+ return cfg;
187+ }),
188+ py::arg (" ip" ), py::arg (" ik_solver" ) = default_fr3_config.ik_solver ,
189+ py::arg (" speed_factor" ) = default_fr3_config.speed_factor ,
190+ py::arg (" kp" ) = default_fr3_config.kp ,
191+ py::arg (" kd" ) = default_fr3_config.kd ,
192+ py::arg (" kp_p" ) = default_fr3_config.kp_p ,
193+ py::arg (" kp_r" ) = default_fr3_config.kp_r ,
194+ py::arg (" load_parameters" ) = default_fr3_config.load_parameters ,
195+ py::arg (" world_to_robot" ) = default_fr3_config.world_to_robot ,
196+ py::arg (" async_control" ) = default_fr3_config.async_control ,
197+ py::arg (" ignore_realtime" ) = default_fr3_config.ignore_realtime ,
198+ py::arg (" tcp_offset" ) = default_fr3_config.tcp_offset ,
199+ py::arg (" attachment_site" ) = default_fr3_config.attachment_site ,
200+ py::arg (" kinematic_model_path" ) =
201+ default_fr3_config.kinematic_model_path ,
202+ py::arg (" torque_limit" ) = default_fr3_config.torque_limit ,
203+ py::arg (" allow_high_collision" ) =
204+ default_fr3_config.allow_high_collision );
195205 rcs::hw::PandaConfig default_panda_config;
196206 py::class_<rcs::hw::PandaConfig, rcs::hw::FrankaConfig>(hw, " PandaConfig" )
197- .def (py::init ([](const std::string& ip, rcs::hw::IKSolver ik_solver,
198- double speed_factor, const rcs::common::Vector7d& kp,
199- const rcs::common::Vector7d& kd,
200- const Eigen::Vector3d& kp_p, double kp_r,
201- std::optional<rcs::hw::FrankaLoad> load_parameters,
202- std::optional<rcs::common::Pose> world_to_robot,
203- bool async_control, bool ignore_realtime,
204- std::optional<rcs::common::Pose> tcp_offset,
205- std::string attachment_site,
206- std::string kinematic_model_path,
207- const rcs::common::Vector7d& torque_limit,
208- bool allow_high_collision) {
209- rcs::hw::PandaConfig cfg;
210- cfg.ik_solver = ik_solver;
211- cfg.speed_factor = speed_factor;
212- cfg.kp = kp;
213- cfg.kd = kd;
214- cfg.torque_limit = torque_limit;
215- cfg.allow_high_collision = allow_high_collision;
216- cfg.kp_p = kp_p;
217- cfg.kp_r = kp_r;
218- cfg.load_parameters = load_parameters;
219- cfg.world_to_robot = world_to_robot;
220- cfg.async_control = async_control;
221- cfg.ignore_realtime = ignore_realtime;
222- cfg.ip = ip;
223- cfg.tcp_offset = tcp_offset;
224- cfg.attachment_site = attachment_site;
225- cfg.kinematic_model_path = kinematic_model_path;
226- return cfg;
227- }),
228- py::arg (" ip" ), py::arg (" ik_solver" ) = default_panda_config.ik_solver ,
229- py::arg (" speed_factor" ) = default_panda_config.speed_factor ,
230- py::arg (" kp" ) = default_panda_config.kp ,
231- py::arg (" kd" ) = default_panda_config.kd ,
232- py::arg (" kp_p" ) = default_panda_config.kp_p ,
233- py::arg (" kp_r" ) = default_panda_config.kp_r ,
234- py::arg (" load_parameters" ) = default_panda_config.load_parameters ,
235- py::arg (" world_to_robot" ) = default_panda_config.world_to_robot ,
236- py::arg (" async_control" ) = default_panda_config.async_control ,
237- py::arg (" ignore_realtime" ) = default_panda_config.ignore_realtime ,
238- py::arg (" tcp_offset" ) = default_panda_config.tcp_offset ,
239- py::arg (" attachment_site" ) = default_panda_config.attachment_site ,
240- py::arg (" kinematic_model_path" ) =
241- default_panda_config.kinematic_model_path ,
242- py::arg (" torque_limit" ) = default_panda_config.torque_limit ,
243- py::arg (" allow_high_collision" ) =
244- default_panda_config.allow_high_collision );
207+ .def (
208+ py::init ([](const std::string& ip, rcs::hw::IKSolver ik_solver,
209+ double speed_factor, const rcs::common::Vector7d& kp,
210+ const rcs::common::Vector7d& kd,
211+ const Eigen::Vector3d& kp_p, double kp_r,
212+ std::optional<rcs::hw::FrankaLoad> load_parameters,
213+ std::optional<rcs::common::Pose> world_to_robot,
214+ bool async_control, bool ignore_realtime,
215+ rcs::common::Pose tcp_offset, std::string attachment_site,
216+ std::string kinematic_model_path,
217+ const rcs::common::Vector7d& torque_limit,
218+ bool allow_high_collision) {
219+ rcs::hw::PandaConfig cfg;
220+ cfg.ik_solver = ik_solver;
221+ cfg.speed_factor = speed_factor;
222+ cfg.kp = kp;
223+ cfg.kd = kd;
224+ cfg.torque_limit = torque_limit;
225+ cfg.allow_high_collision = allow_high_collision;
226+ cfg.kp_p = kp_p;
227+ cfg.kp_r = kp_r;
228+ cfg.load_parameters = load_parameters;
229+ cfg.world_to_robot = world_to_robot;
230+ cfg.async_control = async_control;
231+ cfg.ignore_realtime = ignore_realtime;
232+ cfg.ip = ip;
233+ cfg.tcp_offset = tcp_offset;
234+ cfg.tcp_offset_explicit = true ;
235+ cfg.attachment_site = attachment_site;
236+ cfg.kinematic_model_path = kinematic_model_path;
237+ return cfg;
238+ }),
239+ py::arg (" ip" ), py::arg (" ik_solver" ) = default_panda_config.ik_solver ,
240+ py::arg (" speed_factor" ) = default_panda_config.speed_factor ,
241+ py::arg (" kp" ) = default_panda_config.kp ,
242+ py::arg (" kd" ) = default_panda_config.kd ,
243+ py::arg (" kp_p" ) = default_panda_config.kp_p ,
244+ py::arg (" kp_r" ) = default_panda_config.kp_r ,
245+ py::arg (" load_parameters" ) = default_panda_config.load_parameters ,
246+ py::arg (" world_to_robot" ) = default_panda_config.world_to_robot ,
247+ py::arg (" async_control" ) = default_panda_config.async_control ,
248+ py::arg (" ignore_realtime" ) = default_panda_config.ignore_realtime ,
249+ py::arg (" tcp_offset" ) = default_panda_config.tcp_offset ,
250+ py::arg (" attachment_site" ) = default_panda_config.attachment_site ,
251+ py::arg (" kinematic_model_path" ) =
252+ default_panda_config.kinematic_model_path ,
253+ py::arg (" torque_limit" ) = default_panda_config.torque_limit ,
254+ py::arg (" allow_high_collision" ) =
255+ default_panda_config.allow_high_collision );
245256
246257 py::object gripper_config =
247258 (py::object)py::module_::import (" rcs" ).attr (" common" ).attr (
0 commit comments