ROS Toolboxを使っ​て、ROSから送られ​てくるセンサのIMU​情報から、特定の角度​情報を素早く取得した​い。

ROSから送られてくるIMU情報を、MATLABで角度情報のみを抜き出したいと思い、下記のようなコードで取得しています。
for(1:10)
topicinfo=rostopic(echo,topicname)
Z=topicinfo.AngularVelocity.Z
end
このZの値を、ループを使って更新し続けているのですが、現在のコードでは1ループに200msほどかかってしまっています。出来れば1ループあたりの時間を10ms程度に抑えたいと考えております。処理に時間がかかっている理由として考えられるものは、欲しいデータ以外の情報も同時に取得しているからだと思うのですが、
rostopic list
から表示されるトピックは、全てのIMU情報をまとめた状態のトピックしか表示されないので、全て取りだしてから中身を見る方法しか思いつきません。何かいい方法はございますでしょうか?

Réponses (1)

Toshinobu Shintai
Toshinobu Shintai le 24 Jan 2023

0 votes

試しにSimulinkで同じ機能を実装してみてはいかがでしょうか(もしかしたらSimulinkの方が早いかもしれません)。MATLABスクリプトでないとできないことをされているのであれば、解決策にならないかもしれませんが。

3 commentaires

優季
優季 le 25 Jan 2023
回答ありがとうございます。
Simulinkを初めて使うため、ROSToolboxのチュートリアルを参考に下記のように組んでみました。
データが何msごとに送られてきているのか確認するすべが分からなかったので、とりあえず1つめのデータが送られてきた時点でシミュレーションが終了するようにBusSelectorにStopを繋いで、その時間をtic・tocで確認しました。しかし、1つめのデータはやはり時間がかかるとはいえ、それでも普通に書くのと変わらなかったです。
また回し続けた状態でも、ディスプレイに表示される数値が1秒間に5,6回切り替わっているので、やはり目測ですが200msはかかっている印象です。
この速度が限界なのでしょうか?もっと早くなる方法がございましたらご教授願います。
【補足】
PCに繋いだセンサから、ROSを使って角度データを取得し、Matlabでこの角度データをもとにHRTFの更新をしようと考えております。この一連の流れを最低20ms以内に抑えることが目標です。
Toshinobu Shintai
Toshinobu Shintai le 25 Jan 2023
回し続けた状態で、目測ではなく何回繰り返し実行されたかをカウントした方がよいです。Displayの数値の切り替わり速度は、もっと早いサイクルであっても大体1秒間に5回程度しか変化しませんので。
以下のAnswersでカウントを作成する方法が紹介されています。
ただ、それでもやっぱり200msである可能性もありますので...
優季
優季 le 2 Fév 2023
カウンターを設置して流れる値をカウントしてみましたが、やはり1秒間に多くて7,8回なので100~200msという結果は揺るぎませんでした。
ROSで取得しているデータは、10ms事に更新され続けているのですが、ROSのデータをMATLABに持ってくる際に、ROSToolboxで使ってる関数が、この流れるデータの中から一つだけ持ってくるようなものなので、ここで時間がかかってるように感じます。なにかデータをまとめて持ってこれるような(ROSのデータを丸ごとMATLABに移動みたいな)ことは出来ないものですかね?

Connectez-vous pour commenter.

Catégories

En savoir plus sur パブリッシャーとサブスクライバー dans Centre d'aide et File Exchange

Produits

Version

R2022b

Question posée :

le 24 Jan 2023

Commenté :

le 2 Fév 2023

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!