2017년 3월 4일 토요일

#Ubuntu에서 AndroidStudio 설치 Tutoiral (AndroidStudio + Ubuntu16.04)



이번에 하게 될 과정은 생각보다 수월합니다. ros2.0은 엄청 헤맸거든요..

거의 참조 페이지를 보며 따라했습니다.(참조 : http://webnautes.tistory.com/1045)

*** 다른 페이지를 참조하니, ubuntu 에서 제공하고 있는 OpenJDK의 경우는 몇 가지 문제가 생기는 이유로, Oracle JDK를 설치하기를 권하고 있다.
(0) 따라서 설치 전에 설치되어 있는 OpenJDK를 없애도록 하자.
     $ sudo apt-get purge openjdk*


<JDK 설치>
1
2
3
4
5
6
7
sudo add-apt-repository ppa:webupd8team/java // PPA를 이용하여 JDK 1.8을  설치.
sudo apt-get update
sudo apt-get install oracle-java8-installer
sudo apt-get install oracle-java8-set-default // JDK를 default.(생략가능)
java -version // java version확인
cs

<AndroidStudio 설치>
1
2
3
4
5
6
7
8
9
10
11
sudo add-apt-repository ppa:paolorotolo/android-studio // PPA를 이용하여 androidStudio설치
sudo apt-get update
sudo apt-get install android-studio
cd ~
vi .bashrc
#.bashrc파일의 마지막 줄에 export PATH=$PATH:/opt/android-studio/bin 추가
//.bashrc 파일에 android-studio 경로 추가
source ~/.bashrc // 추가 된 경로를 포함해서 적용
studio.sh // 자동으로 /opt/android-studio생성됨. 그리고 studio.sh로 바로 실행가능
cs


+Android SDK

출처 : http://slg1119.tistory.com/41





내 컴퓨터에 설치 되는 정보에 대한 설명이 나와있고 필요한 용량을 알려 주고 있다.

 참조 블로그에 따르면 "KVM을 설치하면 빠른 가상 머신을 사용할 수 있다"이고,
나는 가상 머신을 쓸 것이 아니기 때문에 생략한다.

마지막으로 설치를 실행한다.

참조 사이트에서는 다음과 같은 경로 추가를 권하고 있지만,
본인은 추가하지 않고도 잘 동작하므로 실행하지 않았다.
1
2
export PATH=$PATH:/opt/android-studio/bin:/home/webnautes/Android/Sdk/platform-tools
source ~/.bashrc
cs



자, 이제 hardware 연결에 대한 이야기를 합시다.
 AndroidStudio를 실행하게 되면 본인은 위의 update를 실행하지 않으면 오류가 일어나기에 update를 먼저 실행.
(주절주절..
나의 오류는 "SDK is out of date or is missing templates"
찾은 질의응답으로 응답자의 말로 나는 eclipse사용자는 아니니 그냥 update를 하라는 말에 따라 update를 실행시켰다.
...)

그 이후로는 window에서의 AndroidStudio와 비슷하다. 간단하게 진행화면만 캡쳐.

 만들 프로젝트의 이름과 위치 그리고 나중에 package 단위로 관리하기 위한 주소 등이 있다.
 안드로이드의 어떤 버전을 이용할 것인지에 대한 정보
 가장 기본 Empty로 실행하기로 하자.
 여기는 되도록이면 바꾸지 않는걸로 하자.
 쭉 next를 누르면 마지막으로 이와 같은 화면이 생성되고 완성된다.
기본 실행 화면으로 실행시키면 hello world가 뜨게 된다.

본인의 핸드폰은 LG Vu2이다.
가장 잘 설명되어 있는 곳은
(http://askubuntu.com/questions/461729/ubuntu-is-not-detecting-my-android-device)
그리고 나에게 맞게 보면서 중간 바꾼 사이트는
(http://hijacker.egloos.com/2726990)


1
2
3
4
5
6
7
8
9
10
11
sudo gedit /etc/udev/rules.d/51-android.rules
# SUBSYSTEMS=="usb", ATTRS{idVendor}=="1004", ATTRS{idProduct}=="618e", MODE="0666"를 추가한다.
# 여기에서  ATTRS{idVendor}=="1004"는 각 계열사마다 가지는 번호, ATTRS{idProduct}=="618e" 각 폰마다 가지는 고유번호를 뜻한다.
# 작성하고 저장한다.
sudo chmod a+r /etc/udev/rules.d/51-android.rules
# chmod를 이용해서 파일의 권한을 바꾼다. 
# ps.바꿔도 안 바꿔도 크게 변화는 없는 것 같지만, 안전하게 바꾸도록 하자.
lsusb
#참고로 i(아이)가 아니라 l(엘)이다. 이것때문에 usbutils를 설치하려고 했었다고..(하하)
cs

1. 51-android.rules를 작성한다.
(SUBSYSTEMS=="usb",ATTRS{idVendor}=="1004" , ATTRS{idProduct}=="618e" , MODE="0666")

참고로, 여기에서 idVendor, idProduct는 본인의 핸드폰에 따라 바꾸어야 한다.
 Bus 002 Device 029 : ID 1004:61f9 LG Electronics, Inc. Optimus (Various Models) MTP Mode
라고 뜨는 것을 볼 수 있음.
이를 통해 나는 idVendor가 1004이고 idProduct가 61f9임을 알 수 있음.
 이를 바탕으로 아까 작성한 51-android.rules를 수정.

1
2
3
4
5
6
sudo udevadm control --reload-rules
sudo service udev restart
sudo udevadm trigger
ls -l /dev/bus/usb/002
#위에서 나는 Bus 2였으니까. 002가 된다. 혹시 의문스러우면 ls -l /dev/bus/usb를 실행시켜보자.

1. reload를 한다.
2. 바뀐 것을 확인한다.
(참고로, 매번 핸드폰 접속시 마다 접속번호가 달라지지만 적용된다는거!)


자, 이제 그러면 AndroidStudio에서 핸드폰을 인식한다는 거!


2017년 1월 17일 화요일

#RobotOperatingSystem_00



ROS is a framework for writing robot software.
ROS는 로봇 소프트웨어를 작성하기 위한 프레임워크입니다.


ROS는 독립된 많은 수의 프로그램이 지속적으로 소통함으로써 이루어진다.

"Fetch An Item", 문제로 ROS를 구상해내었다.

<an office-assistant robot is instructed to retrieve a stapler.>

(1) the robot must understand the request
로봇이 문제를 이해한다.

(2)the robot must start some sort of planner
to coordinate the search for the item,    which    will    likely    require
navigating    through    various    rooms    in    a    building,    perhaps    including    elevators    and    doors.
물건을 찾기위해 계획같은 걸 짜기 시작하는데, 예를 들면 빌딩안의 다양한 방들을 navigating하는 것

(3)Once arriving in a room, the robot must    search desks cluttered    with similarly sized    objects (since all handheld objects are roughly the same size) and find a stapler.
방에 도착하면, 로봇은 비슷한 크기의 물체를 두고있는 책상을 찾는다.그리고 stapler를 찾는다.

(4)The robot must then retrace its steps and deliver the stapler to the desired    location.
로봇은 다시 왔던길을 되돌아가고 stapler를 원하는 장소에 배달한다.

->
- one group : producing indoor maps.

- another group : have expertise in using maps to robustly navigate indoor environments.

- other group : have discovered a particular computer vision approach that works well for recognizing small objects in clutter.

"--------------------------------------------------------------------------------------------------------------------------------"

ROS는 다양한 환경을 위해서 제작되었지만, 앞으로 진행되는 실습의 환경은

OS : Ubuntu 14.04 LTS(Ubuntu trusty)
ROS : Indigo
Python : python 2.7.6

인터넷을 찾아보면 이런저런 ROS를 설치하는 방법이 존재한다.
하지만, 간단한 방법인 Two line Install로 설치를 해보자.
 (workspace까지 설정된다. 단, 이렇게 설치하게 되면 catkin_ws_oroca에서 작업을 진행해야 합니다.)

http://wiki.ros.org/ROS/Installation/TwoLineInstall

$ sudo wget https://raw.githubusercontent.com/oroca/oroca-ros-pkg/master/ros_install.sh && chmod 755 ./ros_install.sh && ./ros_install.sh catkin_ws_oroca indigo

중간에 설치하다가
$ changing permission of './ros_install.sh': 과 같은 오류가 뜬다면,

$chmod 755 ros_install.sh
$./ros_install.sh cakin_ws_oroca indigo

하고 다시 입력해주면 정상적으로 설치가 시작된다.

"--------------------------------------------------------------------------------------------------------------------------------"

ROS 패키지를 찾거나 사용하는데 문제가 발생한다? 환경변수의 설정이 제대로 되어있는가 확인해보자.
ROS_ROOT, ROS_PACKAGE_PATH가 제대로 설정되어 있는가 확인?
$ export | grep ROS


01 파일시스템 도구
ROS에서 코드는 여러 패키지에 산재되어 있어 ls 나 cd 같은 명령어 만으로 찾아다니는 일은 번거로워서 ROS에서 몇 가지 도구를 제공합니다.

1. rospack 사용하기
: 패키지의 정보를 제공하는 도구, 더 많은 정보를 원한다면, (http://docs.ros.org/independent/api/rospkg/html/rospack.html)

$ rospack find roscpp

2. roscd 사용하기
:  패키지의 이름만으로 cd 처럼 폴더를 이동효과.

$ roscd roscpp
(=$rospack find roscpp)

3.roscd log
: ROS의 로그파일이 저장되는 폴더로 이동효과.
 만약 한번도 ROS프로그램을 실행해 본 적이 없다면 폴더를 찾을 수 없다는 경고가 발생합니다.

$ roscd log

4.rosls
: rosbash 도구모음의 일부.  사용자가 지정한 패키지나 스택, 또는 일반적인 경로에 대해 바로 ls를 실행하는 효과.

$ rosls roscpp_tutorials

"--------------------------------------------------------------------------------------------------------------------------------"

ROS는 독립된 수많은 수의 프로그램이 지속적으로 소통함으로써 이루어진다.
그리고 그 독립된 수많은 수의 프로그램이 동시에 움직이는 것과 다른 것 사이에 메세지를 보냄으로써 소통하는 것으로 이루어져있다.

프로그램 자체는 node graph로 표현되고 프로그램 사이의 소통은 edges로 표현된다.

o (node) : module, sending/receiving messages.
- (edge) : a stream of messages between two nodes.

o (node) : typically POSIX Processes
- (edge) : typically TCP connections

따라서 일부가 손상되어도 그 프로세스를 제외하곤 평소처럼 돌아갈 수 있다. 그 부분과의 연결을 끊으면 차단되고 그 프로세스에만 이상이 생기니까.


2017년 1월 16일 월요일

#RobotOperatingSystem_01



catkin?
ROS 빌드 시스템
실행 가능한 프로그램, 라이브러리, 스크립트, 인터페이스를 생성한다.











화면에 catkin_ws_oroca가 생성된 것을 볼 수 있다.
catkin_ws_oroca안에 들어가면 build  devel  src가 기본으로 생성되어 있는 것을 볼 수 있다.

build : 라이브러리 및 작업결과 저장
devel :설치파일들 저장
src : 작업공간_package 생성 및 사용


[ROS Package]

$ cd ~catkin_ws_oroca/src
# catkin_create_pkg [패키지이름][의존성-의존할 요소]
$ catkin_create_pkg basics std_msgs rospy
: basics라는 package를 만드는데 내부 구성은 rospy, roscpp를 사용할거다.
$ cd ~catkin_ws_oroca/
$ catkin_make 
CMakeLists.txt, package.xml 파일을 자동생성

여기서 잠깐! catkin_make는  catkin을 이용한 일련의 작업 과정에서 쓰이는 편리한 도구로 이는 일반적으로 CMake 작업환경에서의 cmakemake가 합쳐져 있는 도구라 생각하면됨.





































앞서 배운것처럼 rospack을 이용해서 package정보를 알 수 있는데 rospack 요소 중에 depends1은 직접 의존(dependencies),
depends는 간접 의존(indirect dependencies)까지 포함.






$rospack depends1을 이용해서 package인 basics의 의존 정보를 알 수 있다.



$rospack depends는 package인 basics의 간접의존까지 모두 검색







$roscd basics를 이용해서
$cd cd catkin_ws_oroca/src/basics/
라는 명령어를 치지 않고 바로 basics package로 이동가능.
단, package인 경우만 이동가능 한 것을 볼 수 있음. 단순 ros의 ws(WorkSpace)도 이동x


자, 이제 그럼 package.xml을 살펴보자.
 
 (1) description tag








<description>The basics package</description>
 
<description>은 package에 대한 설명을 하는 부분으로써 가능한 한 줄로 요약한다는 전제를 가지고, 
패키지에 대한 설명을 적는다. 하지만 한 줄로는 설명이 어려운 경우 여러 줄이라도 가능하다.

(2) maintainer tags


 
 
package.xml에서 가장 중요한 부분 중 하나.
패키지의 관리자에 대한 정보가 기록되는 부분이며 최소 한 명 이상의 정보가 입력되어야.
관리자의 이름은 태그의 몸체가 되고, 반드시 입력되어야 하는 웹메일 주소를 속성으로 가지고 있음.

(3) license tags 
 
 
 
 
라이센스에 대한 정보를 반드시 입력해야 한다.
라이센스에 대한 정보는  (https://opensource.org/licenses/alphabetical)에서 찾아 볼 수 있다.
현재 사용자는 명시하지 않았지만, 
ROS tutorial(http://wiki.ros.org/ko/ROS/Tutorials/CreatingPackage)에서는 
ROS의 핵심부분에서 이미 사용되고 있는 BSD라이센스를 사용하겠다고 명시해놓고 있다.
 
(4)dependencies tags
 
 
 
 
 
 
 
 
 
package의 의존성을 알려주는 태그의 모음들을 볼 수 있다.
모든 package는 적어도 하나 이상의 의존성을 가진다. 
 
  • <buildtool_depend> 
    : 이 패키지가 스스로 빌드하기 위해서 필요한 빌드 시스템에 대해 명시한다.
     
  • <build_depend> 
    : 이 패키지를 빌드할 때 어떤 패키지들이 필요한지 명시한다.
  • <run_depend>
    : 이 패키지를 실행시킬 때 팔요해지는 패키지들에 대해 명시한다.

    (specify which packages are needed to run code in this package, or build libraries against this package.)

  • <test_depend>
    : unit tests를 위한 추가적인 의존성만을 명시한다. build_depend나 run_depend에 명시한 의존성을 명시하면 안된다.
위 네가지의 태그를 사용할 수 있다.  
 
package.xml에 쓰이는 자세한 설명을 알고 싶다?
: http://wiki.ros.org/catkin/package.xml#Build.2C_Run.2C_and_Test_Dependencies 

참고로 위에서 언급한 바와 같이 package.xml은 package를 생성하면 자동으로 만들어진다. 
하지만 이 파일을 사용자가 다시 한 번 어떤 내용인지 인지하고 재작성을 실시한다면 
보다 견고하고 간결해진 package를 구성가능해진다.