「C++」タグアーカイブ

Qt で Windows のタスクバーにアプリ名を表示させないようにする

Qt でマスコット系のアプリを作っていると、タスクバーにアプリ名が表示されるのを抑制したいことがあります。(抑制すると Alt-Tab を押したときにも表示されなくなる) そういう場合、単に

#if defined(Q_OS_WIN)
    WId wid = winId();
    LONG style = GetWindowLong(wid, GWL_EXSTYLE);
    SetWindowLong(wid, GWL_EXSTYLE, style | WS_EX_TOOLWINDOW);
#endif

を追記してもよいのですが QWidget::setWindowFlags() が SetWindowLong() を呼び出しているせいか、設定がうまく反映されなかったりしました。

仕方がないので、タスクバーへのアプリ名表示を抑制する Widget クラスに(例えば Balloon_widget) の setWindowFlags() をオーバーライドして、以下のようにしました。

void Balloon_widget::setWindowFlags(Qt::WindowFlags flags)
{
    QWidget::setWindowFlags(flags);
#if defined(Q_OS_WIN)
    WId wid = winId();
    LONG style = GetWindowLong(wid, GWL_EXSTYLE);
    SetWindowLong(wid, GWL_EXSTYLE, style | WS_EX_TOOLWINDOW);
#endif
}

親クラスのメソッドを呼び出してから、setWindowLong() を呼び出すようにしただけですが、こんな感じでうまくいきます。

SICK LMS5xx 用の C++ ドライバの作成 (マルチエコーを扱えるようにした)

LMS511 用に開発している C++ ドライバの Lms_driver で、マルチエコー情報を扱うあたりを実装した。

lms_viewer_2013_1217
2エコー目の距離が水色で表示されている

とりあえずは利用できるようになったので、ここまでの実装を hrk_lidar という名前のライブラリとして公開した。URG や LMS センサ用の C++ ドライバで Windows, Linux, Mac で動作する。

hrk_lidar, Lidar_viewer パッケージのダウンロードページ
https://bitbucket.org/satofumi/hobby_robot_sdk/downloads

ドライバの細かな修正は、使いながら行っていきたい。
あとは、このドライバで利用している Viewer も Lidar_viewer という名前のパッケージにして公開した。(Windows 版 binary は Lidar_viewer_win? という名前)

今後は、前回の実験で取得したデータを解析するあたりを行いたい。

SICK LMS5xx 用の C++ ドライバの作成 (強度情報を取得できるようにした)

暇なわけではないが、メイン仕事をする気が起きなかったので Lms_driver.cpp に強度情報を取得するあたりの機能を実装した。
https://bitbucket.org/satofumi/hobby_robot_sdk/src/b5734dc0ba50bf78957748e978cf05223d2d1f3d8/lib/lidar/Lms_driver.cpp?at=default

lms_viewer_2013_1210
オレンジ色のプロットが強度情報

正面に回帰反射版を置いたところ、そこの値が 16 進数の 8 bit 表記で 0xFE になっているのが確認できた。(0xFF には、ならないようだ)

強度データが 0xFE になる特性を利用すれば、反射版かどうかの判定が簡単にできるはず。是非、次回の実験時にこのあたりの情報をうまく使っていきたい。

残るは複数エコーを取得するあたりだが、その実装はまた今度にしたい。

 

Android ゲームアプリを SDL を使って作ろう (最初の調査)

手元に Nexus 7 があるので、それで動くゲームアプリを作ろうと思った。
SDL が好きなので SDL を使うことにする。まずは SDL チュートリアルのリンク先にある Android 関連の資料を読む。

SDL のチュートリアル: http://wiki.libsdl.org/Tutorials

で、SDL 1.2 までしか使ったことがなかったので Android の資料を読む前に SDL 2.0 についてのチュートリアルを読み進めた。
SDL 1.2 の頃からは、それなりに変わってるのが理解できた。

先は長そうだ。

SICK LMS5xx 用の C++ ドライバ作成 (Scale Factor の修正)

作成中の Lms_driver で取得した距離が 1/2 になっていたので修正した。
LMDscandata コマンド応答の Scale Factor が x2 なのに、取得した距離データをそのまま表示していたのが原因だった。

lms_viewer_2013_1207
修正前

lms_viewer_2013_1207_2nd
修正後

引き続き、強度情報を取得したりするあたりを実装したい。

SICK LMS5xx 用の C++ ドライバ作成

仕事に関係して SICK 社の LMS511 という距離センサを買ってもらったので、それを使うための C++ クラスを作成した。
https://bitbucket.org/satofumi/hobby_robot_sdk/src/0916bb0ee31d6aa207749dfab44581e53ebea180/lib/lidar/Lms_driver.cpp?at=default

lms_511

単に「作成した」とか書くと簡単に作ったように思えるが、使う日まで時間がないのに同僚からの「時間ないんだし付属してきたライブラリがあるなら、それ使えば?」というコメントに、「Java とか使いたくないし、自分で C++ で書いた方が早く使える気がする」とか返したりしたが…、作り始めたら割と面倒だわ出発の時刻が迫ってくるわで大変だった。みなさん、準備はちゃんとしましょう。

作ったライブラリは以前に作成した URG 用のクラス Urg_driver と同様 Lidar クラスを継承しているので、URG 用に作ったツールなんかがそのまま利用できるといいなー、と思っている。

ただ、未実装な機能が多いので引き続き実装していきます。