Category

2017년 8월 20일 일요일

install RTAB-Map Tango (APK) by docker


RTAB-Map Tango (APK)
$ docker pull introlab3it/rtabmap:tango
Note that arm64-v8a APK contains both armeabi-v7a and arm64-v8a binaries.
  • Install APK, 2 choices:
    1. Copy file on host computer then install it with adb from there:
      $ docker run --name=rtabmap-tango introlab3it/rtabmap:tango
      $ docker cp rtabmap-tango:/root/rtabmap-tango/build/arm64-v8a/app/android/bin/RTABMap-debug.apk
      .
      $ docker rm rtabmap-tango
      # cleanup container
      $ adb install -r RTABMap-debug.apk
    2. Call adb from container:
      $ docker run --privileged -i -t --rm -v /dev/bus/usb:/dev/bus/usb introlab3it/rtabmap:tango adb install -r rtabmap-tango/build/arm64-v8a/app/android/bin/RTABMap-debug.apk
docker run -it -d
Dockerfile
# Image: introlab3it/rtabmap:zesty

FROM ubuntu:17.04

# Install build dependencies
RUN apt-get update && apt-get install -y \
      libsqlite3-dev \
      libpcl-dev \
      libopencv-dev \
      git \
      cmake \
      libproj-dev \
      libqt5svg5-dev \
      software-properties-common

RUN sed -i 's|/usr/lib/libmpi.so;||g' /usr/lib/x86_64-linux-gnu/cmake/pcl/PCLConfig.cmake

# Clone source code
WORKDIR /root/

# Build RTAB-Map project
RUN cd rtabmap/build && \
    cmake .. && \
    make -j$(nproc) && \
    make install && \
    cd ../.. && \
    rm -rf rtabmap && \
    ldconfig

WORKDIR /root

2017년 7월 31일 월요일

ToList_ljkstudio_html

# 01_Chart.js

   # 1-1_Google Sheets 를 이용한 JSON

-> (/Users/devgwang/WorkSpace/ljkstudio_html/public_html/js/plugins/chartjs/chart-script.js)

   # 1-2_MySQL 를 이용한 JSON


# 02_SendBird JavaScripts


# 03_ToPDF PHP (or JavaScript)


# 04_AddingMenu (plus button & minus button)


# 05_

Exporting JSON From Google Sheets& JSON to chartJS



->

JSON data -> Chart.js

http://microbuilder.io/blog/2016/01/10/plotting-json-data-with-chart-js.html

Google Sheets 에 DATA 를 JSON 으로 변경한 후에 이를 Chart JS 를 이용하여
CHART 로 변경 한다.

DATA 의 확장성을 고려 하지 아니한다.
그리고 MySQL 를 사용할때에도 JSON 을 사용할 예정이기 때문에
큰 문제가 될거라 생각하지 않는다.


2017년 7월 30일 일요일

00_Intro JavaScript

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<!DOCTYPE html>
<html>
<head>
    <style type="text/css">
        #selected{
            color:red;
        }
        .dark {
            background-color:black;
            color:white;
        }
        .dark #selected{
            color:yellow;
        }
    </style>
</head>
<body>
    <ul>
        <li>HTML</li>
        <li>CSS</li>
        <li id="selected">JavaScript</li>
    </ul>
    <input type="button" onclick="document.body.className='dark'" value="dark" />
</body>
</html>
cs

오늘 부터 배울 내용은 Web Browser 에서의 JavaScript의 활용.

2017년 7월 7일 금요일

import ketai.ui.*;
import android.view.MotionEvent;

KetaiGesture gesture;

PImage compass_img,compass_img2;

int r, y;
float scaleFactor = .04;
PFont f;

void setup() {
  size(displayWidth, displayHeight,P3D);
  // background(20);
  //size((displayWidth-30),(displayHeight-30), P3D);
  background(20);
  f = createFont("Arial",24,true);
  orientation(LANDSCAPE);
  gesture = new KetaiGesture(this);
  noStroke();
                         // 1
  y = height;
}

