こんにちは、
私は視覚ベースの制御を行っており、カメラはドローンに下向きになっています。
したがって、位置推定は体のフレーム内にあります。
トピック/ mavros / setpoint_velocity / cmd_velを使用してドローンの速度を変更できることがわかりましたが、NEDフレーム内にあるようです。
/ mavros / setpoint_velocity / cmd_velのようなトピックはありますが、ボディフレームを使用しますか?
または、速度設定値をボディフレームからNEDフレームに変換して実装する必要がありますか?
使用できるものを見つけようとしましたが、このコードを見つけました。 https://github.com/weiweikong/px4_velocity_control_keyboard/blob/master/src/px4_velocity_control_node.cpp
vs_body_axis.twist.linear.x = vs.twist.linear.x * cos(uavYawENU) + vs.twist.linear.y * sin(uavYawENU);
vs_body_axis.twist.linear.y = vs.twist.linear.x * sin(uavYawENU) - vs.twist.linear.y * cos(uavYawENU);
これが私が見つけた最善の解決策のようです。
ヨーがIMUのみからのものなのか、IMUと磁気の融合によるものなのかはわかりません。
これについてコメントやアイデアはありますか?
マブロス:0.17.3
ROS:インディゴ
Ubuntu:14.04
APM:ヘリコプターV3.4-dev(fe724032)
bshang2 @ mechatronics-990 :〜/ Simulation / ardupilot / ArduCopter $ roslaunch ardupilot_sitl_gazebo_plugin erlecopter_mark.launch
... / home / bshang2 / .ros / log / ca9213bc-89bf-11e7-b657-1803733b65bb / roslaunch-mechatronics-990-28079.logにログを記録
ログディレクトリでディスク使用量を確認しています。 これは時間がかかる場合があります。
Ctrl-Cを押して中断します
ログファイルのディスク使用量のチェックが完了しました。 使用量は1GB未満です。
roslaunchサーバーを開始しましたhttp:// mechatronics
明確なパラメータ
パラメーター
ノード
/
ガゼボ(gazebo_ros / gzserver)
gazebo_gui(gazebo_ros / gzclient)
mavros(mavros / mavros_node)
spawn_erlecopter(gazebo_ros / spawn_model)
新しいマスターの自動起動
process [master]:pid [28094]で開始
ROS_MASTER_URI = http:// localhost :11311
/ run_idをca9213bc-89bf-11e7-b657-1803733b65bbに設定します
process [rosout-1]:pid [28107]で開始
コアサービスを開始しました[/ rosout]
process [mavros-2]:pidで開始[28126]
プロセス[spawn_erlecopter-3]:pidで開始[28133]
プロセス[ガゼボ-4]:pidで開始[28134]
process [gazebo_gui-5]:pidで開始[28151]
spawn_modelスクリプトが開始されました
[gazebo-4]プロセスが終了しました[pid28134、終了コード255、cmd / home / bshang2 / Simulation / ros_catkin_ws / src / gazebo_ros_pkgs / gazebo_ros / scripts / gzserver -u -e ode / home / bshang2 / Simulation / ros_catkin_ws / src /ardupilot_sitl_gazebo_plugin/ardupilot_sitl_gazebo_plugin/worlds/mark_world/mark.world __name:= gazebo __log:= / home / bshang2 / .ros / log / ca9213bc-89bf-11e7-b657-1803733b65bb /gazebo-4.log]。
ログファイル:/home/bshang2/.ros/log/ca9213bc-89bf-11e7-b657-1803733b65bb/gazebo-4 .log[INFO] [WallTime:1503684250.172508] [0.000000] rosパラメーターからモデルxmlを読み込んでいます[情報] [WallTime:1503684250.176886] [0.000000]サービスを待機しています/ gazebo / spawn_urdf_model[gazebo_gui-5]プロセスが終了しました[pid28151、終了コード255、cmd / home / bshang2 / simulation / ros_catkin_ws / src / gazebo_ros_pkgs / gazebo_ros / scripts / gzclient __name:= gazebo_gui __log:= / home / bshang2 / .ros / log /ca9213bc-89bf-11e7-b657-1803733b65bb/gazebo_gui-5.log]。ログファイル:/home/bshang2/.ros/log/ca9213bc-89bf-11e7-b657-1803733b65bb/gazebo_gui-5 .log
^ C [spawn_erlecopter-3]終了時に殺害
[mavros-2]出口で殺害
トレースバック(最後の最後の呼び出し):
ファイル "/ home / bshang2 / Simulation / ros_catkin_ws / src / gazebo_ros_pkgs / gazebo_ros / scripts / spawn_model"、行301、
sm.callSpawnService()
ファイル "/ home / bshang2 / Simulation / ros_catkin_ws / src / gazebo_ros_pkgs / gazebo_ros / scripts / spawn_model"、行267、callSpawnService
initial_pose、self.reference_frame、self.gazebo_namespace)
ファイル "/home/bshang2/simulation/ros_catkin_ws/src/gazebo_ros_pkgs/gazebo_ros/src/gazebo_ros/gazebo_interface.py"、28行目、spawn_urdf_model_client
rospy.wait_for_service(gazebo_namespace + '/ spawn_urdf_model')
ファイル "/opt/ros/indigo/lib/python2.7/dist-packages/rospy/impl/tcpros_service.py"、159行目、wait_for_service
ROSInterruptException( "rospy shutdown")を発生させます
rospy.exceptions.ROSInterruptException:rospyシャットダウン
^ C [rosout-1]出口で殺害
^ C [マスター]出口で殺害
処理モニターをシャットダウンしています...
...処理モニターのシャットダウンが完了しました
完了
bshang2 @ mechatronics-990 :〜/ Simulation / ardupilot / ArduCopter $ roslaunch ardupilot_sitl_gazebo_plugin erlecopter_mark.launch
... / home / bshang2 / .ros / log / e483c856-89bf-11e7-bb61-1803733b65bb / roslaunch-mechatronics-990-28603.logにログを記録
ログディレクトリでディスク使用量を確認しています。 これは時間がかかる場合があります。
Ctrl-Cを押して中断します
ログファイルのディスク使用量のチェックが完了しました。 使用量は1GB未満です。
roslaunchサーバーを開始しましたhttp:// mechatronics
明確なパラメータ
パラメーター
ノード
/
ガゼボ(gazebo_ros / gzserver)
gazebo_gui(gazebo_ros / gzclient)
mavros(mavros / mavros_node)
spawn_erlecopter(gazebo_ros / spawn_model)
新しいマスターの自動起動
process [master]:pid [28618]で開始
ROS_MASTER_URI = http:// localhost :11311
/ run_idをe483c856-89bf-11e7-bb61-1803733b65bbに設定する
process [rosout-1]:pid [28631]で開始
コアサービスを開始しました[/ rosout]
process [mavros-2]:pidで開始[28656]
プロセス[spawn_erlecopter-3]:pidで開始[28657]
プロセス[ガゼボ-4]:pidで開始[28674]
process [gazebo_gui-5]:pidで開始[28678]
spawn_modelスクリプトが開始されました
[INFO] [WallTime:1503684293.653120] [0.000000] rosパラメーターからモデルxmlを読み込んでいます
[情報] [WallTime:1503684293.657344] [0.000000]サービスを待機しています/ gazebo / spawn_urdf_model
[情報] [WallTime:1503684294.260952] [0.047500]通話サービス/ gazebo / spawn_urdf_model
[INFO] [WallTime:1503684294.855628] [0.445000]スポーンステータス:SpawnModel:正常にスポーンされたモデル
[spawn_erlecopter-3]プロセスは正常に終了しました
ログファイル:/home/bshang2/.ros/log/e483c856-89bf-11e7-bb61-1803733b65bb/spawn_erlecopter-3*.log
bshang2 @ mechatronics-990 :〜/ Simulation / ardupilot / ArduCopter $ rostopic echo -n1 / Diagnostics
ヘッダ:
seq:6456
切手:
秒:6817
nsecs:500000000
frame_id: ''
状態:
bshang2 @ mechatronics-990 :〜/ Simulation / ardupilot / ArduCopter $ rosrun mavros checkid
OK。 1:1からメッセージが届きました。
1つのアドレスから1231のメッセージを受信しました
sys:compメッセージのリスト
1:1 0、1、2、136、152、150、24、27、29、30、32、33、162、163、164、165、42、173、178、62、193、74、35、36 、241、116
ちょっと、そこ、
setpoint_rawを使用できます。
http://wiki.ros.org/mavros#mavros.2BAC8 -Plugins.setpoint_raw
ターゲットセットポイントで、座標フレームを変更できます。
http://docs.ros.org/api/mavros_msgs/html/msg/PositionTarget.html
setpoint_velocity
場合、現在デフォルトでLOCAL_NED
(https:/)になっているため、 LOCAL_NED
とBODY_NED
どちらかを選択できるようにする修正を追加します。 /github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_velocity.cpp#L81)。 それまでの間、 setpoint_raw
を使用して、 coordinate_frame
をFRAME_BODY_NED
またはMAV_FRAME::BODY_NED
(どちらも機能するはずです)。
@AlexisTMと@ TSC21に感謝します。あなたの返信は役に立ちます。 後で試してみます。
@ TSC21 @AlexisTMご協力ありがとうございます! ボディフレームの速度を制御できるようになりました。 ビデオが録画されます: https :
rostopic pub /mavros/setpoint_raw/local mavros_msgs/PositionTarget '{header: {stamp: now, frame_id: "world"}, coordinate_frame: 8, type_mask: 3527, velocity: {x: 0.1, y: 0, z: 0}}' -r 10
@cnpcshangbo知って
こんにちは@cnpcshangbo 、ビデオをありがとう。
私が持っていた混乱を他の人がクリアするのを助けるためにこれを投稿します。
フレームマスクがFRAME_BODY_NED = 8
であっても、 ROSコマンドはENUにあるはずです。 ENU-> NED変換は、mavrosによって処理されます。
実際、ビデオからの動作は次のとおりです。
こんにちはホアン、
ご説明ありがとうございます。
時間がかかったとのことで、ごめんなさい。
あなたの努力は他の人を助けます。
ありがとう
ボー
ホアンミンチョン[email protected]于2018年8月17日周五上午11:09写道:
こんにちは@cnpcshangbohttps ://github.com/cnpcshangbo 、ビデオをありがとう。
私が持っていた混乱を他の人がクリアするのを助けるためにこれを投稿します。
フレームマスクが「FRAME_BODY_NED = 8」であっても、 ROSコマンドまだENUにあるはずです。 ENU-> NED変換はによって行われます
mavros。
実際、ビデオからの動作は次のとおりです。
- x = 0.1 --->右側
- y = 0.1 --->進む
明らかに、それはまだENUにあります。 しかし、この混乱は私に一週間かかりました
髪を引っ張るの...—
あなたが言及されたのであなたはこれを受け取っています。
このメールに直接返信し、GitHubで表示してください
https://github.com/mavlink/mavros/issues/792#issuecomment-413745084 、またはミュート
スレッド
https://github.com/notifications/unsubscribe-auth/AEm3NdefOViosyJKxQlf2h0ZweC8lO6uks5uRjP9gaJpZM4PDCb2
。
マップフレーム@Nunoで、BODYの場合はx前方、yを左、xを東、yを北にする必要はありませんか?
ですから、実際にはここに3つの規則があるというのは正しいですか。
1)NED:PX4オンボード推定および制御
2)ENU:mavrosコマンドメッセージの標準入力形式
3)NWU:ROSの典型的な座標系
いいえ。ROSにはNWUはありません。
http://www.ros.org/reps/rep-0103.html
@AlexisTMの北または東は、ボディの規則を指定するために使用するのではなく、正面、左などの方向を指定するために使用する必要があります。
はい。 しかし、私が間違っていなければ、まだ3つの規則があると思いますか?
1)NED:オンボード制御
2)Right-Forward-Up:mavrosが生の(速度)設定値をどのように理解するか
3)Forward-Left-Up:ROS規則
@hmchungマップフレーム内で速度設定値を使用しています。これはENU(ROS規則)です。
規則は2つしかないことに注意してください。 PixhawkとENUでのNED:ROSで行うことは何でも。
Forward-Left-Up(FLU)は、ボディフレームのROS規則です。 East-North-Up(ENU)は、ローカル/ワードフレームのROS規則です。
最も参考になるコメント
setpoint_velocity
場合、現在デフォルトでLOCAL_NED
(https:/)になっているため、LOCAL_NED
とBODY_NED
どちらかを選択できるようにする修正を追加します。 /github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_velocity.cpp#L81)。 それまでの間、setpoint_raw
を使用して、coordinate_frame
をFRAME_BODY_NED
またはMAV_FRAME::BODY_NED
(どちらも機能するはずです)。