@@ -43,7 +43,7 @@ void NodeDataManager::camera_pose_callback( const nav_msgs::Odometry::ConstPtr&
4343 w_T_cam (2 ,3 ) = msg->pose .pose .position .z ;
4444 w_T_cam (3 ,3 ) = 1.0 ;
4545 __NODEDATAMANAGER_CALLBACKS (
46- cout << " camera_pose_callback: node_pose.size()=" << node_pose.size () << " curr_pose=" << PoseManipUtils::prettyprintMatrix4d ( w_T_cam ) << endl;
46+ cout << " [NodeDataManager:: camera_pose_callback] t= " << msg-> header . stamp << " : node_pose.size()=" << node_pose.size () << " curr_pose=" << PoseManipUtils::prettyprintMatrix4d ( w_T_cam ) << endl;
4747 )
4848
4949
@@ -75,56 +75,6 @@ void NodeDataManager::camera_pose_callback( const nav_msgs::Odometry::ConstPtr&
7575}
7676
7777
78- // void NodeDataManager::loopclosure_pose_callback( const nap::NapMsg::ConstPtr& msg )
79- // {
80- // // ROS_INFO( "NodeDataManager::loopclosure_pose_callback");
81- // // Add a new edge ( 2 node*)
82- //
83- //
84- // ros::Time t_c = msg->c_timestamp;
85- // ros::Time t_p = msg->prev_timestamp;
86- // int op_mode = msg->op_mode;
87- // double goodness = (double)msg->goodness;
88- // assert( op_mode == 30 );
89- //
90- // // retrive rel-pose p_T_c
91- // Matrix4d p_T_c = Matrix4d::Zero();
92- // Quaterniond quat( msg->p_T_c.orientation.w, msg->p_T_c.orientation.x, msg->p_T_c.orientation.y, msg->p_T_c.orientation.z );
93- // p_T_c.topLeftCorner<3,3>() = quat.toRotationMatrix();
94- // p_T_c(0,3) = msg->p_T_c.position.x;
95- // p_T_c(1,3) = msg->p_T_c.position.y;
96- // p_T_c(2,3) = msg->p_T_c.position.z;
97- // p_T_c(3,3) = 1.0;
98- //
99- //
100- // // Lock
101- // node_mutex.lock() ;
102- //
103- // // loop up t_c in node_timestamps[]
104- // int index_t_c = find_indexof_node(node_timestamps, t_c );
105- //
106- // // loop up t_p in node_timestamps
107- // int index_t_p = find_indexof_node(node_timestamps, t_p );
108- //
109- // // Unlock
110- // node_mutex.unlock();
111- //
112- // cout << "[NodeDataManager] Rcvd NapMsg " << index_t_c << "<--->" << index_t_p << endl;
113- // assert( t_c > t_p );
114- //
115- // std::pair<int,int> closure_edge;
116- // closure_edge.first = index_t_p;
117- // closure_edge.second = index_t_c;
118- //
119- // edge_mutex.lock();
120- // loopclosure_edges.push_back( closure_edge );
121- // loopclosure_edges_goodness.push_back( goodness );
122- // loopclosure_p_T_c.push_back( p_T_c );
123- // edge_mutex.unlock();
124- //
125- //
126- //
127- // }
12878#ifdef __USE_SELF_LOOPEDGE_MSG
12979void NodeDataManager::loopclosure_pose_callback ( const solve_keyframe_pose_graph::LoopEdge::ConstPtr& msg )
13080#else
@@ -208,6 +158,71 @@ void NodeDataManager::loopclosure_pose_callback( const cerebro::LoopEdge::Const
208158
209159}
210160
161+
162+ void NodeDataManager::extrinsic_cam_imu_callback ( const nav_msgs::Odometry::ConstPtr msg )
163+ {
164+ // __NODEDATAMANAGER_CALLBACKS( cout << TermColor::GREEN() << "[NodeDataManager::extrinsic_cam_imu_callback]" << msg->header.stamp << TermColor::RESET() << endl; )
165+
166+ // Acquire lock
167+ // update imu_T_cam,
168+ // update last got timestamp
169+ // set is_imu_cam_extrinsic_available to true
170+ {
171+ std::lock_guard<std::mutex> lk (imu_cam_mx);
172+ PoseManipUtils::geometry_msgs_Pose_to_eigenmat ( msg->pose .pose , this ->imu_T_cam );
173+ this ->imu_T_cam_stamp = msg->header .stamp ;
174+ this ->imu_T_cam_available = true ;
175+
176+ }
177+
178+
179+ __NODEDATAMANAGER_CALLBACKS (
180+ cout << TermColor::GREEN () << " [NodeDataManager::extrinsic_cam_imu_callback]" << msg->header .stamp << TermColor::RESET ();
181+ cout << " imu_T_cam = " << PoseManipUtils::prettyprintMatrix4d (this ->imu_T_cam );
182+ cout << endl;
183+ )
184+
185+ }
186+
187+
188+ Matrix4d NodeDataManager::get_imu_T_cam () const
189+ {
190+ std::lock_guard<std::mutex> lk (imu_cam_mx);
191+ // Remove this if, once i am confident everythinbg is ok!
192+ if ( imu_T_cam_available == false )
193+ {
194+ ROS_ERROR ( " [NodeDataManager::get_imu_T_cam] posegraph solver, you requested imu_T_cam aka imu-cam extrinsic calib, but currently it is not available. FATAL ERROR.\n " );
195+ exit (1 );
196+ }
197+ assert ( imu_T_cam_available );
198+ return imu_T_cam;
199+ }
200+
201+
202+ void NodeDataManager::get_imu_T_cam ( Matrix4d& res, ros::Time& _t ) const
203+ {
204+ std::lock_guard<std::mutex> lk (imu_cam_mx);
205+ // Remove this if, once i am confident everythinbg is ok!
206+ if ( imu_T_cam_available == false )
207+ {
208+ ROS_ERROR ( " [NodeDataManager::get_imu_T_cam] posegraph solver, you requested imu_T_cam aka imu-cam extrinsic calib, but currently it is not available. FATAL ERROR.\n " );
209+ exit (1 );
210+ }
211+
212+ assert ( imu_T_cam_available );
213+ res = imu_T_cam;
214+ _t = imu_T_cam_stamp;
215+ return ;
216+ }
217+
218+ bool NodeDataManager::is_imu_T_cam_available () const
219+ {
220+ std::lock_guard<std::mutex> lk (imu_cam_mx);
221+ return imu_T_cam_available;
222+ }
223+
224+
225+
211226// internal node queue length info
212227void NodeDataManager::print_nodes_lengths () const
213228{
@@ -1005,7 +1020,7 @@ int NodeDataManager::n_worlds() const
10051020
10061021
10071022
1008- void NodeDataManager::print_worlds_info ( int verbosity ) const
1023+ void NodeDataManager::print_worlds_info ( int verbosity ) const
10091024{
10101025
10111026 bool start_ends_u_of_worlds=false , rel_pose_between_worlds=false , kidnap_info=false , which_world_each_node_belong_to=false ;
0 commit comments