카테고리 없음2019. 6. 4. 23:51

433Mhz 송수신 모듈 동작 전압

https://blue-sea-whale.tistory.com/8

Tx FS1000A 3.5V ~ 12V (송신전력 10mW, 안테나 25cm)

Rx XY-MK-5V : 5V 4mA (안테나 32cm)

 

 

NodeMCU V3 핀맵 설치 사용가능한 GPIO 5핀

https://makernambo.com/49

 

RCSwitch 라이브러리는 인터럽트 사용

NodeMCU에서 인터럽트 사용하면 에러가 발생 : ISR not in IRAM

해결책 : https://forum.arduino.cc/index.php?topic=616264.0

인터럽트 서비스 루틴(ISR) 함수 선언을 바꿔줌

void ICACHE_RAM_ATTR ISRoutine();  //인터럽트 서비스 루틴이 flash메모리가 아닌 RAM에 있도록 함

 

const byte interruptPin1 = D2; 
void ICACHE_RAM_ATTR IntCallback();
pinMode(interruptPin1, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin1), IntCallback, RISING);

 

인터럽트 예제 : https://www.electronicwings.com/nodemcu/nodemcu-gpio-interrupts-with-arduino-ide

참고: 인터럽트 여러개 https://github.com/esp8266/Arduino/issues/4468

 

버튼 눌렀을때 IFTTT로 알람 보내기 : https://virang-a.blogspot.com/2017/06/ifttt-button-with-nodemcu.html

 

 

슬립모드 사용법

https://makernambo.com/49

 

 

아두이노 프로그램 설치, NodeMCU 설치

https://developer.ibm.com/kr/cloud/internet-of-things/2017/07/30/esp8266-iot-arduino-ide-nodemcu-basic/

 

ESP8266 IoT 개발: 아두이노 IDE 로 NodeMCU 시작해보기 - IBM Developer

아두이노로 ESP8266 시작해보기 NodeMCU LED NodeMCU 에는 2개의 LED 가 기본 장착되어 있습니다. ESP-12 에는 보통 파란 LED 가 GPIO2(D4) 에 연결되어 전원이 켜질때나 롬 플래시(TX) 할때 작동 상태를 볼 수 있습니다. NodeMCU 에는 보통 빨간 LED 가 내장되어 있어 GPIO16(D0) 로 별도 회로 구성 없이 작동 가능합니다. NodeMCU 버튼 리셋(RST) 버튼은 nRST 포트에 연결되어 …

developer.ibm.com

중국산 NodeMCU는 CH340 이라는 USB 칩셋이 붙어 있는데, 

예전에는 별도로 드라이버를 설치했었는데, 기본 아두이노 IDE 만 설치해도 인식하더라.

위 예제와 또한가지 차이점은 CH340이 붙어있는 보드는 빨간색 LED가 없다. 파란 LED 점멸로 테스트 할 것.

 

 

NodeMCU로 무선공유기 WiFi 접속

https://gwak-berrypi.blogspot.com/2017/08/nodemcu-wifi-ide.html

 

nodeMCU WiFi 아두이노 IDE 기본설정

nodeMCU WiFi 아두이노 IDE 기본설정입니다. 그렇게 어려운것은 없습니다.  시리얼 창에  아이피가 나오면 성공입니다. #include const char* ssid = "minyoung"; // 자...

gwak-berrypi.blogspot.com

 

HTTP 로 명령어 받는 예제

https://m.blog.naver.com/roboholic84/221023410579

 

ESP8266 기본 예제 알아보기 , HTTP 통신

안녕하세요 메카솔루션입니다.이번에는 이어서 ESP8266 기본예제중 웹서버를 알아보도록 하겠습...

blog.naver.com

대표 네이버 카페

아두이노 스토리 10만명

당근이의 AVR 갖구 놀기 20만명

NodeMCU 사용자 블로그

상식이 통하는 사회 : https://blog.naver.com/jyoun

 

mysql까지 적용이 되는군! [아두이노스토리 카페]

https://cafe.naver.com/arduinostory/112154

 

nodeMCU,led,wifi,mysql

