Mavros: menggunakan plugin fake_gps dan plugin vision_pose_estimation dengan Ardupilot Firmware

Dibuat pada 2 Mar 2018  ·  5Komentar  ·  Sumber: mavlink/mavros

Detail masalah

Saya ingin mengontrol drone saya ( SkyViper ) di dalam ruangan dengan menggunakan kamera onboard untuk estimasi pose. Sebenarnya saya melihat pemandangan yang memiliki banyak penanda ArUco dan memperkirakan pose drone saya dengan menggunakan deteksi aruco opencv dan algoritma estimasi pose. Singkat cerita, saya menggunakan visi untuk memperkirakan pose 6-D drone. Sekarang saya bermaksud mengirim data ini ke FCU untuk mengendalikan drone dalam mode terpandu, di dalam ruangan. Dengan firmware arducopter, ternyata ada dua hal yang bisa saya lakukan:
Sebuah. gunakan plugin fake_pgs.
b. gunakan plugin vision_pose_estimate
Tapi saya mengalami masalah dengan keduanya. Saya ingin menjelaskan apa yang telah saya lakukan untuk kedua pendekatan yang disebutkan di atas sehingga pembaca dapat membantu saya, jika saya melakukan kesalahan di suatu tempat.

Sebuah. menggunakan fake_gps

  1. Menambahkan plugin fake_gps ke apm_config.yaml saya.
  2. Diedit apm_pluginlists.yaml dan berikut adalah tampilan bagian fake_gps:
# fake_gps
fake_gps:
  # select data source
  use_mocap: true       # ~mocap/pose
  mocap_transform: true   # ~mocap/tf instead of pose
  use_vision: false       # ~vision (pose)
  # origin (default: Zürich)
  geo_origin:
    lat: 30.6197674          # latitude [degrees]
    lon:  -96.3414215          # longitude [degrees]
    alt: 99.9674829152          # altitude (height over the WGS-84 ellipsoid) [meters]
  eph: 2.0
  epv: 2.0
  satellites_visible: 10   # virtual number of visible satellites
  fix_type: 3             # type of GPS fix (default: 3D)
  tf:
    listen: false
    send: false           # send TF?
    frame_id: "map"       # TF frame_id
    child_frame_id: "Quadrotor_pose" # TF child_frame_id
    rate_limit: 10.0      # TF rate
  gps_rate: 5.0           # GPS data publishing rate
  1. Saya menerbitkan pose robot di atas rostopic / mavros / fake_gps / mocap / tf di sekitar 4 Hz (saya dapat meningkatkannya hingga 30 Hz tetapi saya pikir parameter gps_rate membatasinya, btw dapatkah saya meningkatkan gps_rate?)
  2. Saya echo / mavros / global_position / global Saya tidak melihat hasil yang berarti,

Adakah yang bisa membantu saya di sini untuk membuat hal ini bekerja? Apakah ada hal lain yang perlu saya lakukan? Parameter apa saja yang harus saya atur atau hapus?

b. menggunakan vision_pose

  1. Menambahkan plugin fake_gps ke apm_config.yaml saya.
  2. Diedit apm_pluginlists.yaml dan berikut adalah tampilan bagian vision_pose:
# vision_pose_estimate
vision_pose:
  tf:
    listen: false           # enable tf listener (disable topic subscribers)
    frame_id: "map"
    child_frame_id: "vision_estimate"
    rate_limit: 10.0
  1. Saya mempublikasikan pose robot di atas rostopic / mavros / vision_pose / pose
  2. Saya membuat beberapa modifikasi di vision_position_estimate.cpp dan menggunakan VISION_POSITION_DELTA alih-alih VISION_POSITION_ESTIMATE .
  3. Saya menetapkan flag yang sesuai dalam kode di atas untuk melihat apakah kode ini dijalankan dan flag tersebut dicetak, jadi saya menyimpulkan bahwa mavros mengirim data ke FCU tetapi mungkin tidak ada penerimaan di akhir FCU.

Banyak waktu yang dihabiskan untuk ini, bantuan apa pun sangat dihargai !!
PS Saya bisa melakukan vision_position_estimate di firmware PX4, belum mencoba fake_gps di sana tetapi karena beberapa kendala, saya ingin membuat ini bekerja pada firmware arducopter.

Versi dan platform MAVROS

Mavros: 0.18
ROS: Kinetik
Ubuntu: 16.04

Jenis dan versi autopilot

[X] ArduPilot
[] PX4

Versi: 3.4.6.0

Log node

started roslaunch server http://subodh-desktop:41065/

SUMMARY
========

CLEAR PARAMETERS
 * /mavros/

