GNSS受信機 Mosaic-go CLAS にRTK補正データを受け渡す方法あれこれ

Septentrio社のGNSS受信機 Mosaic-go CLAS(以下、受信機)を使っているけど、RTK測位という高速・高精度な測位方法も試してみたい。 そのためには受信機に「補正データ」を渡す必要があり、その方法もいくつかある。 そんなニッチ過ぎる情報です。 動作確認環…

WitMotionの9軸IMU「BWT901CL」のメモ

WitMotionの9軸IMU「BWT901CL」を使ってみたので、そのメモです。 最初のうちは、値やキャリブレーションで何が正解かわからずに苦労しました。 けど、公式がYouTubeに説明動画をあげてくれていたので、それを見たら、あっさり解決。 (WitMotionは製品ごとに…

【ROS2】Mapvizのサンプルを作ってみました

Mapvizは地図タイル上に色々表示できるROS2対応ツールです。あらかじめ準備したうえで、定期的にGPS座標(sensor_msgs/NavSatFix型)をPublishするだけで、サクッと次のような表示ができます。 (Mapvizで地理院タイル(全国最新写真(シームレス))を表示・加工し…

【ROS2】Septentrio社GNSS向けROSドライバー septentrio_gnss_driver を使ってみた

Septentrio社GNSS向けの公式ROSドライバー septentrio_gnss_driver を使ってみたのでその記録です。 まず、ROSドライバーが公式から提供されているのは、とてもうれしいポイントです。 履歴を見る限りではしっかりメンテナンスされており、安心。 apt-get in…

数~十数cm単位で場所を特定できるGNSS受信機「mosaic-go CLAS」を使ってみた

数~十数cm単位で場所を特定できるGNSS受信機「mosaic-go CLAS」で遊んだ時のメモです。 GNSS初心者が書いているので間違いがあるかもしれません。 全体的な感想 mosaic-go CLAS のいいところ mosaic-go CLAS のイマイチなところ 初回の使い方 PCとの接続イ…

【ROS2】twist_mux パッケージ利用メモ

ROSでは twist_muxパッケージという、複数の速度指令(Twistメッセージ)を統合するためのパッケージが用意されています。 前から存在は知っていたものの、使ったことがなかったので使ってみました。そのときのメモです。 実際のシナリオでは、キーボードから…

【ROS2】USB接続LED(BlinkStick)をROSで動かしてみた

前回Pythonで制御できるUSB接続LED(BlinkStick)を動かしてみました。 www.sato-susumu.com 今回はBlinkStickをROS (Robot Operating System) から動かしたいので、専用のROSノードを作ってみました。 既存のノードがあればよかったのですが、USB接続LEDなん…

プログラムで制御できるUSB接続LED(BlinkStick)を動かしてみた

Pythonを使って、できるだけ手軽にLEDを光らせたい。それもRaspberry PiとかM5Stackとか何か間にワンクッション挟むことなく、USBに差し込む、プログラムを動かす、光るぐらいの手軽さで。 USBに差し込むだけで勝手に光る製品は沢山あるけど、Pythonで制御で…

ウェイクワード検出ライブラリ openWakeWord を使ってみた

今回試したのは、ウェイクワード検出。 別名、ホットワード検出とか、キーワード検出とか、キーワードスポッティング。 このウェイクワード検出を使うと、「オッケー グーグル」とかや「アレクサ」みたいなキーワードを喋ったかどうか判断できるようになりま…

発話区間検出ライブラリSilero VADを使ってみた

音声認識システムを使うとき、無音部分までデータを送るのは料金だったりリソースの無駄になりがち。 それに、無音や雑音を音声認識させると、何かと変な結果が返ってきがち。 そこで前々から気になっていたのがVAD(Voice Activity Detection、発話区間検出)…

オフラインでストリーミング音声認識できるVoskを使ってみた

Whisperを除けば、無料でここまでできる音声認識は他に無いのでは、と思えるほど素晴らしい特長を備えた音声認識Vosk。日本語ビッグモデルでサクッと試せる記事が見当たらなかったので、まとめてみました。 Voskの特長 オフライン対応 日本語を含む20以上の…

【ROS2】3D LiDARのPointCloud2をLaserScanに変換してみた

3D LiDARデータの表示はカッコいいけど、直近で使いたいのはLaserScan形式。 いずれ実現したいと思っているナビに必要なのも、LaserScan形式。 (しばし沈黙) というわけで、PointCloud2をLaserScanにリアルタイム変換してみました。 といっても、pointcloud-…

【ROS2】LiDARで取得したlivox独自形式データをPointCloud2形式に変換してみた

Livox 3D LiDARで困ったのは、取得する点群情報のフォーマットをどうするか。 livox独自フォーマットなら、FAST_LIOなどで使えるが、rviz2では表示できない。 PointCloud2フォーマットだと、rviz2では表示できるけど、FAST_LIOで使えない。 両方扱えると嬉し…

【ROS2】FAST_LIOで3D地図を作ってみた

3D地図作成は、3D LiDARを入手したらやってみたかった事の一つ。 今回、FAST_LIOというパッケージを使って、3D地図を作ってみました。 作成できた地図 地図作成セット 地図作成に必要な手持ち機材がゴチャっとしてたので、一つにまとめるために作成。 ノート…

【ROS2】自動起動をサポートするパッケージ robot_upstart を使ってみた

PCを立ち上げるたびに毎回手動でLaunchファイルを立ち上げるのはとても面倒。 PC起動時に自動で起動させれば楽できるけど、そのためにはsystemdのユニットファイルというのを作らないといけない。 ユニットファイルは自由度が高いので書き方に迷うし、使用す…

【ROS2】livox_ros_driver2(ユーザーによる修正版) を動かしてみた

3D LiDAR Mid-360をROS2で動かすために公式が「Livox LiDAR用 ROS および ROS2 用ドライバー livox_ros_driver2」を提供してくれている。けど、公式のlivox_ros_driver2は、colcon buildでビルドできない、ビルド時に中間生成物を全部消すという謎仕様。。。…

Livox Mid-360とPCの接続

3D LiDAR Livox Mid-360とPCを接続し、公式Viewerで点群を表示したときのメモです。 環境 PC: TRIGKEY: Green G5 OS: Ubuntu 22.04.3 LiDAR: Livox Mid-360 Mid-360側IPアドレス Livox Mid-360とPCの接続にはEthernetを使用する。 Mid-360の初期IPアドレスは…

Livox Mid-360用ケーブルの自作メモ

ついに憧れの3D LiDARを購入。機種はLivox Mid-360。 購入したものの標準ケーブルだと長過ぎて邪魔なので、ケーブルを自作してみました。 といっても、市販のケーブルを切って、イーサネットのプラグをつけただけです。 注:自作ケーブルによるトラブルはメ…

M5ATOM Liteから超音波センサーを3つ動かしてみた(ROS2編)

前回の続きで、次はROS2上で動かすべく、M5Atomとmicro-ROSで超音波センサー情報を配信するプログラム m5_ros2_multi_ultrasonic を作ってみました。 M5Stackとmicro-ROSの組み合わせは2~3年前は面倒な印象だったけど、いつの間にか以前より簡単になって…

M5ATOM Liteから超音波センサーを3つ動かしてみた

ロボットの障害物検知用に超音波センサーを3~6つ動かしたくなったので、作成してみた。 環境 Windows 11 PlatformIO M5ATOM Lite M5Stack用Port A I2C拡張ハブユニット(PaHUB2 Unit) M5Stack用超音波測距ユニット I2C 3つ ハードウェアの選定と組み立て お…

【ROS2】Logicoolの無線コントローラーF710でTurtlesimを動かしてみた

久々にROS2を動かしてみたくなったので、まずはコントローラーで turtlesim を動かしてみました。 使用したコントローラーはペアリングとかも不要で簡単にワイヤレス接続できる Logicool Wireless Gamepad F710。 過去にROSで扱ったことがあるはずだけど、色…

M5Stack ATOMS3でDDT M06ダイレクトドライブモーターを動かしてみた(C++編)

www.sato-susumu.com 前回はUIFlowでDDT M06ダイレクトドライブモーターを動かしたけど、最終的にはROS2で動かしたいと考えているので、その一歩手前として次はC++で動かしてみました。 もっとコンパクトにしたいので、前回と違って、M5Stack ATOMS3+ATOMIC…

M5Stack UIFlowでDDT M06ダイレクトドライブモーターを動かしてみた

前回はPCから「DDT M0601C_111ダイレクトドライブモーター」を動かしましたが、今回は最近お気に入りのM5StackとUIFlowを使って動かしてみました。 M5StackもUIFlowもいい感じにモジュールが揃っているので、サクッと試すにはちょうどいいです。 スマホから…

プログラムを書かずにDDT M06ダイレクトドライブモーターを動かしてみた

静かで、パワフルで、制御が簡単、そんな都合のいいモーター「DDT M0601C_111ダイレクトドライブモーター」。発売開始は2年前なので、まあ今更ですけどお手軽にプログラムを書かずに動かしてみました。 この記事に記載した方法は、型番は違うけどWaveShareの…

レゴロボットでマスター・スレーブシステム

前回作ったレゴロボットを2体用意して、一つのロボットを動かすと、もう一つも全く同じ動きをする仕組みを作ってみました。この仕組みをマスター・スレーブシステムというらしい。名前ダサカッコいい。 手順はレゴモーターの各角度を取得して、もう一体のロ…

Pybricksを使って、キーボードで操作できるレゴロボットを作ってみた

Pybricksは、レゴの各種スマートハブのためのオープンソース開発環境。これを使うと、PythonやScratchのようなビジュアルプログラミング言語を使用して、レゴのモーターを動かしたり、Bluetoothを介して通信したりすることが簡単にできる。ただし、Pybricks…

LangChainのChromaの使い方メモ

LangChainで用意されている代表的なVector StoreにChroma(ラッパー)がある。 ドキュメントだけ読んでいても、どうも使い方が分かりにくかったので、適当にソースを読みながら使い方をメモしてみました。 VectorStore作成 データの追加 データの検索 永続化 …

LangChain用に句読点で分割してくれるTextSplitterを作ってみた

LangChainでテキストを分割するとき、ライブラリに含まれるRecursiveCharacterTextSplitterをそのまま使っても問題ないんだけど、なんとなく素人考えで、分割したテキストも読みやすい方がいいかなーと思って、句読点で分割してくれるTextSplitterを作ってみ…

言葉の裏に隠された感情を探る! WRIMEデータセットを使った感情解析サーバーを開発

最近、ChatGPTを使ったAI対話システムの開発をしている中で、ChatGPTが返した文章に感情情報を付与したいなーと考えてました。ChatGPTプロンプトで設定するという方法もいいのですが、もっと自由に、ネガティブまたはポジティブよりももっと豊かな感情を扱い…

Pythonを使って3Dアバターの表情を動かしてみた

Pythonを使って、人間3Dアバター向けのフォーマットであるVRMのアバターの表情を動かしてみました。 といっても、Pythonから直接VRMをゴリゴリではなく、「VMagicMirror」というVRMアバターを動かすアプリを使用しています。 このアプリは、MIDIからの入力で…