nodeMCU 에 따로 LED 연결하지 않고, 온보드 LED 이용. 필요 부품 : (mys...

cafe.naver.com

ThingSpeak 연결 라이브러리도 있었군! [당근이의 AVR 갖구 놀기 카페]

https://cafe.naver.com/carroty/319232

 

nodeMCU와 센서,LCD를 연결하...

대한민국 모임의 시작, 네이버 카페

cafe.naver.com

 

data.go.kr 공공데이터 받아와서 SSD1306으로 표시하는 소스 [당근이의 AVR 갖구 놀기 카페]

https://cafe.naver.com/carroty/274031

 

[NodeMCU] 공공데이터를 이용해...

대한민국 모임의 시작, 네이버 카페

cafe.naver.com

국내 Thing+ 이용한 IoT [상식이 통하는 사회 블로그] <== AP로 접속해서 무선공유기 SSID,PSWD 셋팅하는 예제 참고

https://blog.naver.com/jyoun/220958813127

 

NodeMCU 쓸수 있는 GPIO 설명 잘되어 있음

https://m.blog.naver.com/crucian2k3/221554983840

 

ESP8266 보드 시리즈 정리 잘됨

https://www.esp8266.com/wiki/doku.php?id=esp8266-module-family

 

아두이노 칼만필터 LPF 

https://blog.naver.com/crucian2k3/220534818943

 

SSD1306 OLCD 자세한 설명

https://blog.naver.com/crucian2k3/221323391435

 

 

 

 

 

 

 

 

Posted by orasman
2019. 4. 15. 13:21

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

카테고리 없음2019. 1. 22. 22:28



















Posted by orasman
카테고리 없음2018. 3. 29. 22:59

https://steemit.com/kr/@daeho/gan-generative-adversarial-network-1

Posted by orasman
카테고리 없음2017. 9. 3. 13:33

170901 ROS 세미나 자료가 업데이트 되었다

https://github.com/robotpilot/ros-seminar


13_매니퓰레이터.pdf


https://github.com/ROBOTIS-GIT/open_manipulator

https://github.com/ROBOTIS-GIT/open_manipulator/wiki



open_manipulator   예제가 추가되면서 다이나믹셀 기반 매니퓰레이터 제어 예제가 생겼다


OpenManipulator 및 MoveIt! 의존성 패키지 설치


$ sudo apt-get install ros-kinetic-desktop-full

$ sudo apt-get install ros-kinetic-rqt*
$ sudo apt-get install ros-kinetic-moveit*
$ sudo apt-get install ros-kinetic-industrial-core
$ sudo apt-get install ros-kinetic-dynamixel-sdk
$ sudo apt-get install ros-kinetic-dynamixel-workbench-toolbox  #이거실행하지 말고
$ sudo apt-get install ros-kinetic-robotis-math


$ cd ~/catkin_ws/src
$ git clone https://github.com/ROBOTIS-GIT/open_manipulator.git
$ cd ~/catkin_ws && catkin_make


==> 에러가 난다

CMakeFiles/dynamixel_controller.dir/src/dynamixel_controller.cpp.o: In function `open_manipulator_dynamixel_controller::DynamixelController::DynamixelController()':
dynamixel_controller.cpp:(.text+0x2aa): undefined reference to `dynamixel_multi_driver::DynamixelMultiDriver::initSyncWrite()'
dynamixel_controller.cpp:(.text+0x3cf): undefined reference to `dynamixel_multi_driver::DynamixelMultiDriver::initSyncRead()'



/home/bluesky/catkin_ws/src/open_manipulator/open_manipulator_dynamixel_ctrl/include/open_manipulator_dynamixel_ctrl/dynamixel_controller.h


위 파일 내용중에

#include <dynamixel_workbench_toolbox/dynamixel_multi_driver.h>

가 링크가 안되서 발생하는 에러, 실제로 이 파일이 없다.


dynamixel_workbench_toolbox 폴더에 dynamixel_multi_driver 가 없어서 발생하는 문제 였다


/opt/ros/kinetic/include/dynamixel_workbench_toolbox/

위 폴더에 보면 파일이 dynamixel_tool.h 파일 하나만 있다


인터넷을 찾아보니 아래 주소에 dynamixel_multi_driver.h 파일이 있다


https://github.com/ROBOTIS-GIT/dynamixel-workbench


https://github.com/ROBOTIS-GIT/dynamixel-workbench/tree/master/dynamixel_workbench_toolbox/include/dynamixel_workbench_toolbox


최신 GIT 에는 dynamixel_multi_driver.h가 있는데,

sudo apt-get install ros-kinetic-dynamixel-workbench-toolbox 로 설치했을때는 없다는게 문제점


워크벤치 툴박스 삭제 명령어 하고 재설치 해도 똑같다

sudo apt-get purge ros-kinetic-dynamixel-workbench-toolbox

sudo apt-get upgrade 해도 문제 해결은 안됐다.


==> 해결방법

1) 먼저 설치했던 워크벤치 툴박스를 지우고

sudo apt-get purge ros-kinetic-dynamixel-workbench-toolbox


2) catkin_ws/src/ 에서

git clone https://github.com/ROBOTIS-GIT/dynamixel-workbench.git
git clone https://github.com/ROBOTIS-GIT/dynamixel-workbench-msgs.git


혹시 qt 에러 나면

sudo apt-get install ros-kinetic-qt-build


3)컴파일하면 성공한다

cd ~/catkin_ws && catkin_make



OpenManipulator 모델링 및 동작 테스트

$ roslaunch open_manipulator_description open_manipulator_chain_rviz.launch


URDF 만들고

MoveIt으로 패키지 만들어서 그걸 사용하면 된다


로모 한쪽 팔 URDF 만들고 MoveIt 으로 패키지 생성했는데, 간섭때문인지 동작범위가 매우 작다

testbot.urdf


로모 오른쪽팔 URDF 모델링

romo_arm.urdf


(------------------------------------------)


ROS 다이나믹셀 제어용 패키지가 나왔다


http://wiki.ros.org/dynamixel_workbench


터미널창에서 다이나믹셀 하나를 셋팅하는 패키지

http://wiki.ros.org/dynamixel_workbench_single_manager/Tutorials/CommandLine


(주의) launch 파일 만들때 프로토콜을 1.0 으로 해야 동작한다.


<arg name="protocol_version" default="1.0"/>

GUI 로 다이나믹셀 하나를 설정하는 패키지


http://wiki.ros.org/dynamixel_workbench_single_manager/Tutorials/GUI

(주의) ID, 동작모드, 통신속도를 설정하고 아랫쪽에 torque on 을 눌러야 명령이 먹힌다

(주의) 숫자를 한글자씩 넣을때마다 다이나믹셀 RAM이 업데이트 된다


다이나믹셀 2개로 팬,틸트 위치제어 하는 예제

http://wiki.ros.org/dynamixel_workbench_controllers/Tutorials/PositionControl


현재 MX-106 은 인식이 되는데 EX-106이 미인식이라서 pan,tilt 제어는 못해봄


ROBOTIS 싸이트에서 RoboPlus 라는 SW를 다운받아서

USB2Dynamixel 의 펌웨어를 모두 최신버전으로 업데이트함

그리고 나서 Pan, Tilt 정상 동작함


==> 갖고 있는 EX-106중에 하나는 고장났는지 ROS로 제어도 안되고, RoboPlus SW로도 인식이 안됨. 제품 자체 불량인듯. 다른 EX106은 잘 된다.

    



최종적으로 여러개 다이나믹셀을 한번에 동작시키는 드라이버

http://wiki.ros.org/dynamixel_workbench_toolbox



## open manipulator 예제를 실행함

https://github.com/ROBOTIS-GIT/open_manipulator


사용법 (wiki page)

https://github.com/ROBOTIS-GIT/open_manipulator/wiki/OpenManipulator-Chain#software-setup


예제에 나온 내용중에 launch 파일을 수정

  <arg name="device_name"          default="/dev/ttyUSB0"/>
  <arg name="baud_rate"            default="57600"/>
  <arg name="protocol_version"     default="1.0"/>


혹시

"Sync Read Failed!" 에러가 난다면..



Dynamixel_controller.cpp 에서

bool DynamixelController::readDynamixelState(void) 함수에서


if (!multi_driver_->syncReadPosition(readValue_->pos))
    ROS_ERROR("Sync Read Failed!");


이부분 에러이므로, readDynamixelState 함수를 호출하는 아래 부분을 주석처리 한다


bool DynamixelController::control_loop()
{
  // Read & Publish Dynamixel position
  //readDynamixelState();    //이부분이 원래 살아 있었는데, 주석처리했다
}


참고로 dynamixel_controller.h 에서

#define MOTOR                               (0)    //0
#define MAX_DXL_NUM                (3)    //5
#define ITERATION_FREQUENCY  (25)   //25


이부분에서 연결된 모터의 개수와, 업데이트 주기를 바꿀 수 있고

업데이트 주기가 빠르면 동작이 좀 더 세분화되서 움직인다


==> GIR ROBOTIS issue를 통해 문의해서 원인을 찾았다

sync_read, sync_write 는 다이나믹셀 통신 프로토콜 2.0에서 지원하는 명령어 임

프로토콜 2.0은 MX시리즈 펌웨어 39번 이후로 지원하는데,

우리는 EX-106모터도 있기 때문에 전체 모터를 제어하려면 프로토콜 1.0을 써야 함


로보티즈 담당자 해결책은

syncRead 대신에 프로토콜 1.0에서 모터의 상태를 읽어오는 readRegister 함수를 써야 한다네요.

로보티즈에서 이 부분을 업데이트 해준다고 하니 기다려 보면 될것 같습니다.

https://github.com/ROBOTIS-GIT/open_manipulator/issues/9


[gripper on/off] 그리퍼만 열고 닫는 토픽 명령 송출
rostopic pub /robotis/open_manipulator/gripper std_msgs/String "data: 'grip_on'" --once

[dynamixel control] 하는 런치 파일
roslaunch open_manipulator_dynamixel_ctrl dynamixel_controller.launch

[dynalmixel control by MoveIt] 무브잇 으로 엔드포인트 지정하고 Plan&Execute 누르는 런치파일
roslaunch open_manipulator_moveit open_manipulator_demo.launch



romo_launch 파일 수정중

roslaunch romo_arm demo.launch


romo.urdf 기반으로 moveit 을 통해 만든 패키지에 있는 demo.launch 와

로보티즈가 배포한 open_manipulator_moveit 패키지의 demo.launch 내용이 비슷하다.

즉 moveit으로 패키지를 만든건 동일하고, 로보티즈 예제는 여기에 다이나믹셀을 움직이는 부분을 추가한듯!


demo.launch 파일의 차이점을 찾아보니 아래 내용이 로보티즈 launch 파일에 추가되어 있음


  <node name="robotis_joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher">
    <param name="use_gui" value="false"/>
       <rosparam param="source_list" if="$(arg use_gazebo)">["open_manipulator_chain/joint_states"]</rosparam>
       <rosparam param="source_list" unless="$(arg use_gazebo)">["robotis/open_manipulator/present_joint_states"] 

    </rosparam>
  </node>


<!-- Open-Manipulator Chain Topic Pub-->
      <node name="open_manipulator_rviz_pub" pkg="open_manipulator_description"   

                                                                                        type="open_manipulator_chain_rviz_pub"/>

  <!-- Open-Manipultor Position controller -->
  <include file="$(find open_manipulator_position_ctrl)/launch/position_ctrl.launch">
          <arg name="use_gazebo" value="$(arg use_gazebo)"/>
  </include>



즉, 원래 moveit 이 만들어 주는 fake joint로 시뮬레이션 하는 부분까지는 동일하고,

그 이후에 open_manipulator_position_ctrl 패키지를 이용해서 다이나믹셀 모터를 제어하고 있는듯 하다


근데 open_manipulator_position_ctrl을 romo.launch에 그대로 가져다 쓰면 실행되지 않고 닫힌다.

이 패키지를 romo에 맞게 수정해야 하는듯 싶다.



<170917> PAN-TILT 예제로 rad와 절대값 사이의 관계 알아보기


(실행) roslaunch my_dynamixel_workbench_tutorial position_control.launch


(실행)rostopic echo /position_control/dynamixel_state

dynamixel_state:
  -
    model_name: EX_106
    id: 1
    torque_enable: 1
    goal_current: 0
    goal_velocity: 0
    goal_position: 1396
    present_current: 0
    present_velocity: 0
    present_position: 1397
    moving: 0
  -
    model_name: MX_64
    id: 2
    torque_enable: 1
    goal_current: 0
    goal_velocity: 0
    goal_position: 1396
    present_current: 0
    present_velocity: 0
    present_position: 1397
    moving: 0


(명령)

rosservice call /joint_command -- [unit] [pan_pos] [tilt_pos]

bluesky@IDEA2017:~$ rosservice call /joint_command -- rad 0.0 0.0
pan_pos: 2048.0
tilt_pos: 2048.0
bluesky@IDEA2017:~$ rosservice call /joint_command -- rad 1.0 1.0
pan_pos: 2699.0
tilt_pos: 2699.0
bluesky@IDEA2017:~$ rosservice call /joint_command -- rad -1.0 -1.0
pan_pos: 1396.0
tilt_pos: 1396.0


모터축을 정면에서 봐라 봤을때 (+)rad 방향이(raw값 증가) 반시계 방향으로 회전

모터 뒤에서 바라보았을때 (-)rad 방향이(raw값 감소) 반시계 방향으로 회전


http://www.rapidtables.com/convert/number/degrees-to-radians.htm

1 pi = 180[도] = 3.141592[rad]

1[도] = 0.017[rad]

1[rad] = 57.3[도]


bluesky@IDEA2017:~$ rosservice call /joint_command -- rad 3.0 3.0

pan_pos: 4002.0
tilt_pos: 4002.0
bluesky@IDEA2017:~$ rosservice call /joint_command -- rad -3.0 -3.0
pan_pos: 92.0
tilt_pos: 92.0


(명령) raw data angle command

bluesky@IDEA2017:~$ rosrun dynamixel_workbench_operators joint_operator raw 100 100
[ INFO] [1505620580.248663119]: [pan_pos: 100.00 (value)] [tilt_pos: 100.00 (value)]


bluesky@IDEA2017:~$ rosrun dynamixel_workbench_operators joint_operator raw 4000 4000
[ INFO] [1505620598.296576452]: [pan_pos: 4000.00 (value)] [tilt_pos: 4000.00 (value)]



rosservice call /joint_command -- raw 4000.0 4000.0


실제 모터가 회전하는 방향에 맞춰서 오른쪽팔(모터 ID 10번대) URDF 를 수정함

romo_arm_moveit.urdf


open_manipulator 예제에서 urdf를 romo로 바꾸면 돌아간다

우측팔 아이디를 1~7로 다시 바꿨다. (원래 11~17 이었음)

이렇게 해서 6번 관절까지 늘리면 open_manipulator에 그대로 덮어써서 할 수도 있을듯 싶다


<170920> open_manipulator 5축 모델을 romo에 맞게 7축으로 늘리는 방법


(1) 기존 open_manipulator URDF를 참고해서 URDF를 ROMO에 맞게 7축으로 모델링 한다

    주의: joint 마다

    <transmission name="tran7">
        <type>transmission_interface/SimpleTransmission</type>
        <joint name="joint7">

         ....


       구문을 추가해야 한다


(2) moveit setup을 실행해서 기존 5축 모델을 7축으로 변경한다


(3) open_manipulator_position_ctrl / src / position_controller.cpp 에서 관절을 추가한다


bool PositionController::initPositionController(void)
{
  joint_id_["joint1"] = 1;
  joint_id_["joint2"] = 2;
  joint_id_["joint3"] = 3;
  joint_id_["joint4"] = 4;
  joint_id_["joint5"] = 5;
  joint_id_["joint6"] = 6;  //그립퍼는 제외한다. 그리퍼는 별도로 있다



(4) MAX_JOINT_NUM define을 찾아서 기존 4에서 6으로 늘려준다

open_manipulator_position_ctrl/include/position_controller.h

open_manipulator_position_ctrl/include/motion_planning_tool.h


(5) MAX_DXL_NUM을 찾아서 기존 5에서 7로 늘려 준다

open_manipulator_dynamixel_ctrl/include/dynamixel_controller.h

#define MAX_DXL_NUM          (7)    //6+1



open_manipulator_chain.srdf 파일에서 zero_pose 중에 joint 4~6이 없어서 기입함


<group_state name="zero_pose" group="arm">
        <joint name="joint1" value="0" />
        <joint name="joint2" value="-1.5708" />
        <joint name="joint3" value="0" />
        <joint name="joint4" value="0" />
        <joint name="joint5" value="0" />
        <joint name="joint6" value="0" />
        <joint name="joint7" value="0" />
    </group_state>


모션 부드럽게 하는 방법 검색


https://www.google.co.kr/search?client=ubuntu&hs=QDs&channel=fs&dcr=0&q=ros+moveit+jerky+smoother&spell=1&sa=X&ved=0ahUKEwiS8vnAzcDWAhVIu7wKHa8zDrMQvwUIISgA&biw=1301&bih=671


https://github.com/ros-planning/moveit/issues/416



https://github.com/ros-planning/moveit/issues/160



https://github.com/ros-planning/moveit_tutorials/pull/50/files


팔 두개 모델링?

https://github.com/ros-planning/moveit_core/issues/167


https://github.com/pal-robotics/reem_moveit_config


<170927> 팔이 너무 빨리 움직이는거 해결


planning 시간은 잘 못 가져오는듯 하다

ros::duration 이 시간 클래스는 맞는데..

motion_controller.cpp 에서

motionPlanningTool_->time_from_start_ = motionPlanningTool_->moveit_msg_.trajectory[_tra_index].joint_trajectory.points[_point_index].time_from_start;
     

함수값을 읽어보면 모두 동일하다.

ROS_INFO("motionPlanningTool_->time_from_start_ %d,%d,%d",_tra_index,_point_index, motionPlanningTool_->time_from_start_  );



[ INFO] [1506523074.226641680]: motionPlanningTool_->points_ 23
[ INFO] [1506523074.226686280]: motionPlanningTool_->time_from_start_ 0,0,18167348
[ INFO] [1506523074.226704732]: motionPlanningTool_->time_from_start_ 0,1,18167348
[ INFO] [1506523074.226723281]: motionPlanningTool_->time_from_start_ 0,2,18167348
[ INFO] [1506523074.226735697]: motionPlanningTool_->time_from_start_ 0,3,18167348
[ INFO] [1506523074.226749105]: motionPlanningTool_->time_from_start_ 0,4,18167348
[ INFO] [1506523074.226761286]: motionPlanningTool_->time_from_start_ 0,5,18167348
[ INFO] [1506523074.226773396]: motionPlanningTool_->time_from_start_ 0,6,18167348
[ INFO] [1506523074.226785781]: motionPlanningTool_->time_from_start_ 0,7,18167348
[ INFO] [1506523074.226798501]: motionPlanningTool_->time_from_start_ 0,8,18167348
[ INFO] [1506523074.226812322]: motionPlanningTool_->time_from_start_ 0,9,18167348
[ INFO] [1506523074.226824717]: motionPlanningTool_->time_from_start_ 0,10,18167348
[ INFO] [1506523074.226837033]: motionPlanningTool_->time_from_start_ 0,11,18167348
[ INFO] [1506523074.226849329]: motionPlanningTool_->time_from_start_ 0,12,18167348
[ INFO] [1506523074.226860496]: motionPlanningTool_->time_from_start_ 0,13,18167348
[ INFO] [1506523074.226872503]: motionPlanningTool_->time_from_start_ 0,14,18167348
[ INFO] [1506523074.226883829]: motionPlanningTool_->time_from_start_ 0,15,18167348
[ INFO] [1506523074.226895576]: motionPlanningTool_->time_from_start_ 0,16,18167348
[ INFO] [1506523074.226910779]: motionPlanningTool_->time_from_start_ 0,17,18167348
[ INFO] [1506523074.226925560]: motionPlanningTool_->time_from_start_ 0,18,18167348
[ INFO] [1506523074.226936986]: motionPlanningTool_->time_from_start_ 0,19,18167348
[ INFO] [1506523074.226948453]: motionPlanningTool_->time_from_start_ 0,20,18167348
[ INFO] [1506523074.226969602]: motionPlanningTool_->time_from_start_ 0,21,18167348
[ INFO] [1506523074.226984802]: motionPlanningTool_->time_from_start_ 0,22,18167348
[ INFO] [1506523074.227000095]: 22 motionPlanningTool_->time_from_start_.toSec() 4891275



하지만 토픽을 직접 읽어보면 time_from_start 값이 증가하는걸 볼 수 있다

rostopic echo /move_group/display_planned_path/trajectory[0]/joint_trajectory
header:
  seq: 0
  stamp:
    secs: 0
    nsecs:         0
  frame_id: /world
joint_names: ['joint1', 'joint2', 'joint3', 'joint4', 'joint5', 'joint6']
points:
  -
    positions: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    velocities: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    accelerations: [-3.8022737011370578e-06, 0.0, 0.0, 0.0, 0.0, 0.0]
    effort: []
    time_from_start:
      secs: 0
      nsecs:         0
  -
    positions: [-0.1315002651835602, -0.0057992475432322626, -0.010564676138417146, 0.0099996833613175, 0.06929653852488736, -0.035217702296038544]
    velocities: [-0.0005, -2.2050326420015723e-05, -4.016979024213372e-05, 3.802153306443535e-05, 0.0002634844060130102, -0.00013390734325470152]
    accelerations: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
    effort: []
    time_from_start:
      secs: 263
      nsecs:    530367
  -
    positions: [-0.2630005303671204, -0.011598495086464525, -0.021129352276834292, 0.019999366722635, 0.13859307704977472, -0.07043540459207709]
    velocities: [-0.0005, -2.2050326420015723e-05, -4.016979024213371e-05, 3.802153306443535e-05, 0.00026348440601301013, -0.00013390734325470152]
    accelerations: [0.0, 0.0, 7.729562638419933e-23, 0.0, -6.183650110735946e-22, 1.0306083517893243e-22]
    effort: []
    time_from_start:
      secs: 526
      nsecs:   1060734
  -
    positions: [-0.3945007955506806, -0.01739774262969679, -0.031694028415251436, 0.029999050083952504, 0.20788961557466207, -0.10565310688811563]
    velocities: [-0.0005, -2.2050326420015726e-05, -4.016979024213372e-05, 3.802153306443535e-05, 0.00026348440601301013, -0.00013390734325470152]
    accelerations: [0.0, -1.2882604397366554e-23, -1.2882604397366556e-22, 0.0, 1.0306083517893244e-21, -2.0612167035786486e-22]
    effort: []
    time_from_start:
      secs: 789
      nsecs:   1591101
  -
    positions: [-0.5260010607342408, -0.02319699017292905, -0.042258704553668584, 0.03999873344527, 0.27718615409954944, -0.14087080918415418]
    velocities: [-0.0005, -2.2050326420015716e-05, -4.016979024213371e-05, 3.802153306443535e-05, 0.00026348440601301, -0.0001339073432547015]
    accelerations: [0.0, 7.72956263841993e-23, 2.3188687915259794e-22, -2.5765208794733105e-23, -1.8550950332207835e-21, 4.1224334071572968e-22]
    effort: []
    time_from_start:
      secs: 1052
      nsecs:   2121468


혹시 샘플 코드에서 time_from_start 값을 받아오는 변수 형이 틀려서 그런가 싶어서

motion_planning_tool.h 에 정의된

ros::Duration time_from_start_; // planned movement time

값을 찾았고, duration type을 찾아보니


http://docs.ros.org/diamondback/api/rostime/html/classros_1_1Duration.html

이렇게 되어 있었고


실제 move_group 이 보내는 time_from_start도 type은 duration 이었다.


http://docs.ros.org/jade/api/trajectory_msgs/html/msg/JointTrajectoryPoint.html


toSec 메소드가 값을 동일하게 보여줘서 그런가? 찾아봤더니


http://docs.ros.org/diamondback/api/rostime/html/duration_8h_source.html

 double toSec() const { return (double)sec + 1e-9*(double)nsec; };

이렇게 변환하던데


toSec을 쓰면 안된다. 이상하게 toSec으로 변환된 값이 모두 같아 진다 @_@

이거 쓰지 말고 그냥  sec 멤버를 직접 읽는게 방법임


그리고 다이나믹셀의 목표속도를 70 으로 낮춰서 동작시켜야 급속한 움직임을 막을수 있다.

원래 planning 속도 프로파일 자체가 낮은 속도로 되야 하는데, 이상하게 그게 안된다.

그냥 강제로 다이나믹셀의 속도를 낮춰서 일단 임시 대응한다.


<170928> 현재 open_manipulator 폴더 압축해서 업로드

                   (용량큰 Arduino _gazebo, _with_tb3 폴더는 제외)

open_manipulator 폴더를 만들고 그 밑에서 압축을 해제해야 한다


open_manipulator.tar.gz

dynamixel-workbench.tar.gz



<170930> 프로그램 시작할 때 모터속도를 느리게 세팅


moving speed 설정 함수는 dynamixel_multi_driver.cpp 에 이미 정의되어 있었음

이걸 이용해서 dynamixel_controller.cpp 에서 명령을 보내면 됨


수정된 코드 업로드 :

open_manipulator_dynamixel_ctrl.tar.gz

open_manipulator 폴더 밑에 있는 open_manipulator_dynamixel_ctrl 폴더를 덮어쓰면 됨


@dunamixel_controller.h

typedef struct
{
  std::vector<uint8_t>  torque;
  std::vector<uint32_t> pos;
  std::vector<uint16_t> spd;  //add by orasman 170930 //caution: speed declared as uint16 @dynamixel_multi_driver.h
}WriteValue;


@dynamixel_controller.cpp

DynamixelController::DynamixelController(){  //생성자 함수에서 속도값 세팅

....


/added by orasman 170930 모터 동작속도를 낮게 설정
  //caution: speed declared as uint16 @dynamixel_multi_driver.h
  uint16_t default_moving_speed[MAX_DXL_NUM] = {70,70,70,70,70,70,170};

  if (!setMovingSpeed(default_moving_speed) )
    ROS_ERROR("Init SyncRead Failed!");
  else
    ROS_INFO("dynamixel moving speed set succeeded");


...

}


/////////////////////////////////////////
// added by orasman 170930
bool DynamixelController::setMovingSpeed(uint16_t* spd)  //caution: speed declared as uint16 @dynamixel_multi_driver.h
{
  writeValue_->spd.clear();

  for (int id = 1; id <= MAX_DXL_NUM; id++)
  {
    writeValue_->spd.push_back(spd[id-1]);
  }

  if (!multi_driver_->syncWriteMovingSpeed(writeValue_->spd))
  {
    ROS_ERROR("SyncWrite MovingSpeed Failed!");
    return false;
  }

  return true;
}


<EX-106 실제 회전각도와 인식한 각도가 맞지 않는 문제 해결>


수정한 코드 업로드

EX_106.device


position_controller.h

position_controller.cpp




기존 샘플코드는 EX-106의 경우 value2Radian 변환이 맞지 않는다

즉, 90도를 돌리면 ROS에서 인식한 radian 값이 2.21 정도로 크다 (원래 90도는 1.62rad)


원인은 두가지

dynamixelMultiDriver 에서 dynamixelTool 클래스를 이용해서 모터 정보를 관리하는데

loadDynamixel()할때 모터쪽으로 ping을해서 모터id 와 종류를 받아온다

그래서 multi_dynamixel_[] array 멤버변수에 모터별 특징을 저장하는데

ping을 통해 읽어온 모터 종류번호에 따라 모터 특성이 적혀있는 DB 파일이

EX106,MX106 값이 똑같은게 문제 였음

EX106의 경우 LSB 1비트당 각도가 0.06도이고 최대 회전각도도 0~250.92도 이다

결국 2048을 0rad로 정했으므로 2048은 2.14466058rad 이므로

EX106의 회전 범위는 -2.14466058 ~ +2.14466058 이 되야 한다.

따라서

dynamixel_workbench_toolbox/dynamixel/models/EX/EX_106.device 파일을 수정해야 한다


[device info]
model_number = 107
model_name  = EX_106

[type info]
velocity_to_value_ratio     = 86.03

value_of_0_radian_position      = 2048
value_of_min_radian_position    = 0
value_of_max_radian_position    = 4095
min_radian                      = -2.14466058
max_radian                      =  2.14466058



두번째 원인은

open_manipulator_dunamixel_ctrl 에서

convertValue2Radian 변환 함수에서 모터별 특징을 무시하고 동일하게 계산하는게 문제다

모터 종류별로 min,max rad가 다르므로 모터종류를 받아서 각각 다르게 계산하도록 함수를 수정한다

dynamixel_position.position.push_back(convertValue2Radian( (id-1), (int32_t)   multi_driver_->read_value_["present_position"]->at(id-1)     ));


float DynamixelController::convertValue2Radian(int id, int32_t value)
{
  float radian = 0.0;

  if (value > multi_driver_->multi_dynamixel_[id]->value_of_0_radian_position_)
  {
    if (multi_driver_->multi_dynamixel_[id]->max_radian_ <= 0)
      return multi_driver_->multi_dynamixel_[id]->max_radian_;

    radian = (float) (value - multi_driver_->multi_dynamixel_[id]->value_of_0_radian_position_) * multi_driver_->multi_dynamixel_[id]->max_radian_
               / (float) (multi_driver_->multi_dynamixel_[id]->value_of_max_radian_position_ - multi_driver_->multi_dynamixel_[id]->value_of_0_radian_position_);
  }
  else if (value < multi_driver_->multi_dynamixel_[id]->value_of_0_radian_position_)
  {
    if (multi_driver_->multi_dynamixel_[id]->min_radian_ >= 0)
      return multi_driver_->multi_dynamixel_[id]->min_radian_;

    radian = (float) (value - multi_driver_->multi_dynamixel_[id]->value_of_0_radian_position_) * multi_driver_->multi_dynamixel_[id]->min_radian_
               / (float) (multi_driver_->multi_dynamixel_[id]->value_of_min_radian_position_ - multi_driver_->multi_dynamixel_[id]->value_of_0_radian_position_);
  }

  return radian;
}


<MoveIt GUI 없이 로봇팔 괘적 생성하기>


MoveGroupInterface 를 이용해서 moveit을 제어할 수 있다.


http://docs.ros.org/kinetic/api/moveit_tutorials/html/doc/pr2_tutorials/planning/src/doc/move_group_interface_tutorial.html


튜토리얼 코드중에 진짜 로봇을 움직이려면 .move() 함수를 쓰라고 나오는데


  /* Uncomment below line when working with a real robot */
  /* move_group.move() */


찾아보니 이 API가 PLAN&EXECUTE 버튼과 같다고 한다.


https://github.com/ros-planning/moveit_tutorials/issues/75


ㅇㅇㅇ


<171003>

kinect가 publish 하는 관절 정보 받는 방법

http://wiki.ros.org/tf/Tutorials/Writing%20a%20tf%20listener%20%28C%2B%2B%29


멀티로봇 tf

http://wiki.ros.org/geometry/CoordinateFrameConventions#Transform_Direction


두개의 Origin 에서 기울기 구하는 법을 찾아야 한다. 궁극적으로 Pose가 나와야 한다


https://answers.ros.org/question/10323/from-posestamped-message-to-tf-stampedtransform/


http://docs.ros.org/api/tf/html/c++/transform__datatypes_8h.html


pose 객체는 point와 quaternion 으로 이루어짐

http://docs.ros.org/api/geometry_msgs/html/msg/Pose.html


transformDATAtype method

http://wiki.ros.org/tf/Overview/Using%20Published%20Transforms

http://docs.ros.org/diamondback/api/tf/html/c++/transform__datatypes_8h_source.html


tf::Quarternion class reference

http://docs.ros.org/jade/api/tf/html/c++/classtf_1_1Quaternion.html



<setFromTwoVectors>


https://www.dartdocs.org/documentation/vector_math/1.4.7/vector_math/Quaternion/setFromTwoVectors.html


https://www.dartdocs.org/documentation/vector_math/1.4.7/vector_math/Vector3-class.html


https://www.dartdocs.org/documentation/vector_math/1.4.7/vector_math/Vector3/Vector3.html



eigen 라이브러리를 이용해서 vector3f 를 만들고 이걸로부터 setFromTwoVectors 를 계산하려고..

https://eigen.tuxfamily.org/dox/group__matrixtypedefs.html#ga5ec9ce2d8adbcd6888f3fbf2e1c095a4



두개의 점이 있는게 아니었다

transform 은 두개의 frame 사이의 변환을 의미한다

즉 origin 이 xyz 떨어진 좌표를 나타내고 rotation이 좌표축의 회전값을 나타내는데,

origin을 방향 벡터로 봐서 이걸로 direction을 구해야 한다


이게제일 유사한데 파이선 코드라서 C++을 찾아야 한다

벡터 한점을 회전으로 변환하는 프로그램

https://answers.ros.org/question/228896/quaternion-of-a-3d-vector/


TF 공부하기

http://wiki.ros.org/tf

<171006> 

팔길이는 스케일, 오프셋 줘서 대략 맞췄는데,손 방향이 맞지 않아서 고민

팔꿈치~팔 의 방향을 기준으로 Rotation을 만들어야 함

구글링 키워드 : quaternion between two vectors

https://stackoverflow.com/questions/1171849/finding-quaternion-representing-the-rotation-from-one-vector-to-another


이게 원리고 이걸 쉽게 해주는 함수가 있었다!!

https://stackoverflow.com/questions/15043130/rotation-matrix-in-eigen


이걸 시험삼아 돌려보니 기준벡터에 정한 방향에 맞춰서 두번째 벡터에 연장선에 회전값이 생긴다


quaternion에서 롤피요 앵글 얻는 방법

https://answers.ros.org/question/238083/how-to-get-yaw-from-quaternion-values/


두 벡터 사이의 roll pitch yaw 앵글 구하는 방법

https://stackoverflow.com/questions/39664701/how-to-get-the-angle-pitch-yaw-between-two-3d-vectors-for-an-autoaim


==>이건 한 element가 0이라서 계산이 안되더라


<171007> 키보드로 실행모드를 지정해주기 (ROMO_MOTOR_ACTIVE 등)

키보드 입력 받는 방법

https://answers.ros.org/question/63491/keyboard-key-pressed/


turtlesim teleop key code 원본 참고

http://docs.ros.org/groovy/api/turtlesim/html/teleop__turtle__key_8cpp_source.html


https://github.com/ros/ros_tutorials/blob/lunar-devel/turtlesim/tutorials/teleop_turtle_key.cpp


토픽으로 메세지 송수신 하는 예제에서 메세지로부터 생성되는 헤더파일은

~/catkin_ws/dev/include/packagename/messagename.h 에 생긴다


ROS message service 생성하는 방법

http://wiki.ros.org/ROS/Tutorials/CreatingMsgAndSrv#Common_step_for_msg_and_srv


<171014>

키넥트로는 손목 각도를 알 수 없어서 moveit에 pose값을 전달할때 손목 각도를 임의로 생성하다 보니

inverse kinematics를 잘 풀지 못하는 경우가 많았다.


myAHRS+ 센서를 구입해서 손목에 장착하면 실제 손목 각도를 측정해서 moveit에 전달할 수 있기때문에

좀더 인간의 자세와 동일한 팔의 모양을 만들 수 있겠다.


https://github.com/robotpilot/myahrs_driver


에 공개된 myAHRS driver를 사용해서 센서값을 읽었다.

왼손 오른손 두개 사용해야 하는데, ttyACM0, ttyACM1 포트만 다르게 한 뒤 노드를 두개 실행하면

두개의 센서값을 읽을 수는 있는데, topic 이름이 동일해서 구별이 안된다.

공개된 소스코드를 복사해서 똑같이 만들고 topic 이름을 다르게 해서 컴파일하고

각각의 노드를 실행하면 왼손, 오른손 각각 다른 이름의 토픽을 publish 하므로 이 값을 이용할 수 있다.


myahrs_driver.tar.gz


소스코드 업로드


센서는 준비 됐고, 이걸 kinect 가 publish 하는 pose 토픽중 orientation 값으로 변환해서 publish 하면

실제 손의 각도를 표현 할 수 있을것 같다.


kinect 좌표계는 손끝(+z축) 손등(+x축) 손날(+y축) 이므로 myAHRS+ 좌표를 이것에 맞도록 손에 부착하거나

손에 myAHRS+를 편하게 부착한 뒤 좌표계를 kinect 손 모양에 맞도록 변환해 줘야 한다.



IK 를 바로 푸는 예제

라이브러리는 moveit 설치할때 이미 설치되므로 예제만 돌리면 된다.

http://www.orocos.org/kdl/examples


Posted by orasman
카테고리 없음2017. 8. 16. 00:17

~/NiTE-Linux-x64-2.2/Sample/Bin/ 에 있는 예제들도 처음에는 "장치를 못찾는다"고 에러가 나다가

OpenNI2/Drivers 에 libfreenect2-openni2.so, libfreenect2-openni2.so.0  두파일을 복사하면 동작한다


NiTE 에 샘플 폴더에 있는 UserViewer.cpp 의 내용과 kinect2_tracker 코드 내용이 동일한데 장치를 못 찾는다고 나온다


libfreenect2-openni2.so 파일이 없는게 문제인듯 하다


/opt/ros/kinetic/lib/ 에 관련 so 파일을 복사했으나 에러는 동일했다

복사한 파일 4개

libNiTE2.so/ jni.so

libfreenect2-openni2.so / so.0


https://github.com/mcgi5sr2/kinect2_tracker 설명에 보면

/usr/lib 에 libOpenNI2.so 를 복사하라고 되어 있는데

이미 파일이 존재하고 있었다


/usr/lib 에 있는 파일은 libOpenNI2.so.0를 심볼릭 링크로 libOpenNI2.so로 만들었다

파일 크기는 261.2KB


인터넷에서 OpenNI2.2 를 다운받았다

~/Download/OpenNI-Linux-x64-2.2/Redist/

에 보면 libOpenNI2.so(476.5kB), libOpenNI2.jni.so(46.3kB)  

가 있어서 이걸 /usr/lib 에 복사하면 kinect2_tracker 실행과정에 shared object 를 못찾는다고 에러가 난다


https://github.com/OpenKinect/libfreenect2/

여기에 나온 설치 순서중에 OpenNI2 를 설치하도록 되어 있다.

이건 동작은 하는데..

옵션이라고 씌여 있다..

이걸 빼고 설치해야 하나?

sudo apt-get install libopenni2-dev


해결책 :

/usr/lib/OpenNI2/Drivers/ 폴더에 libfreenect2-openni2.so / so.0 파일 두개를 복사하면 된다


ㅁㅁ


더 연구해볼 링크들

https://github.com/mcgi5sr2/kinect2_tracker


http://wiki.ros.org/openni_tracker


유경호책임님 위키 - 노트북 부팅시 ros launch 자동실행

https://github.com/james-yoo/G_ROBO/wiki

Posted by orasman
카테고리 없음2017. 8. 13. 11:55

Tx2 보드 자동 부팅 방법

전원 JACK 근처에 있는 J27 커넥터에서 J 글자 밑에 있는 저항 패드(R313)를 쇼트 시킴

https://devtalk.nvidia.com/default/topic/999406/auto-power-on-implementation-based-on-oem-product-design-guide/?offset=3


사전설치

https://github.com/OpenKinect/libfreenect2/


Kinetic v2 library

https://github.com/mcgi5sr2/kinect2_tracker


설치된 우분투 버전 확인 : $ cat /etc/issue


git clone https://github.com/OpenKinect/libfreenect2.git
cd libfreenect2


nvidia@tegra-ubuntu:~$ git clone https://github.com/OpenKinect/libfreenect2.git

Cloning into 'libfreenect2'...

remote: Counting objects: 4734, done.

remote: Total 4734 (delta 0), reused 0 (delta 0), pack-reused 4734

Receiving objects: 100% (4734/4734), 3.01 MiB | 620.00 KiB/s, done.

Resolving deltas: 100% (3036/3036), done.

Checking connectivity... done.




nvidia@tegra-ubuntu:~/libfreenect2$ sudo apt-get install build-essential cmake pkg-config

[sudo] password for nvidia: 

Reading package lists... Done

Building dependency tree       

Reading state information... Done

build-essential is already the newest version (12.1ubuntu2).

pkg-config is already the newest version (0.29.1-0ubuntu1).

cmake is already the newest version (3.5.1-1ubuntu3).

The following packages were automatically installed and are no longer required:

  fonts-opensymbol fonts-stix libabw-0.1-1v5 libcdr-0.1-1

  libclucene-contribs1v5 libclucene-core1v5 libcmis-0.5-5v5 libcolamd2.9.1

  libe-book-0.1-1 libeot0 libetonyek-0.1-1 libexttextcat-2.0-0

  libexttextcat-data libfreehand-0.1-1 liblangtag-common liblangtag1 libmhash2

  libmspub-0.1-1 libmwaw-0.3-3 libmythes-1.2-0 libneon27-gnutls

  libodfgen-0.1-1 liborcus-0.10-0v5 libpagemaker-0.0-0 libraptor2-0 librasqal3

  librdf0 librevenge-0.0-0 libsuitesparseconfig4.4.6 libvisio-0.1-1

  libwpd-0.10-10 libwpg-0.3-3 libwps-0.4-4 libyajl2 lp-solve uno-libs3 ure

Use 'sudo apt autoremove' to remove them.

0 upgraded, 0 newly installed, 0 to remove and 271 not upgraded.






nvidia@tegra-ubuntu:~/libfreenect2$ sudo apt-get install libusb-1.0-0-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  fonts-opensymbol fonts-stix libabw-0.1-1v5 libcdr-0.1-1
  libclucene-contribs1v5 libclucene-core1v5 libcmis-0.5-5v5 libcolamd2.9.1
  libe-book-0.1-1 libeot0 libetonyek-0.1-1 libexttextcat-2.0-0
  libexttextcat-data libfreehand-0.1-1 liblangtag-common liblangtag1 libmhash2
  libmspub-0.1-1 libmwaw-0.3-3 libmythes-1.2-0 libneon27-gnutls
  libodfgen-0.1-1 liborcus-0.10-0v5 libpagemaker-0.0-0 libraptor2-0 librasqal3
  librdf0 librevenge-0.0-0 libsuitesparseconfig4.4.6 libvisio-0.1-1
  libwpd-0.10-10 libwpg-0.3-3 libwps-0.4-4 libyajl2 lp-solve uno-libs3 ure
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
  libusb-1.0-doc
The following NEW packages will be installed:
  libusb-1.0-0-dev libusb-1.0-doc
0 upgraded, 2 newly installed, 0 to remove and 271 not upgraded.
Need to get 216 kB of archives.
After this operation, 1,681 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://ports.ubuntu.com/ubuntu-ports xenial/main arm64 libusb-1.0-0-dev arm64 2:1.0.20-1 [55.4 kB]
Get:2 http://ports.ubuntu.com/ubuntu-ports xenial/main arm64 libusb-1.0-doc all 2:1.0.20-1 [160 kB]
Fetched 216 kB in 5s (39.0 kB/s)        
Selecting previously unselected package libusb-1.0-0-dev:arm64.
(Reading database ... 220991 files and directories currently installed.)
Preparing to unpack .../libusb-1.0-0-dev_2%3a1.0.20-1_arm64.deb ...
Unpacking libusb-1.0-0-dev:arm64 (2:1.0.20-1) ...
Selecting previously unselected package libusb-1.0-doc.
Preparing to unpack .../libusb-1.0-doc_2%3a1.0.20-1_all.deb ...
Unpacking libusb-1.0-doc (2:1.0.20-1) ...
Processing triggers for doc-base (0.10.7) ...
Processing 1 added doc-base file...
Setting up libusb-1.0-0-dev:arm64 (2:1.0.20-1) ...
Setting up libusb-1.0-doc (2:1.0.20-1) ...




nvidia@tegra-ubuntu:~/libfreenect2$ sudo apt-get install libturbojpeg libjpeg-turbo8-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
libjpeg-turbo8-dev is already the newest version (1.4.2-0ubuntu3).
libjpeg-turbo8-dev set to manually installed.
libturbojpeg is already the newest version (1.4.2-0ubuntu3).
The following packages were automatically installed and are no longer required:
  fonts-opensymbol fonts-stix libabw-0.1-1v5 libcdr-0.1-1 libclucene-contribs1v5 libclucene-core1v5 libcmis-0.5-5v5
  libcolamd2.9.1 libe-book-0.1-1 libeot0 libetonyek-0.1-1 libexttextcat-2.0-0 libexttextcat-data libfreehand-0.1-1
  liblangtag-common liblangtag1 libmhash2 libmspub-0.1-1 libmwaw-0.3-3 libmythes-1.2-0 libneon27-gnutls
  libodfgen-0.1-1 liborcus-0.10-0v5 libpagemaker-0.0-0 libraptor2-0 librasqal3 librdf0 librevenge-0.0-0
  libsuitesparseconfig4.4.6 libvisio-0.1-1 libwpd-0.10-10 libwpg-0.3-3 libwps-0.4-4 libyajl2 lp-solve uno-libs3 ure
Use 'sudo apt autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 271 not upgraded.




nvidia@tegra-ubuntu:~/libfreenect2$ sudo apt-get install libglfw3-dev
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages were automatically installed and are no longer required:
  fonts-opensymbol fonts-stix libabw-0.1-1v5 libcdr-0.1-1 libclucene-contribs1v5 libclucene-core1v5 libcmis-0.5-5v5
  libcolamd2.9.1 libe-book-0.1-1 libeot0 libetonyek-0.1-1 libexttextcat-2.0-0 libexttextcat-data libfreehand-0.1-1
  liblangtag-common liblangtag1 libmhash2 libmspub-0.1-1 libmwaw-0.3-3 libmythes-1.2-0 libneon27-gnutls
  libodfgen-0.1-1 liborcus-0.10-0v5 libpagemaker-0.0-0 libraptor2-0 librasqal3 librdf0 librevenge-0.0-0
  libsuitesparseconfig4.4.6 libvisio-0.1-1 libwpd-0.10-10 libwpg-0.3-3 libwps-0.4-4 libyajl2 lp-solve uno-libs3 ure
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
  libglfw3
The following NEW packages will be installed:
  libglfw3 libglfw3-dev
0 upgraded, 2 newly installed, 0 to remove and 271 not upgraded.
Need to get 59.6 kB of archives.
After this operation, 261 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://ports.ubuntu.com/ubuntu-ports xenial/universe arm64 libglfw3 arm64 3.1.2-3 [33.3 kB]
Get:2 http://ports.ubuntu.com/ubuntu-ports xenial/universe arm64 libglfw3-dev arm64 3.1.2-3 [26.3 kB]                 
Fetched 59.6 kB in 8s (6,801 B/s)                                                                                     
Selecting previously unselected package libglfw3:arm64.
(Reading database ... 221073 files and directories currently installed.)
Preparing to unpack .../libglfw3_3.1.2-3_arm64.deb ...
Unpacking libglfw3:arm64 (3.1.2-3) ...
Selecting previously unselected package libglfw3-dev:arm64.
Preparing to unpack .../libglfw3-dev_3.1.2-3_arm64.deb ...
Unpacking libglfw3-dev:arm64 (3.1.2-3) ...
Processing triggers for libc-bin (2.23-0ubuntu9) ...
Setting up libglfw3:arm64 (3.1.2-3) ...
Setting up libglfw3-dev:arm64 (3.1.2-3) ...
Processing triggers for libc-bin (2.23-0ubuntu9) ...






nvidia@tegra-ubuntu:~/libfreenect2$ mkdir build && cd build
nvidia@tegra-ubuntu:~/libfreenect2/build$ cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/freenect2
-- The C compiler identification is GNU 5.4.0
-- The CXX compiler identification is GNU 5.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- using tinythread as threading library
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1") 
-- Checking for module 'libusb-1.0>=1.0.20'
--   Found libusb-1.0, version 1.0.20
-- Checking for modules 'libva;libva-drm'
--   No package 'libva' found
--   No package 'libva-drm' found
-- Found JPEG: /usr/lib/aarch64-linux-gnu/libjpeg.so  
-- Found Linux4Tegra 28.1.0
CMake Warning at cmake_modules/FindTegraJPEG.cmake:53 (MESSAGE):
  Linux4Tegra version (28.1.0) is not recognized.  Add the new source URL
  part to FindTegraJPEG.cmake.
Call Stack (most recent call first):
  CMakeLists.txt:217 (FIND_PACKAGE)


-- Could NOT find TegraJPEG (missing:  TegraJPEG_INCLUDE_DIRS TegraJPEG_L4T_OK TegraJPEG_WORKS) 
-- Performing Test TURBOJPEG_WORKS
-- Performing Test TURBOJPEG_WORKS - Success
-- Found TurboJPEG: /usr/lib/aarch64-linux-gnu/libturbojpeg.so.0  
-- Checking for module 'glfw3'
--   Found glfw3, version 3.1.2
-- Found OpenGL: /usr/lib/aarch64-linux-gnu/libGL.so  
-- Looking for CL_VERSION_2_0
-- Looking for CL_VERSION_2_0 - not found
-- Looking for CL_VERSION_1_2
-- Looking for CL_VERSION_1_2 - not found
-- Looking for CL_VERSION_1_1
-- Looking for CL_VERSION_1_1 - not found
-- Looking for CL_VERSION_1_0
-- Looking for CL_VERSION_1_0 - not found
-- Could NOT find OpenCL (missing:  OpenCL_LIBRARY OpenCL_INCLUDE_DIR) 
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE  
-- Found CUDA: /usr/local/cuda (found version "8.0") 
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY - Success
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY - Success
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR - Success
-- Linking with these libraries: 
 /usr/lib/aarch64-linux-gnu/libusb-1.0.so
 pthread
 /usr/lib/aarch64-linux-gnu/libturbojpeg.so.0
 /usr/lib/aarch64-linux-gnu/libglfw.so
 /usr/lib/aarch64-linux-gnu/libGL.so
 /usr/local/cuda/lib64/libcudart_static.a
 -lpthread
 dl
 /usr/lib/aarch64-linux-gnu/librt.so
-- Could NOT find Doxygen (missing:  DOXYGEN_EXECUTABLE) 
-- Configurating examples
-- Using in-tree freenect2 target
-- Checking for module 'libopenni2'
--   No package 'libopenni2' found
-- Could NOT find OpenNI2 (missing:  OpenNI2_LIBRARY_DIR OpenNI2_INCLUDE_DIRS) 
-- Feature list:
--   CUDA    yes
--   CXX11    disabled
--   Examples    yes
--   OpenCL    no
--   OpenGL    yes
--   OpenNI2    no
--   TegraJPEG    no
--   Threading    tinythread
--   TurboJPEG    yes
--   VAAPI    no
--   VideoToolbox    no (Apple only)
-- Configuring done
-- Generating done
-- Build files have been written to: /home/nvidia/libfreenect2/build







nvidia@tegra-ubuntu:~/libfreenect2/build$ make

Scanning dependencies of target generate_resources_tool

[  3%] Building CXX object CMakeFiles/generate_resources_tool.dir/tools/generate_resources.cpp.o

[  6%] Linking CXX executable bin/generate_resources_tool

[  6%] Built target generate_resources_tool

[ 10%] Building NVCC (Device) object CMakeFiles/cuda_compile.dir/src/cuda_compile_generated_cuda_kde_depth_packet_processor.cu.o

nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning).

nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning).

/home/nvidia/libfreenect2/src/cuda_kde_depth_packet_processor.cu(413): warning: function "calculatePhaseUnwrappingVarDirect" was declared but never referenced


/home/nvidia/libfreenect2/src/cuda_kde_depth_packet_processor.cu(413): warning: function "calculatePhaseUnwrappingVarDirect" was declared but never referenced


[ 13%] Generating resources.inc.h

[ 16%] Building NVCC (Device) object CMakeFiles/cuda_compile.dir/src/cuda_compile_generated_cuda_depth_packet_processor.cu.o

nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning).

nvcc warning : The 'compute_20', 'sm_20', and 'sm_21' architectures are deprecated, and may be removed in a future release (Use -Wno-deprecated-gpu-targets to suppress warning).

Scanning dependencies of target freenect2

[ 20%] Building CXX object CMakeFiles/freenect2.dir/src/transfer_pool.cpp.o

[ 23%] Building CXX object CMakeFiles/freenect2.dir/src/event_loop.cpp.o

[ 26%] Building CXX object CMakeFiles/freenect2.dir/src/usb_control.cpp.o

[ 30%] Building CXX object CMakeFiles/freenect2.dir/src/allocator.cpp.o

[ 33%] Building CXX object CMakeFiles/freenect2.dir/src/frame_listener_impl.cpp.o

[ 36%] Building CXX object CMakeFiles/freenect2.dir/src/packet_pipeline.cpp.o

[ 40%] Building CXX object CMakeFiles/freenect2.dir/src/rgb_packet_stream_parser.cpp.o

[ 43%] Building CXX object CMakeFiles/freenect2.dir/src/rgb_packet_processor.cpp.o

[ 46%] Building CXX object CMakeFiles/freenect2.dir/src/depth_packet_stream_parser.cpp.o

[ 50%] Building CXX object CMakeFiles/freenect2.dir/src/depth_packet_processor.cpp.o

[ 53%] Building CXX object CMakeFiles/freenect2.dir/src/cpu_depth_packet_processor.cpp.o

[ 56%] Building CXX object CMakeFiles/freenect2.dir/src/resource.cpp.o

[ 60%] Building CXX object CMakeFiles/freenect2.dir/src/command_transaction.cpp.o

[ 63%] Building CXX object CMakeFiles/freenect2.dir/src/registration.cpp.o

[ 66%] Building CXX object CMakeFiles/freenect2.dir/src/logging.cpp.o

[ 70%] Building CXX object CMakeFiles/freenect2.dir/src/libfreenect2.cpp.o

[ 73%] Building CXX object CMakeFiles/freenect2.dir/src/tinythread/tinythread.cpp.o

[ 76%] Building CXX object CMakeFiles/freenect2.dir/src/turbo_jpeg_rgb_packet_processor.cpp.o

[ 80%] Building CXX object CMakeFiles/freenect2.dir/src/flextGL.cpp.o

[ 83%] Building CXX object CMakeFiles/freenect2.dir/src/opengl_depth_packet_processor.cpp.o

[ 86%] Linking CXX shared library lib/libfreenect2.so

[ 86%] Built target freenect2

Scanning dependencies of target Protonect

[ 90%] Building CXX object examples/CMakeFiles/Protonect.dir/Protonect.cpp.o

[ 93%] Building CXX object examples/CMakeFiles/Protonect.dir/viewer.cpp.o

[ 96%] Building CXX object examples/CMakeFiles/Protonect.dir/__/src/flextGL.cpp.o

[100%] Linking CXX executable ../bin/Protonect

[100%] Built target Protonect






nvidia@tegra-ubuntu:~/libfreenect2/build$ make install
-- using tinythread as threading library
-- Checking for modules 'libva;libva-drm'
--   No package 'libva' found
--   No package 'libva-drm' found
-- Found Linux4Tegra 28.1.0
CMake Warning at cmake_modules/FindTegraJPEG.cmake:53 (MESSAGE):
  Linux4Tegra version (28.1.0) is not recognized.  Add the new source URL
  part to FindTegraJPEG.cmake.
Call Stack (most recent call first):
  CMakeLists.txt:217 (FIND_PACKAGE)


-- Could NOT find TegraJPEG (missing:  TegraJPEG_INCLUDE_DIRS TegraJPEG_L4T_OK TegraJPEG_WORKS) 
-- Could NOT find OpenCL (missing:  OpenCL_LIBRARY OpenCL_INCLUDE_DIR) 
-- Linking with these libraries: 
 /usr/lib/aarch64-linux-gnu/libusb-1.0.so
 pthread
 /usr/lib/aarch64-linux-gnu/libturbojpeg.so.0
 /usr/lib/aarch64-linux-gnu/libglfw.so
 /usr/lib/aarch64-linux-gnu/libGL.so
 /usr/local/cuda/lib64/libcudart_static.a
 -lpthread
 dl
 /usr/lib/aarch64-linux-gnu/librt.so
-- Could NOT find Doxygen (missing:  DOXYGEN_EXECUTABLE) 
-- Configurating examples
-- Using in-tree freenect2 target
-- Checking for module 'libopenni2'
--   No package 'libopenni2' found
-- Could NOT find OpenNI2 (missing:  OpenNI2_LIBRARY_DIR OpenNI2_INCLUDE_DIRS) 
-- Feature list:
--   CUDA    yes
--   CXX11    disabled
--   Examples    yes
--   OpenCL    no
--   OpenGL    yes
--   OpenNI2    no
--   TegraJPEG    no
--   Threading    tinythread
--   TurboJPEG    yes
--   VAAPI    no
--   VideoToolbox    no (Apple only)
-- Configuring done
-- Generating done
-- Build files have been written to: /home/nvidia/libfreenect2/build
[  6%] Built target generate_resources_tool
[ 10%] Linking CXX shared library lib/libfreenect2.so
[ 86%] Built target freenect2
[ 90%] Linking CXX executable ../bin/Protonect
[100%] Built target Protonect
Install the project...
-- Install configuration: "RelWithDebInfo"
-- Installing: /home/nvidia/freenect2/lib/libfreenect2.so.0.2.0
-- Installing: /home/nvidia/freenect2/lib/libfreenect2.so.0.2
-- Installing: /home/nvidia/freenect2/lib/libfreenect2.so
-- Installing: /home/nvidia/freenect2/include/libfreenect2
-- Installing: /home/nvidia/freenect2/include/libfreenect2/registration.h
-- Installing: /home/nvidia/freenect2/include/libfreenect2/frame_listener.hpp
-- Installing: /home/nvidia/freenect2/include/libfreenect2/libfreenect2.hpp
-- Installing: /home/nvidia/freenect2/include/libfreenect2/packet_pipeline.h
-- Installing: /home/nvidia/freenect2/include/libfreenect2/frame_listener_impl.h
-- Installing: /home/nvidia/freenect2/include/libfreenect2/logger.h
-- Up-to-date: /home/nvidia/freenect2/include/libfreenect2
-- Installing: /home/nvidia/freenect2/include/libfreenect2/config.h
-- Installing: /home/nvidia/freenect2/include/libfreenect2/export.h
-- Installing: /home/nvidia/freenect2/lib/cmake/freenect2/freenect2Config.cmake
-- Installing: /home/nvidia/freenect2/lib/cmake/freenect2/freenect2ConfigVersion.cmake
-- Installing: /home/nvidia/freenect2/lib/pkgconfig/freenect2.pc


nvidia@tegra-ubuntu:~/libfreenect2$ cmake -Dfreenect2_DIR=$HOME/freenect2/lib/cmake/freenect2

-- The C compiler identification is GNU 5.4.0

-- The CXX compiler identification is GNU 5.4.0

-- Check for working C compiler: /usr/bin/cc

-- Check for working C compiler: /usr/bin/cc -- works

-- Detecting C compiler ABI info

-- Detecting C compiler ABI info - done

-- Detecting C compile features

-- Detecting C compile features - done

-- Check for working CXX compiler: /usr/bin/c++

-- Check for working CXX compiler: /usr/bin/c++ -- works

-- Detecting CXX compiler ABI info

-- Detecting CXX compiler ABI info - done

-- Detecting CXX compile features

-- Detecting CXX compile features - done

-- using tinythread as threading library

-- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1") 

-- Checking for module 'libusb-1.0>=1.0.20'

--   Found libusb-1.0, version 1.0.20

-- Checking for modules 'libva;libva-drm'

--   No package 'libva' found

--   No package 'libva-drm' found

-- Found JPEG: /usr/lib/aarch64-linux-gnu/libjpeg.so  

-- Found Linux4Tegra 28.1.0

CMake Warning at cmake_modules/FindTegraJPEG.cmake:53 (MESSAGE):

  Linux4Tegra version (28.1.0) is not recognized.  Add the new source URL

  part to FindTegraJPEG.cmake.

Call Stack (most recent call first):

  CMakeLists.txt:217 (FIND_PACKAGE)



-- Could NOT find TegraJPEG (missing:  TegraJPEG_INCLUDE_DIRS TegraJPEG_L4T_OK TegraJPEG_WORKS) 

-- Performing Test TURBOJPEG_WORKS

-- Performing Test TURBOJPEG_WORKS - Success

-- Found TurboJPEG: /usr/lib/aarch64-linux-gnu/libturbojpeg.so.0  

-- Checking for module 'glfw3'

--   Found glfw3, version 3.1.2

-- Found OpenGL: /usr/lib/aarch64-linux-gnu/libGL.so  

-- Looking for CL_VERSION_2_0

-- Looking for CL_VERSION_2_0 - not found

-- Looking for CL_VERSION_1_2

-- Looking for CL_VERSION_1_2 - not found

-- Looking for CL_VERSION_1_1

-- Looking for CL_VERSION_1_1 - not found

-- Looking for CL_VERSION_1_0

-- Looking for CL_VERSION_1_0 - not found

-- Could NOT find OpenCL (missing:  OpenCL_LIBRARY OpenCL_INCLUDE_DIR) 

-- Looking for pthread.h

-- Looking for pthread.h - found

-- Looking for pthread_create

-- Looking for pthread_create - not found

-- Looking for pthread_create in pthreads

-- Looking for pthread_create in pthreads - not found

-- Looking for pthread_create in pthread

-- Looking for pthread_create in pthread - found

-- Found Threads: TRUE  

-- Found CUDA: /usr/local/cuda (found version "8.0") 

-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY

-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY - Success

-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY

-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY - Success

-- Performing Test COMPILER_HAS_DEPRECATED_ATTR

-- Performing Test COMPILER_HAS_DEPRECATED_ATTR - Success

-- Linking with these libraries: 

 /usr/lib/aarch64-linux-gnu/libusb-1.0.so

 pthread

 /usr/lib/aarch64-linux-gnu/libturbojpeg.so.0

 /usr/lib/aarch64-linux-gnu/libglfw.so

 /usr/lib/aarch64-linux-gnu/libGL.so

 /usr/local/cuda/lib64/libcudart_static.a

 -lpthread

 dl

 /usr/lib/aarch64-linux-gnu/librt.so

-- Could NOT find Doxygen (missing:  DOXYGEN_EXECUTABLE) 

-- Configurating examples

-- Using in-tree freenect2 target

-- Checking for module 'libopenni2'

--   No package 'libopenni2' found

-- Could NOT find OpenNI2 (missing:  OpenNI2_LIBRARY_DIR OpenNI2_INCLUDE_DIRS) 

-- Feature list:

--   CUDA    yes

--   CXX11    disabled

--   Examples    yes

--   OpenCL    no

--   OpenGL    yes

--   OpenNI2    no

--   TegraJPEG    no

--   Threading    tinythread

--   TurboJPEG    yes

--   VAAPI    no

--   VideoToolbox    no (Apple only)

-- Configuring done

-- Generating done

CMake Warning:

  Manually-specified variables were not used by the project:


    freenect2_DIR



-- Build files have been written to: /home/nvidia/libfreenect2



nvidia@tegra-ubuntu:~/libfreenect2/build$ sudo cp ../platform/linux/udev/90-kinect2.rules /etc/udev/rules.d/



nvidia@tegra-ubuntu:~/libfreenect2/build$ ./bin/Protonect
Version: 0.2.0
Environment variables: LOGFILE=<protonect.log>
.
.
.


이렇게 실행하면 키넥트가 찍은 화면이 보임


우분투에서 윈도우와 같은 장치 관리자가 있으면 좋겠다고 생각했는데. 
역시나..있다.ㅋ 

sudo apt-get install sysinfo 
sudo apt-get install hardinfo 

설치 후 setting 탭에 가면 있음. 
출처: http://redsea23.tistory.com/324

==> 이걸로 키넥트 v2 접속 여부확인이 안됨

키넥트 v2 Tracking 패키지 설치

nvidia@tegra-ubuntu:~/catkin_ws/src$  git clone https://github.com/mcgi5sr2/kinect2_tracker
Cloning into 'kinect2_tracker'...
remote: Counting objects: 37, done.
remote: Total 37 (delta 0), reused 0 (delta 0), pack-reused 37
Unpacking objects: 100% (37/37), done.
Checking connectivity... done.

nvidia@tegra-ubuntu:~/catkin_ws$ catkin_make


.
.
.
[ 91%] Built target obstacle_tracker_node
[ 95%] Built target obstacle_detector_nodelets
[ 95%] Built target kinect2_tracker_generate_messages_eus
Scanning dependencies of target kinect2_tracker_generate_messages
[ 95%] Built target kinect2_tracker_generate_messages
In file included from /home/nvidia/catkin_ws/src/kinect2_tracker/src/kinect2_tracker_node.cpp:8:0:
/home/nvidia/catkin_ws/src/kinect2_tracker/src/../include/kinect2_tracker.hpp:28:18: fatal error: NiTE.h: No such file or directory
compilation terminated.
kinect2_tracker/CMakeFiles/kinect2_tracker_node.dir/build.make:62: recipe for target 'kinect2_tracker/CMakeFiles/kinect2_tracker_node.dir/src/kinect2_tracker_node.cpp.o' failed
make[2]: *** [kinect2_tracker/CMakeFiles/kinect2_tracker_node.dir/src/kinect2_tracker_node.cpp.o] Error 1
CMakeFiles/Makefile2:3070: recipe for target 'kinect2_tracker/CMakeFiles/kinect2_tracker_node.dir/all' failed
make[1]: *** [kinect2_tracker/CMakeFiles/kinect2_tracker_node.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 95%] Linking CXX executable /home/nvidia/catkin_ws/devel/lib/sweep_ros/sweep_node
[ 95%] Built target sweep_node
[ 96%] Linking CXX shared library /home/nvidia/catkin_ws/devel/lib/libZEDWrapper.so
[ 96%] Built target ZEDWrapper
Makefile:138: recipe for target 'all' failed
make: *** [all] Error 2
Invoking "make -j6 -l6" failed

OpenNI2 를 설치하지 않아서 생기는 문제인가 싶어서 OpenNI2 를 설치함


nvidia@tegra-ubuntu:~/libfreenect2$ sudo apt-get install libopenni2-dev

Reading package lists... Done

Building dependency tree       

Reading state information... Done

The following packages were automatically installed and are no longer required:

  fonts-opensymbol fonts-stix libabw-0.1-1v5 libcdr-0.1-1 libclucene-contribs1v5 libclucene-core1v5 libcmis-0.5-5v5

  libcolamd2.9.1 libe-book-0.1-1 libeot0 libetonyek-0.1-1 libexttextcat-2.0-0 libexttextcat-data libfreehand-0.1-1

  liblangtag-common liblangtag1 libmhash2 libmspub-0.1-1 libmwaw-0.3-3 libmythes-1.2-0 libneon27-gnutls libodfgen-0.1-1

  liborcus-0.10-0v5 libpagemaker-0.0-0 libraptor2-0 librasqal3 librdf0 librevenge-0.0-0 libsuitesparseconfig4.4.6

  libvisio-0.1-1 libwpd-0.10-10 libwpg-0.3-3 libwps-0.4-4 libyajl2 lp-solve uno-libs3 ure

Use 'sudo apt autoremove' to remove them.

The following additional packages will be installed:

  libopenni2-0

Suggested packages:

  openni2-doc

The following NEW packages will be installed:

  libopenni2-0 libopenni2-dev

0 upgraded, 2 newly installed, 0 to remove and 271 not upgraded.

Need to get 443 kB of archives.

After this operation, 2,019 kB of additional disk space will be used.

Do you want to continue? [Y/n] y

Get:1 http://ports.ubuntu.com/ubuntu-ports xenial/universe arm64 libopenni2-0 arm64 2.2.0.33+dfsg-6 [369 kB]

Get:2 http://ports.ubuntu.com/ubuntu-ports xenial/universe arm64 libopenni2-dev arm64 2.2.0.33+dfsg-6 [74.2 kB]

Fetched 443 kB in 4s (94.5 kB/s)          

Selecting previously unselected package libopenni2-0.

(Reading database ... 221533 files and directories currently installed.)

Preparing to unpack .../libopenni2-0_2.2.0.33+dfsg-6_arm64.deb ...

Unpacking libopenni2-0 (2.2.0.33+dfsg-6) ...

Selecting previously unselected package libopenni2-dev.

Preparing to unpack .../libopenni2-dev_2.2.0.33+dfsg-6_arm64.deb ...

Unpacking libopenni2-dev (2.2.0.33+dfsg-6) ...

Processing triggers for libc-bin (2.23-0ubuntu9) ...

Setting up libopenni2-0 (2.2.0.33+dfsg-6) ...

Setting up libopenni2-dev (2.2.0.33+dfsg-6) ...

Processing triggers for libc-bin (2.23-0ubuntu9) ...


nvidia@tegra-ubuntu:~/libfreenect2/build$ cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/freenect2
-- using tinythread as threading library
-- Checking for modules 'libva;libva-drm'
--   No package 'libva' found
--   No package 'libva-drm' found
-- Found Linux4Tegra 28.1.0
CMake Warning at cmake_modules/FindTegraJPEG.cmake:53 (MESSAGE):
  Linux4Tegra version (28.1.0) is not recognized.  Add the new source URL
  part to FindTegraJPEG.cmake.
Call Stack (most recent call first):
  CMakeLists.txt:217 (FIND_PACKAGE)


-- Could NOT find TegraJPEG (missing:  TegraJPEG_INCLUDE_DIRS TegraJPEG_L4T_OK TegraJPEG_WORKS) 
-- Could NOT find OpenCL (missing:  OpenCL_LIBRARY OpenCL_INCLUDE_DIR) 
-- Linking with these libraries: 
 /usr/lib/aarch64-linux-gnu/libusb-1.0.so
 pthread
 /usr/lib/aarch64-linux-gnu/libturbojpeg.so.0
 /usr/lib/aarch64-linux-gnu/libglfw.so
 /usr/lib/aarch64-linux-gnu/libGL.so
 /usr/local/cuda/lib64/libcudart_static.a
 -lpthread
 dl
 /usr/lib/aarch64-linux-gnu/librt.so
-- Could NOT find Doxygen (missing:  DOXYGEN_EXECUTABLE) 
-- Configurating examples
-- Using in-tree freenect2 target
-- Checking for module 'libopenni2'
--   Found libopenni2, version 2.2.0.3
-- Found OpenNI2: /usr/lib  
-- Feature list:
--   CUDA    yes
--   CXX11    disabled
--   Examples    yes
--   OpenCL    no
--   OpenGL    yes
--   OpenNI2    yes
--   TegraJPEG    no
--   Threading    tinythread
--   TurboJPEG    yes
--   VAAPI    no
--   VideoToolbox    no (Apple only)
-- Configuring done
-- Generating done
-- Build files have been written to: /home/nvidia/libfreenect2
nvidia@tegra-ubuntu:~/libfreenect2/build$ make
[  6%] Built target generate_resources_tool
[ 86%] Built target freenect2
[100%] Built target Protonect
nvidia@tegra-ubuntu:~/libfreenect2/build$ make install
[  6%] Built target generate_resources_tool
[ 86%] Built target freenect2
[100%] Built target Protonect
Install the project...
-- Install configuration: "RelWithDebInfo"
-- Up-to-date: /home/nvidia/freenect2/lib/libfreenect2.so.0.2.0
-- Up-to-date: /home/nvidia/freenect2/lib/libfreenect2.so.0.2
-- Up-to-date: /home/nvidia/freenect2/lib/libfreenect2.so
-- Up-to-date: /home/nvidia/freenect2/include/libfreenect2
-- Up-to-date: /home/nvidia/freenect2/include/libfreenect2/registration.h
-- Up-to-date: /home/nvidia/freenect2/include/libfreenect2/frame_listener.hpp
-- Up-to-date: /home/nvidia/freenect2/include/libfreenect2/libfreenect2.hpp
-- Up-to-date: /home/nvidia/freenect2/include/libfreenect2/packet_pipeline.h
-- Up-to-date: /home/nvidia/freenect2/include/libfreenect2/frame_listener_impl.h
-- Up-to-date: /home/nvidia/freenect2/include/libfreenect2/logger.h
-- Up-to-date: /home/nvidia/freenect2/include/libfreenect2
-- Up-to-date: /home/nvidia/freenect2/include/libfreenect2/config.h
-- Up-to-date: /home/nvidia/freenect2/include/libfreenect2/export.h
-- Up-to-date: /home/nvidia/freenect2/lib/cmake/freenect2/freenect2Config.cmake
-- Up-to-date: /home/nvidia/freenect2/lib/cmake/freenect2/freenect2ConfigVersion.cmake
-- Up-to-date: /home/nvidia/freenect2/lib/pkgconfig/freenect2.pc



인터넷에서 NiTE.h 만 kinect2_tracker.hpp파일이 참조 할 수 있게
~/catkin_ws/src/kinect2_tracker/include에 복사해서 넣어주면 다른 파일이 없다고 에러가 남
OpenNI 전체를 설치해야 하는듯

In file included from /home/nvidia/catkin_ws/src/kinect2_tracker/src/../include/kinect2_tracker.hpp:28:0,
                 from /home/nvidia/catkin_ws/src/kinect2_tracker/src/kinect2_tracker_node.cpp:8:
/home/nvidia/catkin_ws/src/kinect2_tracker/src/../include/NiTE.h:11:22: fatal error: NiteCAPI.h: No such file or directory
compilation terminated.

깃허브 제작페이지 이슈 항목에서는 NiTE.h 파일만 복사하면 된다고 하는데,
이건 전체 OpenNI 가 설치됐다고 가정한듯





여기서 ARM 코어용 OpenNI2를 다운 받아야 하나??

NITE 만 따로 다운도 가능한듯?
http://talkingaboutme.tistory.com/181


~/catkin_ws/src/kinect2_tracker/setup_nite.bash 파일의 내용

#!/bin/bash
ln -s ~/NiTE-Linux-x64-2.2/Samples/Bin/NiTE2/ ~/.ros/NiTE2

NiTE-Linux-x64-2.2.tar.bz2 파일을 다운로드하고 home 폴더에 압축을 풀고
위에 링크 명령을 실행했더니
~/.ros/ 에 NiTE2 가 생겼다

숨김파일 보는 법 : ls -a   또는 GUI 파일탐색기 에서 Ctrl+H


catkin_make를 했더니 NiTE 링크에러는 안나고 다른 에러들이 발생함
아마도 내가 구한 NiTE 압축파일이 젯슨보드용이 아닌듯..

nvidia@tegra-ubuntu:~/catkin_ws$ catkin_make
Base path: /home/nvidia/catkin_ws
Source space: /home/nvidia/catkin_ws/src
Build space: /home/nvidia/catkin_ws/build
Devel space: /home/nvidia/catkin_ws/devel
Install space: /home/nvidia/catkin_ws/install
.
.
.
.
In file included from /home/nvidia/NiTE-Linux-x64-2.2/Include/NiteCAPI.h:8:0,
                 from /home/nvidia/catkin_ws/src/kinect2_tracker/src/../include/NiTE.h:11,
                 from /home/nvidia/catkin_ws/src/kinect2_tracker/src/../include/kinect2_tracker.hpp:28,
                 from /home/nvidia/catkin_ws/src/kinect2_tracker/src/kinect2_tracker_node.cpp:8:
/home/nvidia/catkin_ws/src/kinect2_tracker/./include/Openni2/OniPlatform.h:49:3: error: #error Xiron Platform Abstraction Layer - Unsupported Platform!
 # error Xiron Platform Abstraction Layer - Unsupported Platform!
   ^
In file included from /home/nvidia/catkin_ws/src/kinect2_tracker/./include/Openni2/OniCAPI.h:25:0,
                 from /home/nvidia/NiTE-Linux-x64-2.2/Include/NiteCAPI.h:9,
                 from /home/nvidia/catkin_ws/src/kinect2_tracker/src/../include/NiTE.h:11,
                 from /home/nvidia/catkin_ws/src/kinect2_tracker/src/../include/kinect2_tracker.hpp:28,
                 from /home/nvidia/catkin_ws/src/kinect2_tracker/src/kinect2_tracker_node.cpp:8:
/home/nvidia/catkin_ws/src/kinect2_tracker/./include/Openni2/OniCTypes.h:115:32: error: expected ‘)’ before ‘*’ token
 typedef void (ONI_CALLBACK_TYPE* OniNewFrameCallback)(OniStreamHandle stream, void* pCookie);
                                ^
/home/nvidia/catkin_ws/src/kinect2_tracker/./include/Openni2/OniCTypes.h:116:32: error: expected ‘)’ before ‘*’ token
 typedef void (ONI_CALLBACK_TYPE* OniGeneralCallback)(void* pCookie);


젯슨보드용 NiTE 를 다운받아야 할듯
http://openni.ru/files/nite/index.html


일단 apt-get 을 업데이트 해보자..

nvidia@tegra-ubuntu:~$ sudo apt-get update
[sudo] password for nvidia: 
Sorry, try again.
[sudo] password for nvidia: 
Get:1 file:/var/cuda-repo-8-0-local  InRelease
Ign:1 file:/var/cuda-repo-8-0-local  InRelease
Get:2 file:/var/nv-gie-repo-ga-cuda8.0-trt2.1-20170614  InRelease
Ign:2 file:/var/nv-gie-repo-ga-cuda8.0-trt2.1-20170614  InRelease
Get:3 file:/var/cuda-repo-8-0-local  Release [574 B]
Get:4 file:/var/nv-gie-repo-ga-cuda8.0-trt2.1-20170614  Release [574 B]
Get:3 file:/var/cuda-repo-8-0-local  Release [574 B]
Get:4 file:/var/nv-gie-repo-ga-cuda8.0-trt2.1-20170614  Release [574 B]
Hit:7 http://ports.ubuntu.com/ubuntu-ports xenial InRelease                                  
Get:8 http://ports.ubuntu.com/ubuntu-ports xenial-updates InRelease [102 kB]       
Hit:9 http://packages.ros.org/ros/ubuntu xenial InRelease                                                       
Get:10 http://ports.ubuntu.com/ubuntu-ports xenial-security InRelease [102 kB]        
Get:11 http://ports.ubuntu.com/ubuntu-ports xenial-updates/main arm64 Packages [524 kB]
Get:12 http://ports.ubuntu.com/ubuntu-ports xenial-updates/main arm64 DEP-11 Metadata [305 kB]
Get:13 http://ports.ubuntu.com/ubuntu-ports xenial-updates/main DEP-11 64x64 Icons [205 kB]
Get:14 http://ports.ubuntu.com/ubuntu-ports xenial-updates/universe arm64 Packages [464 kB]
Get:15 http://ports.ubuntu.com/ubuntu-ports xenial-updates/universe arm64 DEP-11 Metadata [170 kB]                        
Get:16 http://ports.ubuntu.com/ubuntu-ports xenial-updates/universe DEP-11 64x64 Icons [220 kB]                           
Get:17 http://ports.ubuntu.com/ubuntu-ports xenial-updates/multiverse arm64 DEP-11 Metadata [4,072 B]                     
Get:18 http://ports.ubuntu.com/ubuntu-ports xenial-security/main arm64 DEP-11 Metadata [60.0 kB]                          
Get:19 http://ports.ubuntu.com/ubuntu-ports xenial-security/main DEP-11 64x64 Icons [52.0 kB]                             
Get:20 http://ports.ubuntu.com/ubuntu-ports xenial-security/universe arm64 DEP-11 Metadata [48.8 kB]                      
Get:21 http://ports.ubuntu.com/ubuntu-ports xenial-security/universe DEP-11 64x64 Icons [64.2 kB]                         
Fetched 2,321 kB in 7s (301 kB/s)                                                                                         
Reading package lists... Done




구형 우분투 버전이지만 힌트를 얻을 수 있을까?

NiTE 설치 방법 설명인데, 이것도 intel CPU 기반이다



~/catkin_ws/src/kinect2_tracker/CMakeLists.txt
80,81 행에 보면 NiTE 위치를 지정해 주게 되어 있음

심볼릭 링크를 하거나 include 파일을 모두 복사하거나 해서 컴파일은 진행할 수 있는데,
궁극적으로 NiTE 라이브러리가 플랫폼(젯슨)과 맞지 않는다!!
젯슨용 NiTE를 찾아보았으나 OpenNI 밑에 nite가 있는데
openNI 를 애플이 인수한뒤 폐쇄 시켜버려서 그런지 모든 nite 링크가 애플로 연결되고 페이지가 삭제 되었다고 나온다!
openni.ru 러시아 홈페이지는 살아 있긴 한데, 여기서 젯슨 또는 ARM core 를 지원하진 않고 있다!
결국 젯슨에서는 안되고 x86, x64 기반의 intel CPU 에 설치해서 해야 할 듯 하다!!

러시아쪽 OpenNI 싸이트에서 히스토리를 찾았는데, ARM 코어 지원이 없는듯 하다
http://openni.ru/openni-sdk/openni-sdk-history-2/index.html


Nite 설명문서를 보니 Nite가 인체모형을 추출하는 라이브러리
http://openni.ru/wp-content/uploads/2013/02/NITE-Algorithms.pdf

러시아 openni.ru 에서 ARM 코어용 NiTE 발견  <== 아!! 이건 NiTE가 아니고 openNI 였음 ㅠㅠ
http://openni.ru/openni-sdk/index.html



젯슨보드가 아니고 노트북 (X64) 에서 컴파일 했더니 플랫폼이 맞는데 다른 종류의 에러가 발생
In file included from /home/orasman/catkin_ws/src/kinect2_tracker/src/kinect2_tracker_node.cpp:8:0:
/home/orasman/catkin_ws/src/kinect2_tracker/src/../include/kinect2_tracker.hpp:218:2: error: expected unqualified-id before ‘-’ token
  -// This function publishes the calibration_space opposite the shoulders of the user
  ^
/home/orasman/catkin_ws/src/kinect2_tracker/src/kinect2_tracker_node.cpp:24:1: error: expected ‘}’ at end of input
 }
 ^
In file included from /home/orasman/catkin_ws/src/kinect2_tracker/src/kinect2_tracker_node.cpp:8:0:
/home/orasman/catkin_ws/src/kinect2_tracker/src/../include/kinect2_tracker.hpp: In constructor ‘kinect2_tracker::kinect2_tracker()’:
/home/orasman/catkin_ws/src/kinect2_tracker/src/../include/kinect2_tracker.hpp:55:7: error: class ‘kinect2_tracker’ does not have any field named ‘it_’
       it_(nh_)
       ^
/home/orasman/catkin_ws/src/kinect2_tracker/src/../include/kinect2_tracker.hpp:55:11: error: ‘nh_’ was not declared in this scope
       it_(nh_)
           ^

해당 파일을 열어 봤더니 소스코드에 '-' 문자가 주르륵 붙어 있어서 에러가 난 것이었다.
코드를 수정하니 컴파일 성공!!

orasman@orasman-A515-K-AFLUL:~/catkin_ws$ catkin_make
.
.
.
[ 94%] Built target ros_tutorial_srv_server
[ 96%] Built target laser_proc_ROS
[ 98%] Built target laser_proc
[ 98%] Built target LaserProcNodelet
[100%] Linking CXX executable /home/orasman/catkin_ws/devel/lib/kinect2_tracker/kinect2_tracker_node
[100%] Built target kinect2_tracker_node


내 노트북에서 USB2.0 포트를 통해서 키넥트를 연결하면 디바이스는 찾는데 USB가 저속이라 연결을 못한다


orasman@orasman-A515-K-AFLUL:~/libfreenect2/build$ ./bin/Protonect
Version: 0.2.0
Environment variables: LOGFILE=<protonect.log>
Usage: ./bin/Protonect [-gpu=<id>] [gl | cl | clkde | cuda | cudakde | cpu] [<device serial>]
        [-noviewer] [-norgb | -nodepth] [-help] [-version]
        [-frames <number of frames to process>]
To pause and unpause: pkill -USR1 Protonect
[Info] [Freenect2Impl] enumerating devices...
[Info] [Freenect2Impl] 9 usb devices connected
[Info] [Freenect2Impl] found valid Kinect v2 @2:16 with serial 095447635047
[Info] [Freenect2Impl] found 1 devices
[Info] [Freenect2DeviceImpl] opening...
[Error] [protocol::UsbControl] failed to claim interface with IrInterfaceId(=1)! LIBUSB_ERROR_BUSY Resource busy. Try debugging with environment variable: export LIBUSB_DEBUG=3 .
[Info] [Freenect2DeviceImpl] closing...
[Info] [Freenect2DeviceImpl] deallocating usb transfer pools...
[Info] [Freenect2DeviceImpl] closing usb device...
[Info] [Freenect2DeviceImpl] closed
[Error] [Freenect2Impl] failed to open Kinect v2: @2:16
failure opening device!


TOSHIBA notebook re-install and roslaunch


bluesky@bluesky-Satellite-S55t-B:~$ roslaunch kinect2_tracker tracker.launch
... logging to /home/bluesky/.ros/log/820175c4-815f-11e7-9ca2-2c600c1c08fe/roslaunch-bluesky-Satellite-S55t-B-2385.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://localhost:40635/

SUMMARY
========

PARAMETERS
 * /kinect2_tracker_node2/relative_frame: /brix_2_camera_frame
 * /kinect2_tracker_node2/tf_prefix: brix_2
 * /rosdistro: kinetic
 * /rosversion: 1.12.7

NODES
  /
    brix_to_global2 (tf/static_transform_publisher)
    kinect2_tracker_node2 (kinect2_tracker/kinect2_tracker_node)

ROS_MASTER_URI=http://localhost:11311

core service [/rosout] found
process[kinect2_tracker_node2-1]: started with pid [2403]
process[brix_to_global2-2]: started with pid [2404]
[FATAL] [1502763338.460627769]: Can't Open Device
[kinect2_tracker_node2-1] process has finished cleanly
log file: /home/bluesky/.ros/log/820175c4-815f-11e7-9ca2-2c600c1c08fe/kinect2_tracker_node2-1*.log

Posted by orasman
카테고리 없음2017. 2. 24. 22:58

Lua깔고 이런거 너무 힘듬 - 실패함 (http://orasman.tistory.com/338)


아두이노처럼 사용하는 방법

http://webnautes.tistory.com/980


NodeMCU V1,V2,V3 차이점 설명

http://frightanic.com/iot/comparison-of-esp8266-nodemcu-development-boards/


아두이노 "툴" 설정에서 다운로드 속도는 115200 으로 해야함


네이버카페 아두이노스토리 NodeMCU 사용 예제 링크

[출처] DHT22 온습도센서와 ESP8266 NodeMCU 보드를 이용 웹에 업로드 (아두이노 스토리)

http://cafe.naver.com/arduinostory/52382


NodeMCU V2에서 ds18b20 온도센서로부터 값읽어 웹페이지에 보여주기(arduino IDE)

http://webnautes.tistory.com/981


디지털 포트번호는 PCB에 나온 D5,D6,D7 또는 핀맵 그림에 GPIO 번호로 써야함

예를 들어 D7 포트를 제어하려면 '13'번이라고 넣던지, "D7"이라고 써야함

Posted by orasman
카테고리 없음2017. 2. 10. 21:52

# 글을 시작하며..

IOT 기술에 관심을 갖게되면서
인터넷 서핑, 블로그, 카페를 통해 다양한 응용 기술들을 접하게 되었다.
그러면서 단순한 실험에 그치지 않고 두고두고 쓸만한

홈 오토메이션 전체 시스템을 구축하고 싶어졌다.


# 프로젝트 목표..

집에서 필요한 다양한 기능을 구현하자
아두이노 기반으로 최대한 저렴한 방법을 찾자
스마트폰으로 언제 어디서든 제어를 하거나 알람을 받을 수 있게 하자


# 17년 2월 현재 결과물 (최신 업데이트)

아마존 에코닷2와 연동해서 음성명령으로 전등, 전원플러그 제어하는 동영상


17.Feb.26 updated voice play funtion

https://youtu.be/t57Y1XewvTE


(내 목소리를 녹음해서 듣는다는건 언제나 오글거리는 일이다..)


참고로 아래의 설명은 아마존 에코 음성이 아닌 스마트폰으로 제어하는 내용을 설명

아마존 에코 연동 기법은 향후 작성할 게시물을 참고..


# 뭘 만들어야 하나? 홈 오토메이션 시스템 구성..



1. 스마트폰과 앱
2. 인터넷 서버 : 사물인터넷 연결 서비스 제공
3. 인터넷 중계망 : 인터넷 무선 공유기로 집안에 사물과 인터넷 서버를

                        어떻게 연결할 것인가
4. 가정용 허브 : 각종 홈 키트를 관장하는 중앙 제어 장치
5. 홈 키트(장치들) : 말단 장치들..열림감지, 전기 플러그, 전등스위치 등등

1번, 2번 앱과 서버를 직접 만드시는 분들도 있으나 난 그런 능력은 없으니

열심히 발품팔아서 해결책을 찾아보자.
3번은 집에 있으니 패스~
4번 허브와 5번 홈키트는 아두이노로 직접 만들어 보자


# 이런저런 고민과 개발 과정.. 1년의 시간


(전원 플러그 자체로 WiFi 기능을 내장한 일체형 제품도 있다)


홈 키트 만들려고 아두이노+통신모듈을 내장해서 만들려고 컨셉을 잡았는데..

기본적으로 소비 전력이 커져서 배터리 구동이 어려워 AC전원을 항상 연결해야 한다


그러니 홈 키트는 아두이노 없이 무선 통신 모듈만으로

간단한 동작과 데이터 송수신 기능만 하자
이러한 이유로 홈키트 통신 방식을 블루투스(1:1통신)나

와이파이 모듈을 쓰는건 아닌거 같다.

사실 이런 고민을 시작했던 1년 전에는

ESP8266의 펌웨어를 바꿔서 아두이노 처럼 쓸 수 있다는걸 몰랐다.
그렇다고 해도 ESP8266으로 홈키트를 만들면 전력 소모가 커서 배터리는 어렵고

AC전원을 끌어 써야 할 듯.

찾아보니 HC-11 같은 RF 모듈에 간단한 I/O 제어기능이

포함되어 있어서 쓸 수 있을것 같다.


(HC-11 모듈은 결국 사용하지 않았다..)


여기서 더 찾아보니 RF 통신으로 배터리를 내장해서

열림감지, 인체감지, 전원 플러그, 전등 스위치 제품이 있더라!! (유레카!)


게다가 이런 제품들이 상당히 저렴해서 직접 만드는것 보다 구입하는게 훨씬 싸게 들더라.
(무선 전원 플러그랑 전등스위치를 직접 만들려고 했더니 재료비만 각각 몇 만원이 넘더만..)


홈키트는 자작을 포기! 그냥 싼거 사서 쓰자.. 근데 이것들이 아두이노로 제어가 될까?
앗! 아두이노에 붙일수 있는 RF 송수신 모듈도 있었네?



잘하면 아두이노로 RF 제품들을 제어할 수 있겠군..


몇 달에 걸쳐 인터넷 서핑과 시행착오, 삽질을 통해 RF 제품들 제어(=해킹)에 성공함


다행히 RF 주파수는 서로 잘 맞았는데... 프로토콜은 제품마다 달라서..

이걸 찾고, 분석하는데 상당한 노력이 필요했음


그럼 이제 RF 제품들과 WiFi를 연결해 주는 허브를 아두이노로 만들자..

아두이노가 일종의 게이트웨이(IOT 허브) 역할이 되겠네..




[RF송수신 모듈 + 아두이노 + ESP8266]



이제 그럼.. 스마트폰으로 집안에 장치들을 제어하려면 어떤 앱이 좋을까?


이것 저것 검색하다가 IFTTT 라는 싸이트 발견! 게다가 Maker 를 위한 기능이 있다고 함
찾아보니 아두이노로 IFTTT와 통신이 가능하다는걸 알게됨
더 찾아보니 DO 라는 앱을 쓰면 스마트폰에서 아두이노로 명령도 내릴수 있다고 함

자... 이제 ESP8266을 써서 WiFi로 IFTTT, DO 앱하고 연결해 볼까?




HTTP, GET 뭐 이런 프로토콜을 알아야 하네.. 음.. 잘 모르겠고 일단 만들어 보자
이것도 몇달에 걸쳐 장님 코끼리 뒷다리 만지듯이 시행착오를 통해 IFTTT 서버로 전송 성공
열림감지 센서값을 RF로 받아서 IFTTT 통해서 스마트폰에 알람을 띄움

스마트 폰에서 DO앱으로 명령을 내리면 ESP8266+아두이노가 알아듣고 전등을 키고 싶다면,
ESP8266를 서버 모드로 셋팅하고 문자를 받으면 해석해서 해당 명령에 맞는 동작을 함
이것도 역시 몇달 걸려서 ESP8266 서버 기능과 수신 문자 해석 기능을 만듬
하지만 내가 만든건 코드가 조잡해서 쓸만한 ESP8266 라이브러리를 찾아 개조함

필요한 기술은 다 개발했으니 시스템 통합을 하자!

이것도 ESP8266 동작시키는데 제한이 있어서 몇 달 정도 걸려서 통합을 완성함
결국 시작한지 1년 정도 걸려서 프로젝트를 완성할 수 있었다.
사실 탱자탱자 놀면서 짬짬히 하다보니 생각보다 오래 걸렸다...

# 시스템의 한계와 단점..

저렴한 RF 방식의 홈키트를 적용하다 보니 생기는 단점들..
..전파 방해나 혼신, 보안문제, 해킹에 취약 할 수 있다
 (사실 아직 사용자가 많아 질때 까지는 발생하지 않을 수 도 있다)
..홈키트 모듈에 프로세싱 기능이 없다보니 현재 상태를 피드백 해주지는 못한다 (그래서 싸다)
 (예를들어 전등을 켰는데 현재 켜진 상태인지, 꺼진 상태인지 응답 하는 기능은 없다)

그래서 국내 시판되는 IOT 홈오토메이션 제품들은 Z-wave 라는 무선통신을 쓴다.
아직 Z-wave는 공부를 안해서 어떤 기능까지 지원하는지 모르겠지만,

위에 언급한 문제들은 없겠지?


# 프로젝트 결과..

스마트폰으로 집 밖에서 집안에 전등과 전기 플러그를 ON/OFF 할 수 있다
잠자리에 누워서 집안에 모든 전등을 끌 수 있다
창문/현관문이 열리거나 사람이 감지되면 스마트폰에 알람이 온다
이 둘을 연결해서 집에 사람이 들어오면 자동으로 전등이나 전기 플러그가 켜진다

# 프로젝트 비용..

각 부품을 1개씩만 적용할 경우 전체 재료비는 대략 82,200원 정도

홈 오토메이션 키트 (건전지 값 포함)
열림감지 무선센서 (5,000원) 인체감지 무선센서 (12,500원)
무선 전원 플러그 (10,000원) 무선 전등스위치 (45,000원)

가정용 허브 구축
아두이노 (5,400원) ESP8266(3,500원) RF송수신모듈 (1,800원)
인터넷 서버 중계 : 무료 (IFTTT 서비스 활용)

# 상용 제품 대비 DIY 장단점과 가격 비교..

일단 DIY 를 하면 매달내는 통신비는 안낸다. (IFTTT 서비스가 유료로 되지 않는다면)
통신사에 사용기록이 남지 않아서 프라이버시를 지킬 수 있다. (특히 샤오미 같으면 중국서버에 기록이 남을수도..)
가정용 허브 코딩을 잘 하면 홈키트끼리 연동해서 동작하게 바꿀 수 있다. (상용제품에 없는 기능)
단점은 DIY를 하려면 알아야 할것도 많고, 귀찬고, 안되면 삽질도 해야한다.

상용제품을 쓰면 좀 비싸지만 좀 더 편리하게 귀찬은거 신경 안쓰고 쓸 수 있다.
다만 나만의 아이디어가 있을때 다양하게 확장하기 어렵고, 무엇보다 직접 만드는 재미는 없다.

# LG IOT@홈


통신요금 연결 제품 1개당 2,200원
가정용 허브 (별도 구입 안되고 서비스 가입시 제공)
열림감지 센서 단품 33,000원
전기 플러그 단품 44,000원
전등 스위치 단품 55,000원


# SK 스마트홈



선납이용료 (가입시 1회 납부, 5,500원)
통신요금 연결 제품 1개당 (1,100원 ,3년약정시) 연결제품 무제한(9,900원, 3년약정시)
브릿지(가정용 허브) 50,000원
전기 플러그 단품 44,000원
전등 스위치 단품 55,000원

# 샤오미 홈 오토 키트


허브+열림감지1개+인체감지1개+무선스위치1개 = 약 50달러
가격은 샤오미를 따라갈 수가 없다. 중국 서버를 거친다는게 찜찜 할 뿐..


# 개발 기술 공유를 위한 글 연재 순서..

RF수신 모듈로 프로토콜 해석하기 (열림센서, 인체감지센서, 무선리모콘 신호 받기)
RF 송신 모듈로 제어 명령 보내기 (전등 스위치 또는 전기 플러그 ON/OFF)
무료 인터넷 중계 서버 IFTTT 사용법
ESP8266 으로 IFTTT에 트리거 보내서 스마트폰 알람 띄우기
스마트폰 DO 앱으로 ESP8266에 알림 보내기
ESP8266 AT명령으로 쓸 때 주의할 점
지금까지 기술을 집약해서 가정용 허브 만들기

Posted by orasman
카테고리 없음2017. 1. 31. 23:36

_170127_cactus_WiFi_alexa_LIVOLO_stringCompare_publish.ino

예제 코드

IFTTT.com 설정

(1) IFTTT.com에 에코닷 등록










(2) Applet 생성



























Posted by orasman