void draw() {
  background(0);
  
 textFont(f);       
 
 textAlign(RIGHT);
 fill(0,0,200);
  text("Text_test#1.",width-100,100); 
fill(150,0,0);
text("Text_test#2.",width-100,150); 
fill(0,200,0);
text("Text_test#3.",width-100,200);
fill(200,100,100);
text("Text_test#4.",width-100,250); 
fill(0,200,100);
text("Text_test#5.",width-100,300);

  compass_img= loadImage("HYU_initial_eng.png");
   int img_size = 160;
   image(compass_img, width-200, 320, img_size, img_size/3);
   //image(compass_img, 900-img_size/2, 570-img_size/2, img_size, img_size/3);
   
   compass_img2= loadImage("ljk_logo2.png");
   image(compass_img2, width-200, 400, img_size, img_size/2);
   //image(compass_img2, 900-img_size/2, 470-img_size/2, img_size, img_size/2);

  lights();                                               // 2

  translate(width*0.4, displayHeight*0.3);                                  // 3
  scale(scaleFactor);                                     // 4
  //scale(0.3);  
  //rotateX(PI);                                            // 5
  rotateY(radians(r/10));                                    // 6

  //box(10);                                            // 7
  drawMap();
  
}

void drawMap()
{
  float i=0;
  float j=0;
  float lenth=displayWidth;
  float lenth2=displayHeight;
  float sep=20.0;
    
    strokeWeight(2);
   stroke(lenth); 
   fill(255); //white line 
    
    while(i<lenth) {
    i=i+(lenth/sep);
    j=j+(lenth2/sep);
    
    line(i,lenth2,0,i,lenth2,lenth);
    line(0,lenth2,i,lenth,lenth2,i);
   

    line(0,j,0,lenth,j,0);
    line(i,0,0,i,lenth2,0);  
    
    line(0,j,0,0,j,lenth);
    line(0,0,i,0,lenth2,i);
    }
    
    pushMatrix();
    strokeWeight(5);
  stroke(0,lenth,0); 
  line(0, lenth2, 0, lenth, lenth2, 0);
  fill(0,100,0);
  text("X Axis",lenth2,lenth2,0);
  popMatrix();
  
  pushMatrix();
  strokeWeight(5);
  stroke(lenth,0,0);
  line(0, lenth2, 0, 0, 0, 0);
  rotate(-HALF_PI);
  fill(255,0,0);
  text("Y Axis",-lenth2+100,-5,0);
  popMatrix(); 
  
  pushMatrix();
   strokeWeight(5);
  stroke(0,0,lenth);
  line(0, lenth2, 0, 0, lenth2, lenth);
  rotateY(-HALF_PI);
  fill(0,0,255);
  text("Z Axis",lenth2-100,lenth2,0);
  popMatrix();
  objectdraw();
}

void onPinch(float x, float y, float d)                   // 8
{
  scaleFactor += d/5000;
  //scaleFactor=0.3;
  scaleFactor = constrain(scaleFactor, 0.01, .3);
  //int a=1/100;
  //scaleFactor = constrain(a, 0.01, .3);
  println(scaleFactor);
} //zoom in



void mouseDragged()                                       // 9
{
  if (abs(mouseX - pmouseX) < 50) 
    r += mouseX - pmouseX;
  if (abs(mouseY - pmouseY) < 50) 
    y += mouseY - pmouseY;
} //motion rotated

public boolean surfaceTouchEvent(MotionEvent event) {
  super.surfaceTouchEvent(event);
  return gesture.surfaceTouchEvent(event);
}