PARAMETERS
 * /mavros/cmd/use_comp_id_system_control: False
 * /mavros/conn/heartbeat_rate: 1.0
 * /mavros/conn/system_time_rate: 0.0
 * /mavros/conn/timeout: 10.0
 * /mavros/conn/timesync_rate: 0.0
 * /mavros/distance_sensor/rangefinder_pub/field_of_view: 0.0
 * /mavros/distance_sensor/rangefinder_pub/frame_id: lidar
 * /mavros/distance_sensor/rangefinder_pub/id: 0
 * /mavros/distance_sensor/rangefinder_pub/send_tf: False
 * /mavros/distance_sensor/rangefinder_pub/sensor_position/x: 0.0
 * /mavros/distance_sensor/rangefinder_pub/sensor_position/y: 0.0
 * /mavros/distance_sensor/rangefinder_pub/sensor_position/z: -0.1
 * /mavros/distance_sensor/rangefinder_sub/id: 1
 * /mavros/distance_sensor/rangefinder_sub/orientation: PITCH_270
 * /mavros/distance_sensor/rangefinder_sub/subscriber: True
 * /mavros/fake_gps/eph: 2.0
 * /mavros/fake_gps/epv: 2.0
 * /mavros/fake_gps/fix_type: 3
 * /mavros/fake_gps/geo_origin/alt: 99.9674829152
 * /mavros/fake_gps/geo_origin/lat: 30.6197674
 * /mavros/fake_gps/geo_origin/lon: -96.3414215
 * /mavros/fake_gps/gps_rate: 5.0
 * /mavros/fake_gps/mocap_transform: True
 * /mavros/fake_gps/satellites_visible: 10
 * /mavros/fake_gps/tf/child_frame_id: Quadrotor_pose
 * /mavros/fake_gps/tf/frame_id: map
 * /mavros/fake_gps/tf/listen: False
 * /mavros/fake_gps/tf/rate_limit: 10.0
 * /mavros/fake_gps/tf/send: False
 * /mavros/fake_gps/use_mocap: True
 * /mavros/fake_gps/use_vision: False
 * /mavros/fcu_protocol: v2.0
 * /mavros/fcu_url: /dev/ttyACM0:57600
 * /mavros/gcs_url: 
 * /mavros/global_position/child_frame_id: base_link
 * /mavros/global_position/frame_id: map
 * /mavros/global_position/rot_covariance: 99999.0
 * /mavros/global_position/tf/child_frame_id: base_link
 * /mavros/global_position/tf/frame_id: map
 * /mavros/global_position/tf/global_frame_id: earth
 * /mavros/global_position/tf/send: False
 * /mavros/global_position/use_relative_alt: True
 * /mavros/image/frame_id: px4flow
 * /mavros/imu/angular_velocity_stdev: 0.000349065850399
 * /mavros/imu/frame_id: base_link
 * /mavros/imu/linear_acceleration_stdev: 0.0003
 * /mavros/imu/magnetic_stdev: 0.0
 * /mavros/imu/orientation_stdev: 1.0
 * /mavros/local_position/frame_id: map
 * /mavros/local_position/tf/child_frame_id: base_link
 * /mavros/local_position/tf/frame_id: map
 * /mavros/local_position/tf/send: False
 * /mavros/local_position/tf/send_fcu: False
 * /mavros/mission/pull_after_gcs: True
 * /mavros/mocap/use_pose: False
 * /mavros/mocap/use_tf: True
 * /mavros/odometry/estimator_type: 3
 * /mavros/odometry/frame_tf/desired_frame: ned
 * /mavros/plugin_blacklist: ['actuator_contro...
 * /mavros/plugin_whitelist: ['fake_gps', 'vis...
 * /mavros/px4flow/frame_id: px4flow
 * /mavros/px4flow/ranger_fov: 0.118682389136
 * /mavros/px4flow/ranger_max_range: 5.0
 * /mavros/px4flow/ranger_min_range: 0.3
 * /mavros/safety_area/p1/x: 1.0
 * /mavros/safety_area/p1/y: 1.0
 * /mavros/safety_area/p1/z: 1.0
 * /mavros/safety_area/p2/x: -1.0
 * /mavros/safety_area/p2/y: -1.0
 * /mavros/safety_area/p2/z: -1.0
 * /mavros/setpoint_accel/send_force: False
 * /mavros/setpoint_attitude/reverse_thrust: False
 * /mavros/setpoint_attitude/tf/child_frame_id: target_attitude
 * /mavros/setpoint_attitude/tf/frame_id: map
 * /mavros/setpoint_attitude/tf/listen: False
 * /mavros/setpoint_attitude/tf/rate_limit: 50.0
 * /mavros/setpoint_attitude/use_quaternion: False
 * /mavros/setpoint_position/mav_frame: LOCAL_NED
 * /mavros/setpoint_position/tf/child_frame_id: target_position
 * /mavros/setpoint_position/tf/frame_id: map
 * /mavros/setpoint_position/tf/listen: False
 * /mavros/setpoint_position/tf/rate_limit: 50.0
 * /mavros/setpoint_velocity/mav_frame: LOCAL_NED
 * /mavros/startup_px4_usb_quirk: False
 * /mavros/sys/disable_diag: False
 * /mavros/sys/min_voltage: 10.0
 * /mavros/target_component_id: 1
 * /mavros/target_system_id: 1
 * /mavros/tdr_radio/low_rssi: 40
 * /mavros/time/time_ref_source: fcu
 * /mavros/time/timesync_avg_alpha: 0.6
 * /mavros/time/timesync_mode: NONE
 * /mavros/vibration/frame_id: base_link
 * /mavros/vision_pose/tf/child_frame_id: Quadrotor_pose
 * /mavros/vision_pose/tf/frame_id: map
 * /mavros/vision_pose/tf/listen: False
 * /mavros/vision_pose/tf/rate_limit: 10.0
 * /mavros/vision_speed/listen_twist: False
 * /rosdistro: kinetic
 * /rosversion: 1.12.12

NODES
  /
    mavros (mavros/mavros_node)

auto-starting new master
process[master]: started with pid [26930]
ROS_MASTER_URI=http://localhost:11311

setting /run_id to af2a9730-1e56-11e8-86d2-001fc69c99e7
process[rosout-1]: started with pid [26943]
started core service [/rosout]
process[mavros-2]: started with pid [26961]
[ INFO] [1520021829.553095960]: FCU URL: /dev/ttyACM0:57600
[ INFO] [1520021829.554915572]: serial0: device: /dev/ttyACM0 @ 57600 bps
[ INFO] [1520021829.555552991]: GCS bridge disabled
[ INFO] [1520021829.567142748]: Plugin 3dr_radio loaded
[ INFO] [1520021829.569320914]: Plugin 3dr_radio initialized
[ INFO] [1520021829.569349388]: Plugin actuator_control blacklisted
[ INFO] [1520021829.571809744]: Plugin adsb loaded
[ INFO] [1520021829.575769648]: Plugin adsb initialized
[ INFO] [1520021829.575794473]: Plugin altitude blacklisted
[ INFO] [1520021829.575892237]: Plugin cam_imu_sync loaded
[ INFO] [1520021829.576626653]: Plugin cam_imu_sync initialized
[ INFO] [1520021829.576772377]: Plugin command loaded
[ INFO] [1520021829.582684066]: Plugin command initialized
[ INFO] [1520021829.582712464]: Plugin debug_value blacklisted
[ INFO] [1520021829.582886299]: Plugin distance_sensor loaded
[ INFO] [1520021829.592604674]: Plugin distance_sensor initialized
[ INFO] [1520021829.592748090]: Plugin fake_gps loaded
[ INFO] [1520021829.609103603]: Plugin fake_gps initialized
[ INFO] [1520021829.609128115]: Plugin ftp blacklisted
[ INFO] [1520021829.609259829]: Plugin global_position loaded
[ INFO] [1520021829.628580110]: Plugin global_position initialized
[ INFO] [1520021829.628612736]: Plugin hil blacklisted
[ INFO] [1520021829.628766952]: Plugin home_position loaded
[ INFO] [1520021829.633001155]: Plugin home_position initialized
[ INFO] [1520021829.633140461]: Plugin imu loaded
[ INFO] [1520021829.640533947]: Plugin imu initialized
[ INFO] [1520021829.640671494]: Plugin local_position loaded
[ INFO] [1520021829.646783905]: Plugin local_position initialized
[ INFO] [1520021829.646948100]: Plugin manual_control loaded
[ INFO] [1520021829.650807807]: Plugin manual_control initialized
[ INFO] [1520021829.650943083]: Plugin mocap_pose_estimate loaded
[ INFO] [1520021829.655518964]: Plugin mocap_pose_estimate initialized
[ INFO] [1520021829.655642737]: Plugin obstacle_distance loaded
[ INFO] [1520021829.659014223]: Plugin obstacle_distance initialized
[ INFO] [1520021829.659130864]: Plugin odom loaded
[ INFO] [1520021829.663794739]: Plugin odom initialized
[ INFO] [1520021829.664012214]: Plugin param loaded
[ INFO] [1520021829.667288846]: Plugin param initialized
[ INFO] [1520021829.667312025]: Plugin px4flow blacklisted
[ INFO] [1520021829.667423654]: Plugin rangefinder loaded
[ INFO] [1520021829.668137088]: Plugin rangefinder initialized
[ INFO] [1520021829.668297342]: Plugin rc_io loaded
[ INFO] [1520021829.672569622]: Plugin rc_io initialized
[ INFO] [1520021829.672594510]: Plugin safety_area blacklisted
[ INFO] [1520021829.672725799]: Plugin setpoint_accel loaded
[ INFO] [1520021829.676462007]: Plugin setpoint_accel initialized
[ INFO] [1520021829.676710869]: Plugin setpoint_attitude loaded
[ INFO] [1520021829.689281332]: Plugin setpoint_attitude initialized
[ INFO] [1520021829.689452779]: Plugin setpoint_position loaded
[ INFO] [1520021829.705853198]: Plugin setpoint_position initialized
[ INFO] [1520021829.706010896]: Plugin setpoint_raw loaded
[ INFO] [1520021829.716862466]: Plugin setpoint_raw initialized
[ INFO] [1520021829.717029302]: Plugin setpoint_velocity loaded
[ INFO] [1520021829.723754613]: Plugin setpoint_velocity initialized
[ INFO] [1520021829.723998780]: Plugin sys_status loaded
[ INFO] [1520021829.730640327]: Plugin sys_status initialized
[ INFO] [1520021829.730800888]: Plugin sys_time loaded
[ INFO] [1520021829.734651825]: TM: Timesync mode: NONE
[ INFO] [1520021829.735319038]: Plugin sys_time initialized
[ INFO] [1520021829.735450495]: Plugin vfr_hud loaded
[ INFO] [1520021829.736911489]: Plugin vfr_hud initialized
[ INFO] [1520021829.736935514]: Plugin vibration blacklisted
[ INFO] [1520021829.737033502]: Plugin vision_pose_estimate loaded
[ INFO] [1520021829.746346315]: Plugin vision_pose_estimate initialized
[ INFO] [1520021829.746515765]: Plugin vision_speed_estimate loaded
[ INFO] [1520021829.750239950]: Plugin vision_speed_estimate initialized
[ INFO] [1520021829.750419761]: Plugin waypoint loaded
[ INFO] [1520021829.755638602]: Plugin waypoint initialized
[ INFO] [1520021829.755726057]: Built-in SIMD instructions: SSE, SSE2
[ INFO] [1520021829.755751539]: Built-in MAVLink package version: 2018.2.2
[ INFO] [1520021829.755767668]: Known MAVLink dialects: common ardupilotmega ASLUAV autoquad matrixpilot paparazzi slugs standard uAvionix ualberta
[ INFO] [1520021829.755795346]: MAVROS started. MY ID 1.240, TARGET ID 1.1
[ INFO] [1520021829.849907257]: CON: Got HEARTBEAT, connected. FCU: ArduPilotMega / ArduCopter
[ INFO] [1520021830.072218261]: IMU: Raw IMU message used.
[ INFO] [1520021830.075098601]: RC_CHANNELS message detected!
[ WARN] [1520021830.075901836]: TM: Wrong FCU time.
[ WARN] [1520021830.572875238]: GP: No GPS fix
[ INFO] [1520021830.859501557]: VER: 1.1: Capabilities         0x0000000000003bcf
[ INFO] [1520021830.859610755]: VER: 1.1: Flight software:     030406ff (e707341bde6b667d8c965992)
[ INFO] [1520021830.859692086]: VER: 1.1: Middleware software: 00000000 (de6b667d8c965992)
[ INFO] [1520021830.859811288]: VER: 1.1: OS software:         00000000 (8c965992)
[ INFO] [1520021830.859894423]: VER: 1.1: Board hardware:      00000000
[ INFO] [1520021830.859991754]: VER: 1.1: VID/PID:             0000:0000
[ INFO] [1520021830.860091685]: VER: 1.1: UID:                 0000000000000000
[ WARN] [1520021830.860457816]: CMD: Unexpected command 520, result 0
[ERROR] [1520021833.850124648]: FCU: PreArm: RC not calibrated
[ERROR] [1520021833.850282817]: FCU: PreArm: Compass offsets too high
[ INFO] [1520021839.850783561]: HP: requesting home position
[ INFO] [1520021839.853771718]: FCU: APM:Copter V3.4.6 (e707341b)
[ INFO] [1520021839.854040516]: FCU: PX4: de6b667d NuttX: 8c965992
[ INFO] [1520021839.854183948]: FCU: Frame: QUAD
[ INFO] [1520021839.854286161]: FCU: PX4v2 0034002F 31334705 39343031
[ INFO] [1520021840.469965330]: PR: parameters list received
[ INFO] [1520021844.857490824]: WP: mission received
[ INFO] [1520021849.851115121]: HP: requesting home position
[ INFO] [1520021859.850746668]: HP: requesting home position
[ WARN] [1520021860.684726116]: GP: No GPS fix
[ERROR] [1520021863.861805572]: FCU: PreArm: RC not calibrated
[ERROR] [1520021863.861953300]: FCU: PreArm: Compass offsets too high

Diagnostik

header: 
  seq: 59
  stamp: 
    secs: 1520021901
    nsecs: 257080897
  frame_id: ''
status: 
  - 
    level: 0
    name: "mavros: FCU connection"
    message: "connected"
    hardware_id: "/dev/ttyACM0:57600"
    values: 
      - 
        key: "Received packets:"
        value: "6240"
      - 
        key: "Dropped packets:"
        value: "0"
      - 
        key: "Buffer overruns:"
        value: "0"
      - 
        key: "Parse errors:"
        value: "0"
      - 
        key: "Rx sequence number:"
        value: "211"
      - 
        key: "Tx sequence number:"
        value: "82"
      - 
        key: "Rx total bytes:"
        value: "182353"
      - 
        key: "Tx total bytes:"
        value: "1883"
      - 
        key: "Rx speed:"
        value: "2106.000000"
      - 
        key: "Tx speed:"
        value: "21.000000"
  - 
    level: 2
    name: "mavros: GPS"
    message: "No satellites"
    hardware_id: "/dev/ttyACM0:57600"
    values: 
      - 
        key: "Satellites visible"
        value: "0"
      - 
        key: "Fix type"
        value: "0"
      - 
        key: "EPH (m)"
        value: "0.00"
      - 
        key: "EPV (m)"
        value: "0.00"
  - 
    level: 0
    name: "mavros: Heartbeat"
    message: "Normal"
    hardware_id: "/dev/ttyACM0:57600"
    values: 
      - 
        key: "Heartbeats since startup"
        value: "72"
      - 
        key: "Frequency (Hz)"
        value: "1.037047"
      - 
        key: "Vehicle type"
        value: "Quadrotor"
      - 
        key: "Autopilot type"
        value: "ArduPilotMega / ArduCopter"
      - 
        key: "Mode"
        value: "STABILIZE"
      - 
        key: "System status"
        value: "Standby"
  - 
    level: 0
    name: "mavros: System"
    message: "Normal"
    hardware_id: "/dev/ttyACM0:57600"
    values: 
      - 
        key: "Sensor present"
        value: "0x0160FC0F"
      - 
        key: "Sensor enabled"
        value: "0x00601C0F"
      - 
        key: "Sensor helth"
        value: "0x0160FC0F"
      - 
        key: "3D gyro"
        value: "Ok"
      - 
        key: "3D accelerometer"
        value: "Ok"
      - 
        key: "3D magnetometer"
        value: "Ok"
      - 
        key: "absolute pressure"
        value: "Ok"
      - 
        key: "3D angular rate control"
        value: "Ok"
      - 
        key: "attitude stabilization"
        value: "Ok"
      - 
        key: "yaw position"
        value: "Ok"
      - 
        key: "AHRS subsystem health"
        value: "Ok"
      - 
        key: "Terrain subsystem health"
        value: "Ok"
      - 
        key: "CPU Load (%)"
        value: "30.1"
      - 
        key: "Drop rate (%)"
        value: "0.0"
      - 
        key: "Errors comm"
        value: "0"
      - 
        key: "Errors count #1"
        value: "0"
      - 
        key: "Errors count #2"
        value: "0"
      - 
        key: "Errors count #3"
        value: "0"
      - 
        key: "Errors count #4"
        value: "0"
  - 
    level: 1
    name: "mavros: Battery"
    message: "Low voltage"
    hardware_id: "/dev/ttyACM0:57600"
    values: 
      - 
        key: "Voltage"
        value: "0.00"
      - 
        key: "Current"
        value: "-0.0"
      - 
        key: "Remaining"
        value: "-1.0"
---

Periksa ID

OK. I got messages from 1:1.

---
Received 1131 messages, from 1 addresses
sys:comp   list of messages
  1:1     0, 1, 2, 193, 152, 150, 24, 27, 29, 30, 33, 163, 36, 165, 42, 178, 182, 62, 65, 74, 77, 241, 116, 125

APM extras mocap question vision

Komentar yang paling membantu

Halo @Subishar ,

Saya juga mencoba menggunakan plugin fake_gps tetapi saya tidak dapat menemukan cara menggunakannya tetapi inilah yang saya lakukan, mungkin ini akan membantu Anda:

Saya membuat simpul ros yang mengambil data posisi dari sistem Mocap (UWB dalam kasus saya) dan mengubahnya menjadi nilai garis bujur lintang. Kemudian saya menerbitkan nilai-nilai ini ke topik / mavros / hil / gps. Kemudian saya mengubah parameter GPS_TYPE di mavros menjadi 14 (ini membuat fcu menerima data gps palsu). Saya dapat memberi makan data posisi, tetapi saya memiliki beberapa masalah dalam mencapai penahanan posisi yang baik. Saya mencoba menyesuaikan nilai untuk mendapatkan hasil yang lebih baik. Semoga ini membantu. Saya akan sangat menghargai jika seseorang menjelaskan cara menggunakan plugin gps palsu dengan benar juga :)

PS. Anda dapat mengubah nilai lat0 dan bujur0 ke lokasi Anda.

Berikut adalah kode ros node:

// adding x, y, z to long lat transform
// v3 - taking data from UWB and sending to APM

#include <ros/ros.h>
//#include <geometry_msgs/PoseStamped.h>
#include <cstdlib>
#include <mavros_msgs/HilGPS.h>
//#include <mavros_msgs/OverrideRCIn.h>
#include <math.h> 
#include <stdlib.h>
#include <stdio.h>
#include <array>
#include <geometry_msgs/PoseStamped.h>

std::vector <float> GPS = {0, 0}; // {long, lat}
float xPos = 0;
float yPos = 0;
float zPos = 0;

std::vector <float> CartToGPS (float x, float y, float z){ // x, y, z in [mm]

  std::vector <float> GPS = {0, 0}; // {long, lat}

  //Some constants
  float pi = 3.14159265359; // pi
  float alpha = pi / 2; // angle between x axis and North
  float r = 6371000000; // mean radius of Earh in [mm]
  float lat0 = (39.894470 * pi) / 180; // origin latitude
  float long0 = (32.777973 * pi) / 180; // origin longitude

  float dlat = (x * cos(alpha) + y * sin(alpha)) / r; // [rad]
  float dlong = (x * sin(alpha) - y * cos(alpha)) / r; // [rad]

  GPS = {((long0 + dlong) * 180) / pi, ((lat0 + dlat) * 180) / pi};

  return GPS;
}

void poseMessageReceived(const geometry_msgs::PoseStamped &msg) // callback function for pose Message
{
  xPos = msg.pose.position.x;
  yPos = msg.pose.position.y;
  zPos = msg.pose.position.z;
  //ROS_INFO_STREAM("callback");
}


int main(int argc, char **argv) {

  // if(argc<4){
  //   printf("Usage: rosrun send_pose position_sender lat long alt\n");
  //   return -1;
  // }

    //int rate = 10;

  ros::init(argc, argv, "position_sender");
  ros::NodeHandle n;

  ros::Publisher pub = n.advertise<mavros_msgs::HilGPS>("mavros/hil/gps", 1);
  ros::Subscriber subPose = n.subscribe("UWB_Pos",5,&poseMessageReceived);

  ros::Rate rate(5);

  while(ros::ok()){

        mavros_msgs::HilGPS msg;

        //msg.header.frame_id = "1";
    msg.header.stamp=ros::Time::now();

    // float x = double(atoi(argv[1]));
    // float y = double(atoi(argv[2]));
    // float z = double(atoi(argv[3]));

    GPS = CartToGPS(xPos, yPos, zPos);

    //msg.header.stamp=ros::Time::now();

    msg.fix_type = 3;

    msg.geo.longitude = GPS[0];
    msg.geo.latitude = GPS[1];
    msg.geo.altitude = zPos / 10000;

        // msg.eph = 65535;
        // msg.epv = 65535;
        // msg.vel = 65535;
  //   msg.vn = 0;
  //   msg.ve = 0;
  //   msg.vd = 0;
  //   msg.cog = 65535;
  //   msg.satellites_visible = 255;

    msg.eph = 2.0;
    msg.epv = 2.0;
    msg.vel = 65535;
    msg.vn = 0;
    msg.ve = 0;
    msg.vd = 0;
    msg.cog = 65535;
    msg.satellites_visible = 255;

    //ROS_INFO("Position data sent %f, %f, %f", msg.geo.latitude, msg.geo.longitude, msg.geo.altitude);

        pub.publish(msg);
        // rc_override_pub.publish(msg_override);

    ros::spinOnce();
        rate.sleep();
    }   
}

Semua 5 komentar

Halo @Subishar ,

Saya juga mencoba menggunakan plugin fake_gps tetapi saya tidak dapat menemukan cara menggunakannya tetapi inilah yang saya lakukan, mungkin ini akan membantu Anda:

Saya membuat simpul ros yang mengambil data posisi dari sistem Mocap (UWB dalam kasus saya) dan mengubahnya menjadi nilai garis bujur lintang. Kemudian saya menerbitkan nilai-nilai ini ke topik / mavros / hil / gps. Kemudian saya mengubah parameter GPS_TYPE di mavros menjadi 14 (ini membuat fcu menerima data gps palsu). Saya dapat memberi makan data posisi, tetapi saya memiliki beberapa masalah dalam mencapai penahanan posisi yang baik. Saya mencoba menyesuaikan nilai untuk mendapatkan hasil yang lebih baik. Semoga ini membantu. Saya akan sangat menghargai jika seseorang menjelaskan cara menggunakan plugin gps palsu dengan benar juga :)

