gucchiyの日記

仕事や生活の備忘録的に。

昔のこととかメモしてみているが・・

書き始めたブログのために、昔のこととかここに書き始めたりしているのだけど、
明らかに気持ちが内向きになってしまう。

昔は良かった・・、と言う内向きなら(まだ)良いんだけど、
そっちじゃなくて、過去にあった自身の失敗とか反省とかが次々思い出されて、
その時、こうするべきだったんじゃないか、と
今となってはどうにもならない堂々巡りが頭の中で繰り返され、
大切な「今」と言う時間さえ無駄にしてしまいかねませんわ。

過去は変えられないからね。将来について語れば希望も沸くけど。

この手の自分の過去を題材にした文章の作成は、気持ちの切り替えが大切ね。

僕がソニーに入ったワケと、19年して転職したワケ

ブログのプロフィールには書いているんですが、僕は1995年から2014年までソニーでソフトウェアのエンジニアしてました。VAIOのエンジニアとして、それなりシングルヒットぐらいの実績はありました。詳細はこちら
僕にとってソニーは人生の中において重要な存在です。辞めちゃったけど。

現在では大分変わりましたが、僕が就職活動をしていた1994年当時、工学部エンジニアは研究室と企業の繋がりによる大学推薦が大前提でした。僕が通っていた東京電機大学工学部情報通信工学科では推薦枠ゼロです。毎年一人ぐらいはソニーの枠があった時期も存在したそうなのですが、あまり評判が良くなかったのかも知れません。しかし、そこはソニー、ヒット・モデル・プロデューサーなる製品化できそうな論文を募集するイベントが開催され、僕はそこで、『ゲームソフトウェア設計におけるオブジェクト指向開発』と言う論文で入賞します。応募数千の中からの10名枠。

イベント後、ソニーの人事から言われた言葉が『Gucchiyさんを採用するのに、推薦状は何通ぐらい必要です?』。えっ、って思いました。僕は成績はかなり良かったので、一通あれば大丈夫、と答えました。『念のため二通出しますね』
びっくりしました。当時すでに、アスキーの『テックウィン』と言うウィンドウズを活用するエンターテイメント雑誌でゲームプログラマをしていたのですが、プログラマとして有名人になるほどは成果が出せていたわけではありませんでした。僕にとってエンジニアとして初めて大きな評価をいただいた会社が、ソニーでした。
『我々にもソニーが普通の会社になってしまうのではないか、という危機感がある。Gucchiyさんのような変な人にぜひ来てもらいたい』・・当時のソニー人事担当の言葉そのままです。

僕はとても喜びました。当時の東京電機大学工学部情報通信工学科にはそれなり優れた先生方もおられたと思うのですが、周囲の学生は皆エンジニアを目指しているわけではなく、(じゃあ、なんでわざわざ工学部なんか来るんだよ!)と心の中で思い、また周囲を軽蔑さえしていました。僕は、(大学で適当に過ごしているこいつらとは違うことが証明された!勝った!)と思いました。今にして思えばずいぶん小さなことでした。

本当のことを言うと、僕はコンピュータの仕事をしたかったので、ナムココナミといったゲームの会社か、NEC富士通のようなパソコンを作っている会社の方に興味があり、オーディオメーカーでしかなかった(これは正確ではありませんが、一般にソニーVAIO が出るまでコンピュータの会社とは思われていなかったと思います)ソニーには全く興味はなかったのです。でも、そんな風に評価してくれるならぜひソニーで働いてみたい、と思ったのです。

僕にとってのソニーは、自分の価値観を分かってもらえた、初めての大きな存在でした。だから、有名な設立趣意書の文言が示す『真面目なる技術者の技能を、最高度に発揮せしむべき自由闊達にして愉快なる理想工場の建設』のためならば、なんでもしたいと思っていました。
2014年に退職しましたが、今なおソニーは僕の人生にとって大切な存在です。転職するにはそういった僕の価値観と、最近のソニーの価値観が合わなくなったこと、微減する収入で住宅ローンが払えなくなりかけたことなどがあります。今にして思うと、年収上げるための転職でした。

