Skip to content

Commit 47075ef

Browse files
author
Cristina Garcia Cifuentes
committed
remove hardcoded camera name from injected virtual joints
1 parent 5830477 commit 47075ef

File tree

5 files changed

+69
-37
lines changed

5 files changed

+69
-37
lines changed

source/dbrt/kinematics_from_urdf.cpp

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -132,13 +132,13 @@ void KinematicsFromURDF::inject_offset_joints_and_links(
132132
{
133133
rename_camera_frame(camera_frame, urdf);
134134

135-
std::string camera_frame_ = "camera";
136-
std::vector<std::string> dofs = {camera_frame_ + "_X",
137-
camera_frame_ + "_Y",
138-
camera_frame_ + "_Z",
139-
camera_frame_ + "_PITCH",
140-
camera_frame_ + "_YAW",
141-
camera_frame_ + "_ROLL"};
135+
// std::string camera_frame_ = "camera";
136+
std::vector<std::string> dofs = {camera_frame + "_X",
137+
camera_frame + "_Y",
138+
camera_frame + "_Z",
139+
camera_frame + "_PITCH",
140+
camera_frame + "_YAW",
141+
camera_frame + "_ROLL"};
142142

143143
std::string current_parent_link = camera_frame + "_DEFAULT";
144144

@@ -349,12 +349,12 @@ Eigen::VectorXd KinematicsFromURDF::sensor_msg_to_eigen(
349349

350350
if (use_camera_offset_)
351351
{
352-
joint_state.name.push_back("camera_X_JOINT");
353-
joint_state.name.push_back("camera_Y_JOINT");
354-
joint_state.name.push_back("camera_Z_JOINT");
355-
joint_state.name.push_back("camera_ROLL_JOINT");
356-
joint_state.name.push_back("camera_PITCH_JOINT");
357-
joint_state.name.push_back("camera_YAW_JOINT");
352+
joint_state.name.push_back(cam_frame_name_ + "_X_JOINT");
353+
joint_state.name.push_back(cam_frame_name_ + "_Y_JOINT");
354+
joint_state.name.push_back(cam_frame_name_ + "_Z_JOINT");
355+
joint_state.name.push_back(cam_frame_name_ + "_ROLL_JOINT");
356+
joint_state.name.push_back(cam_frame_name_ + "_PITCH_JOINT");
357+
joint_state.name.push_back(cam_frame_name_ + "_YAW_JOINT");
358358

359359
joint_state.position.push_back(0);
360360
joint_state.position.push_back(0);

source/dbrt/kinematics_from_urdf.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ class KinematicsFromURDF
7474
// get the joint index in state array
7575
int name_to_index(const std::string& name);
7676

77+
const std::string& camera_frame_id() const { return cam_frame_name_; }
78+
7779
private:
7880
void rename_camera_frame(const std::string& camera_frame,
7981
urdf::Model& urdf);

source/dbrt/tracker/rotary_tracker_factory.cpp

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ namespace dbrt
3131
* parameter prefix, e.g. fusion_tracker
3232
* \param kinematics
3333
* URDF robot kinematics
34+
* \param camera_frame_id
35+
* This is the camera frame id or name used when the
36+
* estimate_camera_offset is on.
3437
*/
3538
std::shared_ptr<dbrt::RotaryTracker> create_rotary_tracker(
3639
std::string prefix,
@@ -72,15 +75,22 @@ std::shared_ptr<dbrt::RotaryTracker> create_rotary_tracker(
7275

7376
if (estimate_camera_offset)
7477
{
75-
transition_joint_sigmas_map.insert(
76-
camera_transition_joint_sigmas_map.begin(),
77-
camera_transition_joint_sigmas_map.end());
78+
insert_map_with_prefixed_keys(
79+
camera_transition_joint_sigmas_map,
80+
kinematics->camera_frame_id() + "_",
81+
transition_joint_sigmas_map);
7882

79-
joint_bias_sigmas_map.insert(camera_joint_bias_sigmas_map.begin(),
80-
camera_joint_bias_sigmas_map.end());
8183

82-
joint_bias_factors_map.insert(camera_joint_bias_factors_map.begin(),
83-
camera_joint_bias_factors_map.end());
84+
insert_map_with_prefixed_keys(
85+
camera_joint_bias_sigmas_map,
86+
kinematics->camera_frame_id() + "_",
87+
joint_bias_sigmas_map);
88+
89+
90+
insert_map_with_prefixed_keys(
91+
camera_joint_bias_factors_map,
92+
kinematics->camera_frame_id() + "_",
93+
joint_bias_factors_map);
8494
}
8595

8696
// linear state transition parameters
@@ -103,9 +113,10 @@ std::shared_ptr<dbrt::RotaryTracker> create_rotary_tracker(
103113

104114
if (estimate_camera_offset)
105115
{
106-
observation_joint_sigmas_map.insert(
107-
camera_observation_joint_sigmas_map.begin(),
108-
camera_observation_joint_sigmas_map.end());
116+
insert_map_with_prefixed_keys(
117+
camera_observation_joint_sigmas_map,
118+
kinematics->camera_frame_id() + "_",
119+
observation_joint_sigmas_map);
109120
}
110121

111122
sensor_parameters.joint_sigmas =

source/dbrt/tracker/visual_tracker_factory.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,9 @@ std::shared_ptr<dbrt::VisualTracker> create_visual_tracker(
8383
read_maps_from_map_list(prefix + "joint_transition/joint_sigmas", nh);
8484
if (estimate_camera_offset)
8585
{
86-
transition_joint_sigmas_map.insert(
87-
camera_transition_joint_sigmas_map.begin(),
88-
camera_transition_joint_sigmas_map.end());
86+
insert_map_with_prefixed_keys(camera_transition_joint_sigmas_map,
87+
kinematics->camera_frame_id() + "_",
88+
transition_joint_sigmas_map);
8989
}
9090

9191
// linear state transition parameters
@@ -172,8 +172,8 @@ std::shared_ptr<dbrt::VisualTracker> create_visual_tracker(
172172
if (estimate_camera_offset)
173173
{
174174
sampling_blocks_definition = merge_sampling_block_definitions(
175-
camera_offset_sampling_blocks_definition,
176-
sampling_blocks_definition);
175+
sampling_blocks_definition,
176+
camera_offset_sampling_blocks_definition, kinematics->camera_frame_id() + '_');
177177
}
178178

179179
tracker_parameters.sampling_blocks =

source/dbrt/util/parameter_tools.h

Lines changed: 28 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,29 +48,38 @@ inline std::vector<std::vector<int>> definition_to_sampling_block(
4848

4949
inline SamplingBlocksDefinition merge_sampling_block_definitions(
5050
const SamplingBlocksDefinition& definition_A,
51-
const SamplingBlocksDefinition& definition_B)
51+
const SamplingBlocksDefinition& definition_B,
52+
const std::string& prefixB)
5253
{
5354
SamplingBlocksDefinition merged = definition_A;
5455

5556
for (auto block_definition_B : definition_B)
5657
{
57-
auto block_B = block_definition_B.begin();
58+
std::map<std::string, std::vector<std::string>> prefixed_block_definition_B;
59+
for (auto block : block_definition_B)
60+
{
61+
for (auto value : block.second)
62+
{
63+
prefixed_block_definition_B[block.first].push_back(prefixB + value);
64+
}
65+
}
5866

67+
auto block_B = prefixed_block_definition_B.begin();
5968
bool added = false;
6069
for (auto& block_definition_A : merged)
6170
{
6271
auto block_A = block_definition_A.begin();
6372
if (block_A->first == block_B->first)
6473
{
65-
block_A->second.insert(std::end(block_A->second),
66-
std::begin(block_B->second),
67-
std::end(block_B->second));
68-
added = true;
74+
block_A->second.insert(std::end(block_A->second),
75+
std::begin(block_B->second),
76+
std::end(block_B->second));
77+
added = true;
6978
}
7079
}
7180
if (!added)
7281
{
73-
merged.push_back(block_definition_B);
82+
merged.push_back(prefixed_block_definition_B);
7483
}
7584
}
7685

@@ -101,16 +110,26 @@ inline std::vector<double> extract_ordered_values(
101110
std::vector<double> ordered_values(parameter_map.size());
102111
for (auto entry : parameter_map)
103112
{
104-
if (kinematics->name_to_index(entry.first) > ordered_values.size())
113+
std::string joint_name = entry.first;
114+
if (kinematics->name_to_index(joint_name) > ordered_values.size())
105115
{
106116
ROS_ERROR(
107117
"Joint index exceeds number of read joints. "
108118
"Did you forget to merge joint lists?");
109119
exit(-1);
110120
}
111-
ordered_values[kinematics->name_to_index(entry.first)] = entry.second;
121+
ordered_values[kinematics->name_to_index(joint_name)] = entry.second;
112122
}
113123

114124
return ordered_values;
115125
}
126+
127+
inline void insert_map_with_prefixed_keys(
128+
const std::map<std::string, double>& new_values,
129+
const std::string& prefix,
130+
std::map<std::string, double>& destination){
131+
for (auto new_value: new_values){
132+
destination[prefix + new_value.first] = new_value.second;
133+
}
134+
}
116135
}

0 commit comments

Comments
 (0)