PS. Anda dapat mengubah nilai lat0 dan bujur0 ke lokasi Anda.

Berikut adalah kode ros node:

// adding x, y, z to long lat transform
// v3 - taking data from UWB and sending to APM

#include <ros/ros.h>
//#include <geometry_msgs/PoseStamped.h>
#include <cstdlib>
#include <mavros_msgs/HilGPS.h>
//#include <mavros_msgs/OverrideRCIn.h>
#include <math.h> 
#include <stdlib.h>
#include <stdio.h>
#include <array>
#include <geometry_msgs/PoseStamped.h>

std::vector <float> GPS = {0, 0}; // {long, lat}
float xPos = 0;
float yPos = 0;
float zPos = 0;

std::vector <float> CartToGPS (float x, float y, float z){ // x, y, z in [mm]

  std::vector <float> GPS = {0, 0}; // {long, lat}

  //Some constants
  float pi = 3.14159265359; // pi
  float alpha = pi / 2; // angle between x axis and North
  float r = 6371000000; // mean radius of Earh in [mm]
  float lat0 = (39.894470 * pi) / 180; // origin latitude
  float long0 = (32.777973 * pi) / 180; // origin longitude

  float dlat = (x * cos(alpha) + y * sin(alpha)) / r; // [rad]
  float dlong = (x * sin(alpha) - y * cos(alpha)) / r; // [rad]

  GPS = {((long0 + dlong) * 180) / pi, ((lat0 + dlat) * 180) / pi};

  return GPS;
}