転職なんてすると、ソニーにあった人間関係も希薄になったりするもので、やはり会社は仕事をするところ、僕が思っていたほど、人生かけるほどの関係性はなかったのかな、と思うわけでもあります。僕より上の世代は、残っている方もお辞めになられた方もいますが、Facebook を拝見する限り、比較的よく会ったりして、古き良きソニー談義に盛り上がっているみたいに見えます。その仲間に入りたいと思うわけではないんですけどね、「昔のソニーは良かった」みたいなことは言いたくはありませんし。世代と関係なく、VAIO安曇野に行かされたメンバーもそれなり今も繋がりあるみたいね。僕は途中でR&Dの部署に移ったり、新規事業作りに拘ったりしたので、そのメンバーにも入れなかったと言うこともあったように思う。安曇野メンバーの繋がり、それはそれでうらやましいけど、僕はやはりどこか、昔話にひっぱられたくはなかったんだろうかな。

しかし、僕の人生の中でソニーは大切な存在。少しさびしくも思う。でも、まあ、これも自分らしいのだろうね。もちろん、ソニーではいろいろ迷惑かけたりしたわけで、いろいろと誤解されちゃったりもしているような気がするわけですが、それに弁明したり、ひっぱられたりすることなく、今後も前に進んで行きたいと思います。でも、ときどき、おいおい、昔話など書いてみますか。

Blog 再構成する・・のか

前職で同僚であった、某有名ブロガーとサシで呑みに行きました@大井町。曰く、『Gucchiyさんのことを知っている人ならそれなり面白く読めると思いますが、一つのエントリーが長くてメッセージがブレているところがあって、伝わりにくい。もっと小さい単位でメッセージを絞ってエントリーを再構成し、メッセージを強く出すようにした方が良い』『週二回更新すること』とアドバイス賜り、うーん、なるほど、なんとか再構成を試みてみるか・・となった

MoveIt! の Topic をハンドルする

意外と MoveIt! の Topic ハンドラのサンプルがないので。
なお、最近、ROS Indigo になって、MoveIt!のクラスライブラリも大きく刷新されたのらしく、サンプルがことごとくコンパイルできなくなっちゃってます。それもあってあまり親切な解説はないのですが、ROS の基本的な動作と、モダンC++ について知識さえあれば、ヘッダファイルから動作を知ることはできます。

#include "ros/ros.h"
#include "moveit_msgs/MoveGroupActionResult.h"
#include "moveit_msgs/MoveGroupActionGoal.h"

#include <iostream>

// /move_group/result TOPIC ハンドラ
void onMoveGroupResult(const moveit_msgs::MoveGroupActionResult& result )
{
    // 軌道計画の result 表示
    std::cout << result << std::endl;
}

// /move_group/goal TOPIC ハンドラ
void onMoveGroupGoal(const moveit_msgs::MoveGroupActionGoal& desired )
{
    // 軌道計画の desired 表示
    std::cout << desired << std::endl;
}

// main 関数
int main(int argc, char **argv)
{
    ros::init(argc, argv, "MoveItTopicSample");
    ros::NodeHandle nodeHandle;
    ros::Subscriber subscribeResult, subscribeGoal;
    ros::Rate rate(10);

    // MoveIt! Topic ハンドラの登録
    subscribeResult = nodeHandle.subscribe("/move_group/result", 1, onMoveGroupResult);
    subscribeGoal   = nodeHandle.subscribe("/move_group/goal", 1, onMoveGroupGoal);

    ros::spin();

    return 0;
}

各 Topic ハンドラで渡される goal や desired の内容はヘッダファイルからメンバ変数を覗くことで確認できますが、基本的に Topic で表示される値そのままです。例えば、result の場合は、こんな感じで扱います。rqt や rostopic /echo などをうまく使って確認します。

// /move_group/result TOPIC ハンドラ
void onMoveGroupResult(const moveit_msgs::MoveGroupActionResult& action )
{
    // 初期角度を取得
    for( int i = 0; i < action.result.trajectory_start.joint_state.name.size(); i++ ){

        // 関節名
        std::cout << action.result.trajectory_start.joint_state.name[i] << std::endl;

        // 関節角度(rad)
        std::cout << action.result.trajectory_start.joint_state.position[i] << std::endl;
    }
}