Gazebo 시뮬레이터로 AR drone 2.0을 웹에서 조작
관심있는 사람 누군가 없으세요~?
개인의 지속은 외로운 것입니다.
지난번 다음에 시뮬레이터 내의 드론을 웹과 GUI의 인터페이스에서 조작할 수 있도록 했습니다.
참고로 한 것은 이쪽
AR drone 2.0 Simulator 위키페이지
환경은 지난번과 변함없이
우분투 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 데이터로 만든 가상 공간에서
자동 해충 제거를 시뮬레이션하고 싶습니다.
아래 페이지가 좋을 것 같습니다.
No.3-3 : 환경을 만들자! (Digital Elevation Models 편)
Reference
이 문제에 관하여(Gazebo 시뮬레이터로 AR drone 2.0을 웹에서 조작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/manjiroukeigo/items/1ec2466c1aaace5b5e43텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)