void poseMessageReceived(const geometry_msgs::PoseStamped &msg) // callback function for pose Message
{
  xPos = msg.pose.position.x;
  yPos = msg.pose.position.y;
  zPos = msg.pose.position.z;
  //ROS_INFO_STREAM("callback");
}


int main(int argc, char **argv) {

  // if(argc<4){
  //   printf("Usage: rosrun send_pose position_sender lat long alt\n");
  //   return -1;
  // }

    //int rate = 10;

  ros::init(argc, argv, "position_sender");
  ros::NodeHandle n;

  ros::Publisher pub = n.advertise<mavros_msgs::HilGPS>("mavros/hil/gps", 1);
  ros::Subscriber subPose = n.subscribe("UWB_Pos",5,&poseMessageReceived);

  ros::Rate rate(5);

  while(ros::ok()){

        mavros_msgs::HilGPS msg;

        //msg.header.frame_id = "1";
    msg.header.stamp=ros::Time::now();

    // float x = double(atoi(argv[1]));
    // float y = double(atoi(argv[2]));
    // float z = double(atoi(argv[3]));

    GPS = CartToGPS(xPos, yPos, zPos);

    //msg.header.stamp=ros::Time::now();

    msg.fix_type = 3;

    msg.geo.longitude = GPS[0];
    msg.geo.latitude = GPS[1];
    msg.geo.altitude = zPos / 10000;

        // msg.eph = 65535;
        // msg.epv = 65535;
        // msg.vel = 65535;
  //   msg.vn = 0;
  //   msg.ve = 0;
  //   msg.vd = 0;
  //   msg.cog = 65535;
  //   msg.satellites_visible = 255;

    msg.eph = 2.0;
    msg.epv = 2.0;
    msg.vel = 65535;
    msg.vn = 0;
    msg.ve = 0;
    msg.vd = 0;
    msg.cog = 65535;
    msg.satellites_visible = 255;

    //ROS_INFO("Position data sent %f, %f, %f", msg.geo.latitude, msg.geo.longitude, msg.geo.altitude);

        pub.publish(msg);
        // rc_override_pub.publish(msg_override);

    ros::spinOnce();
        rate.sleep();
    }   
}

