fullspeed_navdata now affects publishing of /ardrone/navdata,imu,mag topics as well.
This update also includes a few speed improvements for the case where fullspeed_navdata==true.
Esse commit está contido em:
@@ -16,7 +16,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef NAVDATA_STRUCTS_HEADER_PUBLIC
|
#ifdef NAVDATA_STRUCTS_HEADER_PUBLIC
|
||||||
void PublishNavdataTypes(navdata_unpacked_t &n, ros::Time &received);
|
void PublishNavdataTypes(const navdata_unpacked_t &n, const ros::Time &received);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef NAVDATA_STRUCTS_HEADER_PRIVATE
|
#ifdef NAVDATA_STRUCTS_HEADER_PRIVATE
|
||||||
|
|||||||
@@ -41,7 +41,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef NAVDATA_STRUCTS_HEADER_PUBLIC
|
#ifdef NAVDATA_STRUCTS_HEADER_PUBLIC
|
||||||
void PublishNavdataTypes(navdata_unpacked_t &n, ros::Time &received);
|
void PublishNavdataTypes(const navdata_unpacked_t &n, const ros::Time &received);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef NAVDATA_STRUCTS_HEADER_PRIVATE
|
#ifdef NAVDATA_STRUCTS_HEADER_PRIVATE
|
||||||
@@ -378,7 +378,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef NAVDATA_STRUCTS_SOURCE
|
#ifdef NAVDATA_STRUCTS_SOURCE
|
||||||
void ARDroneDriver::PublishNavdataTypes(navdata_unpacked_t &n, ros::Time &received)
|
void ARDroneDriver::PublishNavdataTypes(const navdata_unpacked_t &n, const ros::Time &received)
|
||||||
{
|
{
|
||||||
if(initialized_navdata_publishers)
|
if(initialized_navdata_publishers)
|
||||||
{
|
{
|
||||||
|
|||||||
+20
-12
@@ -135,7 +135,7 @@ void ARDroneDriver::run()
|
|||||||
ardrone_control_config.ardrone_name,
|
ardrone_control_config.ardrone_name,
|
||||||
(IS_ARDRONE1) ? 1 : 2,
|
(IS_ARDRONE1) ? 1 : 2,
|
||||||
ardrone_control_config.num_version_soft,
|
ardrone_control_config.num_version_soft,
|
||||||
shared_raw_navdata.navdata_demo.vbat_flying_percentage);
|
shared_raw_navdata->navdata_demo.vbat_flying_percentage);
|
||||||
ROS_INFO("Navdata Publish Settings:");
|
ROS_INFO("Navdata Publish Settings:");
|
||||||
ROS_INFO(" Legacy Mode: %s", enabled_legacy_navdata ? "On" : "Off"); //Bug: This is being inited after in the NavdataMessage*.h
|
ROS_INFO(" Legacy Mode: %s", enabled_legacy_navdata ? "On" : "Off"); //Bug: This is being inited after in the NavdataMessage*.h
|
||||||
ROS_INFO(" ROS Loop Rate: %d", looprate);
|
ROS_INFO(" ROS Loop Rate: %d", looprate);
|
||||||
@@ -162,13 +162,26 @@ void ARDroneDriver::run()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
vp_os_mutex_lock(&navdata_lock);
|
if(!fullspeed_navdata)
|
||||||
copy_current_navdata_id = current_navdata_id;
|
|
||||||
vp_os_mutex_unlock(&navdata_lock);
|
|
||||||
if (copy_current_navdata_id != last_navdata_id)
|
|
||||||
{
|
{
|
||||||
last_navdata_id = copy_current_navdata_id;
|
vp_os_mutex_lock(&navdata_lock);
|
||||||
publish_navdata();
|
copy_current_navdata_id = current_navdata_id;
|
||||||
|
vp_os_mutex_unlock(&navdata_lock);
|
||||||
|
if (copy_current_navdata_id != last_navdata_id)
|
||||||
|
{
|
||||||
|
vp_os_mutex_lock(&navdata_lock);
|
||||||
|
last_navdata_id = copy_current_navdata_id;
|
||||||
|
|
||||||
|
// Thread safe copy of interesting Navdata data
|
||||||
|
// TODO: This is a very expensive task, can we optimize here?
|
||||||
|
// maybe ignoring the copy when it is not needed.
|
||||||
|
navdata_unpacked_t navdata_raw = *shared_raw_navdata;
|
||||||
|
ros::Time navdata_receive_time = shared_navdata_receive_time;
|
||||||
|
vp_os_mutex_unlock(&navdata_lock);
|
||||||
|
|
||||||
|
PublishNavdataTypes(navdata_raw, navdata_receive_time); // This function is defined in the template NavdataMessageDefinitions.h template file
|
||||||
|
publish_navdata(navdata_raw, navdata_receive_time);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (freq_dev == 0) publish_tf();
|
if (freq_dev == 0) publish_tf();
|
||||||
|
|
||||||
@@ -620,11 +633,6 @@ void ARDroneDriver::publish_navdata(navdata_unpacked_t &navdata_raw, const ros::
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!fullspeed_navdata) // only transmit this data in the loop if we're transmitting at loop speed, rather than full speed
|
|
||||||
{
|
|
||||||
PublishNavdataTypes(navdata_raw, navdata_receive_time); // This function is defined in the template NavdataMessageDefinitions.h template file
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!enabled_legacy_navdata || ((navdata_pub.getNumSubscribers() == 0) && (imu_pub.getNumSubscribers() == 0) && (mag_pub.getNumSubscribers() == 0)))
|
if (!enabled_legacy_navdata || ((navdata_pub.getNumSubscribers() == 0) && (imu_pub.getNumSubscribers() == 0) && (mag_pub.getNumSubscribers() == 0)))
|
||||||
return; // why bother, no one is listening.
|
return; // why bother, no one is listening.
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
#define _ARDRONE_DRIVER_H_
|
#define _ARDRONE_DRIVER_H_
|
||||||
|
|
||||||
class ARDroneDriver;
|
class ARDroneDriver;
|
||||||
|
|
||||||
#include <ros/ros.h>
|
#include <ros/ros.h>
|
||||||
#include <image_transport/image_transport.h>
|
#include <image_transport/image_transport.h>
|
||||||
#include <tf/transform_broadcaster.h>
|
#include <tf/transform_broadcaster.h>
|
||||||
@@ -54,8 +55,9 @@ public:
|
|||||||
#undef NAVDATA_STRUCTS_HEADER_PUBLIC
|
#undef NAVDATA_STRUCTS_HEADER_PUBLIC
|
||||||
|
|
||||||
void publish_video();
|
void publish_video();
|
||||||
|
void publish_navdata(navdata_unpacked_t &navdata_raw, const ros::Time &navdata_receive_time);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void publish_navdata();
|
|
||||||
void publish_tf();
|
void publish_tf();
|
||||||
bool readCovParams(std::string param_name, boost::array<double, 9> &cov_array);
|
bool readCovParams(std::string param_name, boost::array<double, 9> &cov_array);
|
||||||
double calcAverage(std::vector<double> &vec);
|
double calcAverage(std::vector<double> &vec);
|
||||||
@@ -111,10 +113,6 @@ private:
|
|||||||
bool inited;
|
bool inited;
|
||||||
std::string droneFrameId;
|
std::string droneFrameId;
|
||||||
|
|
||||||
// Navdata copy
|
|
||||||
navdata_unpacked_t navdata_raw;
|
|
||||||
ros::Time navdata_receive_time;
|
|
||||||
|
|
||||||
// Load auto-generated declarations for full navdata
|
// Load auto-generated declarations for full navdata
|
||||||
#define NAVDATA_STRUCTS_HEADER_PRIVATE
|
#define NAVDATA_STRUCTS_HEADER_PRIVATE
|
||||||
#include "NavdataMessageDefinitions.h"
|
#include "NavdataMessageDefinitions.h"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
#include "teleop_twist.h"
|
#include "teleop_twist.h"
|
||||||
|
|
||||||
|
|
||||||
navdata_unpacked_t shared_raw_navdata;
|
navdata_unpacked_t *shared_raw_navdata;
|
||||||
ros::Time shared_navdata_receive_time;
|
ros::Time shared_navdata_receive_time;
|
||||||
|
|
||||||
vp_os_mutex_t navdata_lock;
|
vp_os_mutex_t navdata_lock;
|
||||||
@@ -227,14 +227,15 @@ extern "C" {
|
|||||||
|
|
||||||
C_RESULT navdata_custom_process(const navdata_unpacked_t * const pnd) {
|
C_RESULT navdata_custom_process(const navdata_unpacked_t * const pnd) {
|
||||||
vp_os_mutex_lock(&navdata_lock);
|
vp_os_mutex_lock(&navdata_lock);
|
||||||
// TODO: This is expensive, too (1908 Bytes)!
|
|
||||||
shared_raw_navdata = *pnd;
|
|
||||||
shared_navdata_receive_time = ros::Time::now();
|
shared_navdata_receive_time = ros::Time::now();
|
||||||
|
shared_raw_navdata = (navdata_unpacked_t*)pnd;
|
||||||
|
|
||||||
if(fullspeed_navdata)
|
if(fullspeed_navdata)
|
||||||
{
|
{
|
||||||
rosDriver->PublishNavdataTypes(shared_raw_navdata,shared_navdata_receive_time); //if we're publishing navdata at full speed, publish!
|
rosDriver->PublishNavdataTypes(*shared_raw_navdata, shared_navdata_receive_time); //if we're publishing navdata at full speed, publish!
|
||||||
|
rosDriver->publish_navdata(*shared_raw_navdata, shared_navdata_receive_time);
|
||||||
}
|
}
|
||||||
|
|
||||||
current_navdata_id++;
|
current_navdata_id++;
|
||||||
vp_os_mutex_unlock(&navdata_lock);
|
vp_os_mutex_unlock(&navdata_lock);
|
||||||
return C_OK;
|
return C_OK;
|
||||||
|
|||||||
+3
-1
@@ -46,8 +46,10 @@ extern video_decoder_config_t vec;
|
|||||||
#include "ardrone_driver.h"
|
#include "ardrone_driver.h"
|
||||||
|
|
||||||
#define NB_DRIVER_POST_STAGES 10
|
#define NB_DRIVER_POST_STAGES 10
|
||||||
extern navdata_unpacked_t shared_raw_navdata;
|
|
||||||
extern ARDroneDriver *rosDriver;
|
extern ARDroneDriver *rosDriver;
|
||||||
|
|
||||||
|
extern navdata_unpacked_t *shared_raw_navdata;
|
||||||
extern ros::Time shared_navdata_receive_time;
|
extern ros::Time shared_navdata_receive_time;
|
||||||
|
|
||||||
extern vp_os_mutex_t navdata_lock;
|
extern vp_os_mutex_t navdata_lock;
|
||||||
|
|||||||
Referência em uma Nova Issue
Bloquear um usuário