mirror of
https://github.com/introlab/rtabmap_ros.git
synced 2026-10-03 16:27:46 +08:00
Added fiducial_msgs support (aruco_detect), just connect to /fiducial_transforms input of rtabmap node.
This commit is contained in:
@@ -28,6 +28,7 @@ find_package(octomap_msgs)
|
|||||||
find_package(apriltag_ros)
|
find_package(apriltag_ros)
|
||||||
find_package(rviz)
|
find_package(rviz)
|
||||||
find_package(find_object_2d)
|
find_package(find_object_2d)
|
||||||
|
find_package(fiducial_msgs)
|
||||||
|
|
||||||
## System dependencies are found with CMake's conventions
|
## System dependencies are found with CMake's conventions
|
||||||
# find_package(Boost REQUIRED COMPONENTS system)
|
# find_package(Boost REQUIRED COMPONENTS system)
|
||||||
@@ -293,6 +294,19 @@ SET(Libraries
|
|||||||
ADD_DEFINITIONS("-DWITH_APRILTAG_ROS")
|
ADD_DEFINITIONS("-DWITH_APRILTAG_ROS")
|
||||||
ENDIF(apriltag_ros_FOUND)
|
ENDIF(apriltag_ros_FOUND)
|
||||||
|
|
||||||
|
# If fiducial_msgs is found, add definition
|
||||||
|
IF(fiducial_msgs_FOUND)
|
||||||
|
MESSAGE(STATUS "WITH fiducial_msgs")
|
||||||
|
include_directories(
|
||||||
|
${fiducial_msgs_INCLUDE_DIRS}
|
||||||
|
)
|
||||||
|
SET(Libraries
|
||||||
|
${fiducial_msgs_LIBRARIES}
|
||||||
|
${Libraries}
|
||||||
|
)
|
||||||
|
ADD_DEFINITIONS("-DWITH_FIDUCIAL_MSGS")
|
||||||
|
ENDIF(fiducial_msgs_FOUND)
|
||||||
|
|
||||||
############################
|
############################
|
||||||
## Declare a cpp library
|
## Declare a cpp library
|
||||||
############################
|
############################
|
||||||
|
|||||||
@@ -78,6 +78,11 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|||||||
#include <apriltag_ros/AprilTagDetectionArray.h>
|
#include <apriltag_ros/AprilTagDetectionArray.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//#define WITH_FIDUCIAL_MSGS
|
||||||
|
#ifdef WITH_FIDUCIAL_MSGS
|
||||||
|
#include <fiducial_msgs/FiducialTransformArray.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <actionlib/client/simple_action_client.h>
|
#include <actionlib/client/simple_action_client.h>
|
||||||
#include <move_base_msgs/MoveBaseAction.h>
|
#include <move_base_msgs/MoveBaseAction.h>
|
||||||
#include <move_base_msgs/MoveBaseActionGoal.h>
|
#include <move_base_msgs/MoveBaseActionGoal.h>
|
||||||
@@ -164,6 +169,9 @@ private:
|
|||||||
void gpsFixAsyncCallback(const sensor_msgs::NavSatFixConstPtr & gpsFixMsg);
|
void gpsFixAsyncCallback(const sensor_msgs::NavSatFixConstPtr & gpsFixMsg);
|
||||||
#ifdef WITH_APRILTAG_ROS
|
#ifdef WITH_APRILTAG_ROS
|
||||||
void tagDetectionsAsyncCallback(const apriltag_ros::AprilTagDetectionArray & tagDetections);
|
void tagDetectionsAsyncCallback(const apriltag_ros::AprilTagDetectionArray & tagDetections);
|
||||||
|
#endif
|
||||||
|
#ifdef WITH_FIDUCIAL_MSGS
|
||||||
|
void fiducialDetectionsAsyncCallback(const fiducial_msgs::FiducialTransformArray & fiducialDetections);
|
||||||
#endif
|
#endif
|
||||||
void imuAsyncCallback(const sensor_msgs::ImuConstPtr & tagDetections);
|
void imuAsyncCallback(const sensor_msgs::ImuConstPtr & tagDetections);
|
||||||
void republishNodeDataCallback(const std_msgs::Int32MultiArray::ConstPtr& msg);
|
void republishNodeDataCallback(const std_msgs::Int32MultiArray::ConstPtr& msg);
|
||||||
@@ -368,6 +376,7 @@ private:
|
|||||||
ros::Subscriber gpsFixAsyncSub_;
|
ros::Subscriber gpsFixAsyncSub_;
|
||||||
rtabmap::GPS gps_;
|
rtabmap::GPS gps_;
|
||||||
ros::Subscriber tagDetectionsSub_;
|
ros::Subscriber tagDetectionsSub_;
|
||||||
|
ros::Subscriber fiducialTransfromsSub_;
|
||||||
std::map<int, std::pair<geometry_msgs::PoseWithCovarianceStamped, float> > tags_; // id, <pose, size>
|
std::map<int, std::pair<geometry_msgs::PoseWithCovarianceStamped, float> > tags_; // id, <pose, size>
|
||||||
ros::Subscriber imuSub_;
|
ros::Subscriber imuSub_;
|
||||||
std::map<double, rtabmap::Transform> imus_;
|
std::map<double, rtabmap::Transform> imus_;
|
||||||
|
|||||||
@@ -142,6 +142,7 @@
|
|||||||
<arg name="tag_topic" default="/tag_detections" /> <!-- apriltags async subscription -->
|
<arg name="tag_topic" default="/tag_detections" /> <!-- apriltags async subscription -->
|
||||||
<arg name="tag_linear_variance" default="0.0001" />
|
<arg name="tag_linear_variance" default="0.0001" />
|
||||||
<arg name="tag_angular_variance" default="9999" /> <!-- >=9999 means ignore rotation in optimization, when rotation estimation of the tag is not reliable -->
|
<arg name="tag_angular_variance" default="9999" /> <!-- >=9999 means ignore rotation in optimization, when rotation estimation of the tag is not reliable -->
|
||||||
|
<arg name="fiducial_topic" default="/fiducial_transforms" /> <!-- aruco_detect async subscription, use tag_linear_variance and tag_angular_variance to set covriance -->
|
||||||
|
|
||||||
<!-- These arguments should not be modified directly, see referred topics without "_relay" suffix above -->
|
<!-- These arguments should not be modified directly, see referred topics without "_relay" suffix above -->
|
||||||
<arg if="$(arg compressed)" name="rgb_topic_relay" default="$(arg rgb_topic)_relay"/>
|
<arg if="$(arg compressed)" name="rgb_topic_relay" default="$(arg rgb_topic)_relay"/>
|
||||||
@@ -382,6 +383,7 @@
|
|||||||
<remap from="user_data_async" to="$(arg user_data_async_topic)"/>
|
<remap from="user_data_async" to="$(arg user_data_async_topic)"/>
|
||||||
<remap from="gps/fix" to="$(arg gps_topic)"/>
|
<remap from="gps/fix" to="$(arg gps_topic)"/>
|
||||||
<remap from="tag_detections" to="$(arg tag_topic)"/>
|
<remap from="tag_detections" to="$(arg tag_topic)"/>
|
||||||
|
<remap from="fiducial_transforms" to="$(arg fiducial_topic)"/>
|
||||||
<remap from="odom" to="$(arg odom_topic)"/>
|
<remap from="odom" to="$(arg odom_topic)"/>
|
||||||
<remap from="imu" to="$(arg imu_topic)"/>
|
<remap from="imu" to="$(arg imu_topic)"/>
|
||||||
|
|
||||||
|
|||||||
@@ -824,6 +824,9 @@ void CoreWrapper::onInit()
|
|||||||
gpsFixAsyncSub_ = nh.subscribe("gps/fix", 1, &CoreWrapper::gpsFixAsyncCallback, this);
|
gpsFixAsyncSub_ = nh.subscribe("gps/fix", 1, &CoreWrapper::gpsFixAsyncCallback, this);
|
||||||
#ifdef WITH_APRILTAG_ROS
|
#ifdef WITH_APRILTAG_ROS
|
||||||
tagDetectionsSub_ = nh.subscribe("tag_detections", 1, &CoreWrapper::tagDetectionsAsyncCallback, this);
|
tagDetectionsSub_ = nh.subscribe("tag_detections", 1, &CoreWrapper::tagDetectionsAsyncCallback, this);
|
||||||
|
#endif
|
||||||
|
#ifdef WITH_FIDUCIAL_MSGS
|
||||||
|
fiducialTransfromsSub_ = nh.subscribe("fiducial_transforms", 1, &CoreWrapper::fiducialDetectionsAsyncCallback, this);
|
||||||
#endif
|
#endif
|
||||||
imuSub_ = nh.subscribe("imu", 100, &CoreWrapper::imuAsyncCallback, this);
|
imuSub_ = nh.subscribe("imu", 100, &CoreWrapper::imuAsyncCallback, this);
|
||||||
republishNodeDataSub_ = nh.subscribe("republish_node_data", 100, &CoreWrapper::republishNodeDataCallback, this);
|
republishNodeDataSub_ = nh.subscribe("republish_node_data", 100, &CoreWrapper::republishNodeDataCallback, this);
|
||||||
@@ -2468,6 +2471,27 @@ void CoreWrapper::tagDetectionsAsyncCallback(const apriltag_ros::AprilTagDetecti
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef WITH_FIDUCIAL_MSGS
|
||||||
|
void CoreWrapper::fiducialDetectionsAsyncCallback(const fiducial_msgs::FiducialTransformArray & fiducialDetections)
|
||||||
|
{
|
||||||
|
if(!paused_)
|
||||||
|
{
|
||||||
|
for(unsigned int i=0; i<fiducialDetections.transforms.size(); ++i)
|
||||||
|
{
|
||||||
|
geometry_msgs::PoseWithCovarianceStamped p;
|
||||||
|
p.pose.pose.orientation = fiducialDetections.transforms[i].transform.rotation;
|
||||||
|
p.pose.pose.position.x = fiducialDetections.transforms[i].transform.translation.x;
|
||||||
|
p.pose.pose.position.y = fiducialDetections.transforms[i].transform.translation.y;
|
||||||
|
p.pose.pose.position.z = fiducialDetections.transforms[i].transform.translation.z;
|
||||||
|
p.header = fiducialDetections.header;
|
||||||
|
uInsert(tags_,
|
||||||
|
std::make_pair(fiducialDetections.transforms[i].fiducial_id,
|
||||||
|
std::make_pair(p, 0.0f)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void CoreWrapper::imuAsyncCallback(const sensor_msgs::ImuConstPtr & msg)
|
void CoreWrapper::imuAsyncCallback(const sensor_msgs::ImuConstPtr & msg)
|
||||||
{
|
{
|
||||||
if(!paused_)
|
if(!paused_)
|
||||||
|
|||||||
Reference in New Issue
Block a user