@mellonUAV terima kasih .. saya akan mencoba ini dan akan memberi tahu Anda bagaimana kelanjutannya.

@mellonUAV untuk fake_gps pastikan bahwa APM memproses HIL_GPS msg secara default tanpa perlu menyetel parameter apa pun. Atau mungkin Anda hanya perlu menyetel GPS_TYPE menjadi 14 seperti yang dikatakan @SubMishMar . Untuk VISION_POSITION_DELTA Saya tidak bisa banyak bicara, itu benar-benar tergantung pada akhir autopilot. @khancyr ada rekomendasi di sini?
@SubMishMar kode Anda dihargai tetapi fake_gps melakukan konversi yang Anda butuhkan. Apa yang tidak Anda pahami tentang penggunaannya?

Hai! @Tokopedia
Saya ingin PX4 kami bekerja dalam mode OFFBOARD atau POSCTL, keduanya dapat diterima. Kami memiliki sistem mocap OptiTrack. Saya telah membaca banyak masalah di github tentang px4, mavros dan mocap.

Tapi saya masih punya beberapa pertanyaan:

  1. Banyak pengguna telah menyebutkan 'mavros' paket ros, tapi saya ingin tahu dari mana 'mavros' ini berasal ?? Apakah ini berasal dari perintah instalasi "sudo apt-get install ros-kinetic-mavros" atau berasal dari git clone? Apakah ada perbedaan diantara keduanya? Pada awalnya, saya tidak menggunakan git, setelah "apt-get install", "roslaunch mavros px4.launch" dapat berfungsi. Tapi minggu lalu saya mendapatkan source code dari git clone, dan di source code ini juga ada "px4.launch" !!
    Jadi, saya ingin tahu saat kita menggunakan mavros untuk mengontrol PX4 kita (Set_Point_Position, Set_Point_Attitude dan seterusnya ......), 'mavros' mana yang harus kita gunakan ??
  2. Saya juga melihat beberapa pengguna menyebutkan plugin "mocap_pose_estimate". Banyak pengguna yang mengatakan bahwa plugin ini dapat mengubah data dari mocap menjadi sistem koordinat yang memperbaiki PX4, tetapi saya tidak tahu cara menggunakannya. Apa itu? Apakah ini node? Topik seperti '/ mavros / mocap / pose'? Atau hanya beberapa fungsi yang bisa kita gunakan secara langsung?
    Jadi, saya ingin tahu apa itu dan bagaimana cara menggunakannya? Bagaimana cara menambahkan "plugin" ini ke proyek saya sendiri ??

