Mavros: Mengatur parameter PX4 menggunakan MAVROS

Dibuat pada 31 Agu 2017  ·  10Komentar  ·  Sumber: mavlink/mavros

Hai

Saya mencoba mengubah beberapa parameter pada tumpukan penerbangan PX4 menggunakan MAVROS.

Saya dapat membaca parameter dengan mavros menggunakan
rosservice panggilan /mavros/param/dapatkan MPC_LAND_SPEED

namun saya tidak dapat mengaturnya menggunakan mavros. Saya tidak tahu apa dia sintaks yang benar

Saya mencoba
rosservice panggilan /mavros/param/set MPC_LAND_SPEED '0.4'
namun itu memberi saya kesalahan. Jika ada yang bisa membantu saya akan sangat berterima kasih!

Terima kasih

Sebastian

question

Komentar yang paling membantu

Itu karena Anda mencoba memanggil metode yang ditetapkan melalui layanan.

Melalui layanan, cara ROS adalah:

rosservice call /param/set "param_id: 'MPC_LAND_SPEED'
value:
  integer: 0
  real: 0.4" 

Semua 10 komentar

Apakah Anda mencoba skrip mavparam ? rosrun mavros mavparam set MPC_LAND_SPEED 0.4 ?

Itu karena Anda mencoba memanggil metode yang ditetapkan melalui layanan.

Melalui layanan, cara ROS adalah:

rosservice call /param/set "param_id: 'MPC_LAND_SPEED'
value:
  integer: 0
  real: 0.4" 

Sepertinya Anda memiliki dua opsi kerja @shening. Penutupan

Itu karena Anda mencoba memanggil metode yang ditetapkan melalui layanan.

Melalui layanan, cara ROS adalah:
rosservice panggilan /param/set "param_id: 'MPC_LAND_SPEED'
nilai:
bilangan bulat: 0
nyata: 0,4"

Dari bantuan metode di atas, metode yang lebih tepat dijelaskan di sini.

Perintah di atas membuat kesalahan dalam percobaan saya. Tapi itu berhasil setelah ruang kosong ditambahkan sebelum 'bilangan bulat' dan 'nyata'. Dan '/ mavros' ditambahkan seperti:

rosservice panggilan /mavros/param/set "param_id: 'SENS_EN_THERMAL'
nilai:
bilangan bulat: 55
nyata: 0,0"

cf) Dalam editor komentar ini, spasi kosong dapat ditambahkan dengan menulis   sebagai ganti ' '(spasi).

@bigbellmercy Apakah masalah ini hanya terlihat dalam argumen baris perintah? atau apakah ini juga berlaku saat Anda menggunakan panggilan rosservice melalui roscpp?

@bigbellmercy Memang, itu 3 tahun yang lalu dan ruangnya tidak jelas, saya hanya menambahkan ``` di sekitarnya dan sekarang sudah jelas. Cara khas saya menggunakan rosservice adalah dengan memanfaatkanuntuk mencegah salah ketik :ketawa:

@bigbellmercy Apakah masalah ini hanya terlihat dalam argumen baris perintah? atau apakah ini juga berlaku saat Anda menggunakan panggilan rosservice melalui roscpp?

@Jaeyoung-Lim saya gagal untuk 'rosservice panggilan melalui roscpp' menggunakan baris perintah di atas.

Tetapi kode di bawah ini berfungsi untuk perubahan parameter PX4 di roscpp:

system("rosrun mavros mavparam set SENS_EN_THERMAL 55");

@Jaeyoung-Lim maksud saya roscpp dengan menggunakan panggilan layanan ros , tidak menggunakan argumen baris perintah

@Jaeyoung-Lim Saya tidak dapat menemukan solusi untuk itu dalam uji coba saya.

Menggunakan panggilan layanan roscpp , saya juga tidak dapat langsung mendapatkan atau menetapkan parameter PX4. Saya selalu mendapatkan kesalahan berikut:

[/mavros:std_plugins::ParamPlugin::get_cb]: PR: Unknown parameter to get: MPC_XY_VEL_MAX
[/mavros:std_plugins::ParamPlugin::set_cb]: PR: Unknown parameter to set: MPC_XY_VEL_MAX

Apakah ada beberapa awalan untuk ditambahkan ke ID parameter?

Ini bekerja tanpa masalah menggunakan skrip mavparam :
rosrun mavros mavparam -n /mavros get MPC_XY_VEL_MAX

Namun, saya ingin melakukannya secara terprogram. Saya menemukan solusi dengan menarik parameter ke ROS, membuat perubahan yang diinginkan, dan kemudian mendorong semuanya kembali:

ServiceClient pull_client = nh.serviceClient<mavros_msgs::ParamPull>("mavros/param/pull");
pull_client.waitForExistence();
mavros_msgs::ParamPull pull;
if (pull_client.call(pull)) {
    if (pull.response.success) {
        ROS_DEBUG("Pulled %d parameters from FCU", pull.response.param_received);
        nh.setParam("mavros/param/MPC_XY_VEL_MAX", max_velocity);
        ServiceClient push_client = nh.serviceClient<mavros_msgs::ParamPush>("mavros/param/push");
        push_client.waitForExistence();
        mavros_msgs::ParamPush push;
        if (push_client.call(push)) {
            if (push.response.success)
                ROS_DEBUG("Pushed %d parameters to FCU", push.response.param_transfered);
            else
                ROS_ERROR("Failed push parameters to FCU, cannot set maximum horizontal velocity!");
        }
        else {
            ROS_ERROR("Failed to push parameters to FCU, cannot set maximum horizontal velocity!");
        }
    }
    else {
        ROS_ERROR("Failed to pull parameters from FCU, cannot set maximum horizontal velocity!");
    }
}
else {
    ROS_ERROR("Failed to pull parameters from FCU, cannot set maximum horizontal velocity!");
}
Apakah halaman ini membantu?
0 / 5 - 0 peringkat