void objectdraw(){
  y=displayHeight;
  
  pushMatrix(); //anchor 1
  translate(600, y-600, 600);
  noFill();
  stroke(255,0,0);
  sphere(20);
  popMatrix();
  
  pushMatrix(); //anchor 2
  translate(100, y-100, 100);
  noFill();
  stroke(255,255,200);
  sphere(20);
  popMatrix();

  pushMatrix(); //anchor 3
  translate(250, y-250, 250);
  noFill();
  stroke(0,0,255);
  sphere(20);
  popMatrix();

  pushMatrix(); //anchor 4
  translate(400, y-400, 400);
  noFill();
  stroke(0,255,0);
  sphere(20);
  popMatrix();
}

2017년 3월 24일 금요일

2017년 2월 13일 월요일

Drone : Crazyflie Loco Positionning System on ROS

Loco Positionning System

First Setting Anchor

step by step for setting

git clone lps-node-firmware
make
changing a mode to dfu on loco positioning node 
sudo make dfu
sudo picocom /dev/ttyACM#
a ( anchor mode) 엔터
anchor 숫자 입력

-> anchor0_pos 와 설정 값 aX01 과 의 관계 값은 어찌해야 할까?
아항 a 란게 그저 anchor 모드라는 뜻이 었구나 제대로 또 안읽었어~

Second Setting for Crazyflie 2.0 

-> config.mk 값 설정

Third launch Ros

1. Install ROS (full desktop): http://wiki.ros.org/kinetic/Installation/Ubuntu
2. Install the ros joystick node with
-- sudo apt-get install ros-kinetic-joy
3. Create your workspace: http://wiki.ros.org/ROS/Tutorials/InstallingandConfiguringROSEnvironment#Create_a_ROS_Workspace
4. Clone https://github.com/bitcraze/lps-ros and https://github.com/whoenig/crazyflie_ros in the workspace src folder
5. Run catkin_make to build the packages
6. Source the workspace devel/setup.bash again
7. Run   rosdep install bitcraze_lps_estimator    to install dependencies
-> 내가 항상 노쳤던 부분

roslaunch bitcraze_lps_estimator dwm_loc_ekf_hover.launch uri:=radio://0/48/250K x:=1 y:=1 z:=1.0


roslaunch bitcraze_lps_estimator dwm_loc_ekf_hover.launch uri:=radio://0/80/2M x:=1 y:=1 z:=1.0


-> 현재 상태는 crazyflie 는 node 와 연결이 된듯 하고 sudo cfclient 로 연결이 되는 것은 확인 하였으나 ROS 상에서 crazyflie 이와 연결이 통신이 안되는 것 같다.

n_anchors: 6
anchor0_pos: [  0,   0, 1.85]
anchor1_pos: [  0,   3, 1.85]
anchor2_pos: [  2,   3, 1.85]
anchor3_pos: [  2,   0, 1.85]
anchor4_pos: [  3,   0, 1.85]
anchor5_pos: [  3,   3, 1.85]                                

2017년 2월 7일 화요일

Drone : Crazyflie2.0 step by step first

https://wiki.bitcraze.io/


이제야 CrazyFlie 2.0 에 대한 전반적인 내용을 이해했다.

초기화 후 다시 fimware 하기

1> DFU mode 로 공장 초기화


sudo dfu-util -d 0483:df11 -a 0 -s 0x08000000 -D cf2loader-1.0.bin

sudo dfu-util -d 0483:df11 -a 0 -s 0x08004000 -D cf2-2016.09.bin




-> DFU 모드로 진입( crazyflie2.0 인 경우 버튼을 5초이상 눌러 깜박임이 빠른 상태에서 손은 띈다. ) 하여 위 명령어 실행한다.

이제 공장 초기화

2> firmware 를 설치

stm32 linker 가 필요 하다.

이제 boot mode로 진입(  crazyflie2.0 인 경우 버튼을 3초이상 눌러 깜박임이 누린 상태에서 손은 띈다. -> 그러면 m2 와 m3이가 교차하면서 깜박인다. )

이 상태에서 받은 crazyflie-firmware 을 make 하고 sudo make cload

crazyflie2-nrf-firmware 을 make 하고 sudo make cload

하면 보드에 fimware 가 설치 된다.