Monthly Archives: February 2009

[Video]Prototyping Complex Robot Gripper Designs

Robot gripper

After walking, designing functional hands/grippers has to be the biggest challenge for humanoid robot builders. Packing motors to drive the fingers into a small space and designing the necessary linkages can be extremely difficult.

Fortunately, Lego Mindstorms are an excellent tool for prototyping ideas and concepts before committing any design to the point of actually cutting metal. Here’s a good example of a prototype double jointed gripper with two fingers using a single motor for each finger.

Naver의 Open Api를 이용하기 위한 php 라이브러리

/*

오늘 점심에 뉴스를 보던 중 Open API라고 나왔다는 걸 보았다.

여태 몰랐군…하면서 뒤적여 보니 머야 이거라는 생각이 들었다.

 

그래서 함 달아볼겸 라이브러리를 만들었는데 그중 이 세가지 함수를 이용해서 xml을 리턴할 수 있는것을 공개한다.

 

통신부에서는 curl을 써봤는데 괜히 코드만 길어져서 소켓으로 바꾼 것이다.

공부하고 싶은 사람들은 해보길…그리고 xmlParse라는 함수가 리턴값들을 변환하게되어 있으나 이부분은 공개를 하지 않는다.

 

그 이유는 원래 php로 xml을 파싱하거나 보기 좋게 출력하려면 잔머리를 굴려야한다.

그래서 잔머리 빡세게 굴렸으니 좀 공개를 미뤘다가 0.0.2 라는 버전으로 발표할 생각이다.

뭔가 하는것 같은 느낌이 들지않는가….ㅋㅋㅋ

 

어쨌든 최종 목표는 회사일하다 시간 남아돌거나 주말에 약속이 펑크 났을때 틈틈히해서 설치형 네이버를 만드는 것이다. 어느 오픈소스 툴과도 잘 맞도록~ python, perl, C 버전도 완전 심심하면 만들어 보겠다.

 

전부 영어로 주석달았다. 미안하다. 습관이다.

습관이라는게 이렇게 무서울 줄이야.

사실 주석이라는게 영어만큼 축약적으로 달기 편한게 없다.

한글로 풀어 쓰면 길것들이 몇 개 조합으로 설명이 된다.

 

마지막으로 당부하고픈 것은 내가 머 왕창 잘짜놓거나 알골을 잘해놓은 것도 아니지만 같다 긁어서 지꺼네~ 이런식으로 하지 않았으면 한다. 조사하면 다나온다.

퍼간다면 출처 분명히 해주길….그럼 즐프~

아~ VI에서 줄 잘맞았는데 여기서는 안맞아서 스페이스 많이 넣었음.

*/

 

///////////////////////////////////////////////////////////
//                                                                                   //
//              Naver Open Api Lib 0.0.1                                  //
//                                                                                   //
//  Name : noaLib-0.0.1.php                                               //
//  Description : Naver OpenApi Library                               //
//  Author : _Null (Ok Min Su)                                            //
//  Last Update : 2006.04.03                                               //
//                                                                                   //
//  PHP Configure : –enable-socket, –enable-iconv           //
//                                                                                   //
//  Function : querySend(), chgFormat(), searchQuery()       //
//                                                                                   //
//  Variables : $srv, $target, $display, $start, $sort               //
//  $str_format                                                                  //
//                                                                                   //
//  Burg Report : nullfirm at gmail dot com                            //
//                                                                                   //
///////////////////////////////////////////////////////////
//
// $srv : naver open api engine address
//
// $Traget :
//        kin – knowledge iN search
//        blog – blog search
//        doc –  documents search ($sort variable is null)
//        webkr – webpage search ($sort null)
//        book – book search
//        shop – shopping search
//        krdic – korean dictionary ($sort null)
//        jrdic – japanese dictionary ($sort null)
//        endic – english dictionary ($sort null)
//
// $display : numeric 1 – 100
// 
// $start  : numeric 1 – 10000
//
// $sort : please, read a naver open api manual

//           (http://openapi.naver.com)
//
// $str_format : UTF-8
//
// ex : Knowledge iN search
//
// $result = searchQuery(“string”, “kin”, “10”, “1”, “sim”);
// echo $result;
//
///////////////////////////////////////////////////////////
// Send to naver search engine

 

function querySend ($query_str) {
        global $srv;

 

        $srv_query = $srv.”?”.$query_str;

        if($fp = fopen($srv_query,”r”)) {
                while (!feof($fp)) {
                        $result_data .= fread($fp, 1024);
                }
                fclose ($fp);
                return $result_data;
        } else return -1;

}

 

///////////////////////////////////////////////////////////
// Change the query format

 

function chgFormat ($str) {
        global $str_format;

 

        if (function_exists(‘iconv’) || function_exists(‘libiconv’)) {
                $str_chg = iconv (“”, $str_format, $str);
                return $str_chg;
        } else return -1;
}

 

///////////////////////////////////////////////////////////
// Query call

 

function searchQuery ($query, $target, $display=”10″, $start=”1″, $sort) {
        global $priv_key;

 

        $def_query = “key=$priv_key&target=$target&display=$display&start=$start&query=”;
        $def_query .= chgFormat ($query);
        if ($sort != “” || $sort != null) $def_query .= “&sort=$sort”;
        $result = querySend ($def_query);

 

        return $result;
}