Terima kasih banyak!
Semoga sukses!!

Banyak pengguna telah menyebutkan 'mavros' paket ros, tapi saya ingin tahu dari mana 'mavros' ini berasal ??

Ini persis paket repo yang Anda komentari.

Apakah ini berasal dari perintah instalasi "sudo apt-get install ros-kinetic-mavros" atau berasal dari git clone?

Itu tergantung apakah Anda ingin menggunakan versi rilis (dari deb) atau versi upstream (dari git yang menggandakan repo).

Apakah ada perbedaan diantara keduanya?

Itu tergantung apakah versi rilis disinkronkan dengan master upstream, tetapi karena ini selalu berjalan dalam hal pengembangan, biasanya versi rilis berada di belakang master upstream.

Pada awalnya, saya tidak menggunakan git, setelah "apt-get install", "roslaunch mavros px4.launch" dapat berfungsi. Tapi minggu lalu saya mendapatkan source code dari git clone, dan di source code ini juga ada "px4.launch" !!

Ya itu normal. Versi rilis repo ini dirilis ke dalam repositori distro Ubuntu.

Jadi, saya ingin tahu saat kita menggunakan mavros untuk mengontrol PX4 kita (Set_Point_Position, Set_Point_Attitude dan seterusnya ......), 'mavros' mana yang harus kita gunakan ??

