Gazeboシミュレーターで AR drone 2.0をwebから操作する
農業とか警備とか画像認識出来る情報収集ドローンに
興味ある人誰かいませんかね〜?
個人での継続は寂しいものです。
前回に続いてシミュレーター内のドローンをウェブとGUIのインターフェースから操作出来るようにしました。
参考にしたのはこちらの方
AR drone 2.0 Simulator ウィキページ
環境は前回と変わらず
Ubuntu 14.04
※ROSのcatkin_wsは~/catkin_wsに設定しています。
~/catkin_ws/srcディレクトリ上で
roslibjsパッケージをインストール
$ git clone https://github.com/RobotWebTools/roslibjs
参考ページに従ってこの時点でwebsocketを実行するとrosauth
が入っていないというエラーになりました。
~/catkin_ws/srcにrosauthを入れた上で
buildします。
$ git clone https://github.com/GT-RAIL/rosauth.git
$ catkin_make
drone.htmlの名前で下記のhtmlファイルを
下記ディレクトリに保存
▼保存先
~/catkin_ws/src/roslibjs/examples
▼ファイル内容
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<script src="http://cdn.robotwebtools.org/EventEmitter2/current/eventemitter2.min.js"></script>
<script src="../build/roslib.js"></script>
<script>
// Connecting to ROS
// -----------------
var ros = new ROSLIB.Ros();
// If there is an error on the backend, an 'error' emit will be emitted.
ros.on('error', function(error) {
document.getElementById('connecting').style.display = 'none';
document.getElementById('connected').style.display = 'none';
document.getElementById('closed').style.display = 'none';
document.getElementById('error').style.display = 'inline';
console.log(error);
});
// Find out exactly when we made a connection.
ros.on('connection', function() {
console.log('Connection made!');
document.getElementById('connecting').style.display = 'none';
document.getElementById('error').style.display = 'none';
document.getElementById('closed').style.display = 'none';
document.getElementById('connected').style.display = 'inline';
});
ros.on('close', function() {
console.log('Connection closed.');
document.getElementById('connecting').style.display = 'none';
document.getElementById('connected').style.display = 'none';
document.getElementById('closed').style.display = 'inline';
});
// Create a connection to the rosbridge WebSocket server.
ros.connect('ws://localhost:9090');
// Write your code here, to publish or subscribe in topics
function Takeoff() {
// First, we create a Topic object with details of the topic's name and message type.
var takeoff = new ROSLIB.Topic({
ros : ros,
name : 'ardrone/takeoff',
messageType : 'std_msgs/Empty'
});
// Then we create the payload to be published. The object we pass in to ros.Message matches the
// fields defined in the geometry_msgs/Twist.msg definition.
var msg = new ROSLIB.Message('');
// And finally, publish.
takeoff.publish(msg);
}
function Land() {
// First, we create a Topic object with details of the topic's name and message type.
var land = new ROSLIB.Topic({
ros : ros,
name : 'ardrone/land',
messageType : 'std_msgs/Empty'
});
// Then we create the payload to be published. The object we pass in to ros.Message matches the
// fields defined in the geometry_msgs/Twist.msg definition.
var msg = new ROSLIB.Message('');
// And finally, publish.
land.publish(msg);
}
function GoTo(){
var TheForm;
TheForm = document.movingForm;
var coordinate = new ROSLIB.Topic({
ros : ros,
name : 'tum_ardrone/com',
messageType : 'std_msgs/String'
});
// Then we create the payload to be published. The object we pass in to ros.Message matches the
// fields defined in the geometry_msgs/Twist.msg definition.
var msg = new ROSLIB.Message({data : "c goto 20 20 5 2"});
// And finally, publish.
coordinate.publish(msg);
}
</script>
</head>
<body>
<h1>Drone Application</h1>
<input type="button" value= "Takeoff" onclick="Takeoff()" style="width:150px"/>
<br>
<input type="button" value= "Land" onclick="Land()" style="width:150px"/>
<form name=movingForm>
<input type="text" name= "coordinate" style="width:142px"/>
<br>
<input type="button" value= "Go to" onclick="GoTo()" style="width:150px"/>
<form/>
<br>
<div id="statusIndicator">
<p id="connecting">
Connecting to rosbridge...
</p>
<p id="connected" style="color:#00D600; display:none">
Connected
</p>
<p id="error" style="color:#FF0000; display:none">
Error in the backend!
</p>
<p id="closed" style="display:none">
Connection closed.
</p>
</div>
</body>
</html>
ターミナルからウェブソケットを起動します。
$ roslaunch rosbridge_server rosbridge_websocket.launch
成功するとポート9090でサーバーがスタートしたメッセージ表示が確認出来ます。
[INFO] [WallTime: 1455515889.569402] Rosbridge WebSocket server started on port 9090
前回準備したAR drone 2.0のシミュレーション環境を起動して下さい。
$roslaunch cvg_sim_gazebo ardrone_testworld.launch
さて、これでdrone.htmlをブラウザで開くと
Connected!という表示でウェブソケットにクライアントが接続されて
Takeoff, Land, Go toのボタンが使えるようになっている筈です。
私が試験した所、TakeoffとLandで離陸、着陸はボタンで確認出来ましたがGo Toでの行き先の指定の仕方がいまいち分かりませんでした。
そこで別のGUIコントローラーも試します。
~/catkin_ws/srcへパッケージをインストールします。
$git clone http://www.ros.org/wiki/tum_ardrone
tum_ardrone配下の
tum_ardrone.launchを使って実行しました。
$ cd ~/catkin_ws/src/tum_ardrone/launch
$ roslaunch tum_ardrone tum_ardrone.launch
こんな感じでGUIのコントローラー、ドローンカメラ映像、飛行座標のトラッキング情報のウィンドウが開く筈です。
試しにGUIのControl Sourceを Keyboardに指定して動かしてみましょう。
i:前進
k:後退
l:右旋回
j:左旋回
s:離陸
d:着陸
動きました!
次回は録画した動画から認識にかけて
人間、害獣、害虫、作物など必要情報を認識出来るように出来たらいいなぁ
darknetというフレームワークはすごくお手軽でありつつ
高性能な機能を実現出来て便利です。
darknet
実際に収集した3Dデータで作った仮想空間で
自動害虫除去のシミュレーションしたいです。
下記のページとか良さそう
Author And Source
この問題について(Gazeboシミュレーターで AR drone 2.0をwebから操作する), 我々は、より多くの情報をここで見つけました https://qiita.com/manjiroukeigo/items/1ec2466c1aaace5b5e43著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .