mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-07-09 03:40:34 +08:00
[wip] gz plugins (#24153)
* added optical flow to gz bridge * log high rate sensor data * it builds * it builds and publishes, need to figure out build system now * single library * rename files * add gz_msg for proto, fix build, test basic flow impl * update rate, no blur * PX4-OpticalFlow impl * rename OpticalFlowSensor * rename plugins * disable gps, add plugin path * cleanup * fix plugin path export * properly add OpticalFlowSystem dependency to gz * move everything under gz_bridge * cleanup * add GZ_VEBOSE * cleanup model/world build target cmake * added GZ_DISTRO env, harmonic or ionic * fix gz transport, unstage ark fpv bootloader * unstage logged_topics.cpp * cleanup * make format * ci fixes * fix cmake * remove required for gz-transport * use model/world namespace for multi vehicle sim. Make format * make format * license * remove needless member var * made separate Kconfig for gz_msgs, gz_plugins, and gz_bridge * move OpticalFlow build to it's own cmake * fix clang * cleanup comments * fix rebase
This commit is contained in:
@@ -135,6 +135,14 @@ int GZBridge::init()
|
||||
return PX4_ERROR;
|
||||
}
|
||||
|
||||
std::string flow_topic = "/world/" + _world_name + "/model/" + _model_name +
|
||||
"/link/flow_link/sensor/optical_flow/optical_flow";
|
||||
|
||||
if (!_node.Subscribe(flow_topic, &GZBridge::opticalFlowCallback, this)) {
|
||||
PX4_ERR("failed to subscribe to %s", flow_topic.c_str());
|
||||
return PX4_ERROR;
|
||||
}
|
||||
|
||||
if (!_mixing_interface_esc.init(_model_name)) {
|
||||
PX4_ERR("failed to init ESC output");
|
||||
return PX4_ERROR;
|
||||
@@ -168,6 +176,40 @@ void GZBridge::clockCallback(const gz::msgs::Clock &msg)
|
||||
px4_clock_settime(CLOCK_MONOTONIC, &ts);
|
||||
}
|
||||
|
||||
void GZBridge::opticalFlowCallback(const px4::msgs::OpticalFlow &flow)
|
||||
{
|
||||
sensor_optical_flow_s msg = {};
|
||||
|
||||
msg.timestamp = hrt_absolute_time();
|
||||
msg.timestamp_sample = flow.time_usec();
|
||||
msg.pixel_flow[0] = flow.integrated_x();
|
||||
msg.pixel_flow[1] = flow.integrated_y();
|
||||
msg.quality = flow.quality();
|
||||
msg.integration_timespan_us = flow.integration_time_us();
|
||||
|
||||
// Static data
|
||||
device::Device::DeviceId id;
|
||||
id.devid_s.bus_type = device::Device::DeviceBusType::DeviceBusType_SIMULATION;
|
||||
id.devid_s.bus = 0;
|
||||
id.devid_s.address = 0;
|
||||
id.devid_s.devtype = DRV_FLOW_DEVTYPE_SIM;
|
||||
msg.device_id = id.devid;
|
||||
|
||||
// values taken from PAW3902
|
||||
msg.mode = sensor_optical_flow_s::MODE_LOWLIGHT;
|
||||
msg.max_flow_rate = 7.4f;
|
||||
msg.min_ground_distance = 0.f;
|
||||
msg.max_ground_distance = 30.f;
|
||||
msg.error_count = 0;
|
||||
|
||||
// No delta angle
|
||||
// No distance
|
||||
// This means that delta angle will come from vehicle gyro
|
||||
// Distance will come from vehicle distance sensor
|
||||
|
||||
_optical_flow_pub.publish(msg);
|
||||
}
|
||||
|
||||
void GZBridge::barometerCallback(const gz::msgs::FluidPressure &msg)
|
||||
{
|
||||
const uint64_t timestamp = hrt_absolute_time();
|
||||
|
||||
Reference in New Issue
Block a user