Semua itu harus bekerja.

Saya juga melihat beberapa pengguna menyebutkan plugin "mocap_pose_estimate". Banyak pengguna yang mengatakan bahwa plugin ini dapat mengubah data dari mocap ke sistem koordinat yang memperbaiki PX4, tetapi saya tidak tahu cara menggunakannya. apa itu? Apakah ini node? Topik seperti '/ mavros / mocap / pose'? Atau hanya beberapa fungsi yang bisa kita gunakan secara langsung?

Mungkin jika Anda melihat kode sumbernya, Anda akan menemukan jawabannya. Ini pada dasarnya adalah plugin yang dapat Anda temukan di mavros_extras yang memungkinkan Anda mengirim pesan ATT_POS_MOCAP Mavlink yang diurai dari node yang Anda miliki yang mendapatkan data dari sistem mocap Anda. MAVROS memiliki fungsi untuk menangani transformasi bingkai, jadi tidak khusus untuk plugin itu.

Jadi, saya ingin tahu apa itu dan bagaimana cara menggunakannya? Bagaimana cara menambahkan "plugin" ini ke proyek saya sendiri ??

Ini bukan plugin yang Anda pasang ke proyek Anda sendiri karena ini terkait erat dengan MAVROS. Jika Anda ingin menggunakan apa yang diizinkan plugin ini, cukup gunakan MAVROS dan pasangkan ke proyek Anda.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat