『犬は、好き?』

上司のこのひと言が、私と組込み犬の二人六脚(一人と一匹)によるスキルアップチャレンジの始まりだった。

技術サポートに配属されたエンジニア2年目の私。組込みソフトウェア開発の経験もまだまだ浅く、先輩が書いたコードを読んで、変更を加える開発作業にもまだ苦労をしている。

『まず名前をつけたら?』と、上司から手渡されたものは、Freenove社のロボットドッグキット。

ESP32搭載ロボットドッグキット

手渡されたそれは、組み立てからプログラミングまでを段階的に解説したガイドとサンプルコード付きのプログラミング学習教材だった。

教材になっているものの、ハードの組み立てからソフトの仕様を考えて、設計・開発までひとりでチャレンジするのはとても不安。もっと不安なのは、どう見ても猫のフォルムだが、どうも犬らしい。
開発元の国ではコレをドッグというのか…。

こうして、組込み犬開発プロジェクトが始動してしまった。

 

Mission1:生みの親ならぬ組み立ての親となる

ロボット工学やプログラミングを学ぶためのロボットドッグキットは、こんなスペック。

 

ロボットドッグキット概要

  • メインコントローラ「ESP32 WROVER」
    • 最大240MHzのデュアルコア32ビットマイクロプロセッサ
    • 4MBフラッシュ、8MB PSRAM搭載
    • 2.4GHz Wi-FiとBluetooth 4.2(LE)を内蔵、カメラも接続可能
  • 4本の足にはそれぞれ3つの「サーボモーター」を搭載
  • 頭部には「カメラ」と「超音波距離センサー」を内蔵
  • Androidスマートフォン/タブレット、iPhone(Freenoveアプリ使用)、またはWindows/macOS/Ubuntu搭載のPCから、ワイヤレスで制御可能
  • 統合開発環境:Arduino IDE
    • コードの作成、コンパイル、ESP32への書き込み
    • C/C++をベースとしたシンプルな構成
  • ロボット本体の部品、組み立てマニュアルや回路図、配線図、サンプルコードもあり、ハードウェアの組み立てからソフトウェアの開発までを一通り体験できる
 

ネジ締めスキルが上がるかも

公式サイトの組み立てマニュアルを見ながら、ロボットドッグを設計書どおりに組み立てていく。
自分のネイルを塗る器用さはあるけど、プラモデルは作ったことがない。想像以上にネジの数が多くて、ひたすらネジ締めとの格闘となる。

ロボットドッグ「だいきち」を組み立てる様子
 

ロボットドッグの組み立て完成

別の角度から見たロボットドッグ「だいきち」
組み立てが完成したロボットドッグ「だいきち」
 

足の関節をキャリブレーション

組み立て後は、サンプルコードを書き込んで、動かしてみる。

まずは、足の関節となるサーボモーターのキャリブレーションが必要らしい。Bluetooth経由でスマホアプリと接続し、まっすぐ自立できるよう細かな調整作業を行う。わずかな角度の違いで姿勢が崩れてしまうため、微調整がけっこう難しく、何度もやり直すことに。

▼スマホのUI

ロボットドッグを操作するスマホアプリ画面
ロボットドッグの足を調整するスマホアプリ画面

▼スマホで操作中

 

Mission2:組み立ての親として自立させたい

 

ロボットドッグに名前をつける

やっぱり犬には見えない。猫っぽくも見えるが、ケモノ感がある…。
でも、スマホで思い通りに動いてくれるロボットドッグに愛着が湧いてしまう。
キモかわいいロボットドッグに名前をつけたい。

私にロボットドッグを押し付けた上司は、ひらがなの名前が良いと言ってた。
ESP32の「32」という数字には、「32ビット」以外にも意味がある。
占いや風水では「幸運」や「五大吉数のひとつ」とされていて、「エンジェルナンバー」としても縁起の良い数字らしい。

あれこれ悩んだ末、私は【だいきち】の組み立ての親になった。

 

自立させたいのは親ごころの芽生えか

スマホ操作のラジコンみたいに思い通りに動かせる、キモかわいい【だいきち】。
でも次は、組み立ての親として自立させたい。

サンプルコードをカスタマイズすれば、センサーの外部入力にあわせて、いろいろな動作を制御できるはず。

私好みの要件定義は以下の通り。

  • スイッチによる入力
    • 短押し:お座りをする
    • 1秒以上の長押し:右に旋回する
    • 2秒以上の長押し:左に旋回する
    • ダブルクリック:挨拶動作をする
  • 距離センサーによる入力:ひとの手や物体との距離検出
    • 5cm以内の状態が2秒間継続:ダンス動作をする
    • 10〜20cm:2〜3歩だけ前進する
    • 25〜35cm:背伸び動作をする

あれこれやらせたいのは親ごころなのか、親のエゴなのか。よくわからないが、組込み犬の今後の成長にワクワクしている。

 

Mission3:生成AIをフル活用

 

AIを相棒にコードリーディング&バイブコーディング

想像以上に膨大なサンプルコードを限られた時間で理解し、カスタマイズするには不安しかなかった。でも、会社では生成AIの積極的な業務活用が推奨されているので、ここは頼ってみる。

▼生成AI利用時のイメージ

生成AIにソースコードの役割や修正箇所を質問するイメージ

NotebookLMにソースコード一式を読ませて、追加したい機能を実現するため、
「各関数はどのような役割を持っているのか」「各ソースファイルは何を担当しているのか」
「目的の動作を実現するにはどこを修正すればよいのか」といった内容を質問しながら、既存コードを調査する。

その結果、利用できる既存関数や新たに作成すべき処理、開発に必要なソースファイルと不要なソースファイルを整理することができた。

AIを使うと、コード量が多くても横断的に質問ができるので、システム全体の構成やモジュール間の関係を容易に理解できる。

「このような動きをさせたい」と生成AIに相談すれば、変更すべき関数やコードの修正方法を提案してくれるので、その内容を参考に実装を進めることができた。

AIは親切・丁寧に解説してくれるし、ノンストレスで追加質問もたくさんできて、私のコード理解は深まるばかり。上司に質問するのとは、わけが違う。

組み立ての親の愛(AI)によって、コードが実装され、私は【だいきち】の一番の理解者となった。

 

Mission4:私は育ての親となる

 

私好みの追加機能は正しく動いているか!?

私好みにカスタマイズした制御と応答機能が、仕様どおりに動いているのか。
それを確かめるため、動作の見える化を試みた。

使ったのは、ハートランド・データの動的テストツール「DT+Trace」。
ソフトウェアの動きを止めずに、プログラムの実行経路やタイミングをまるごと可視化できるツールだ。

動的テストツール「DT+」の詳細はこちら →

トレース結果と実機の目視、その両面から検証したところ、期待どおりの動作がしっかり実現できていた。

 

スタンドアロンの組込み犬

DT+Traceを使って、動作の見える化に成功し、私は開発者、いや、育ての親として、【だいきち】をスタンドアロンにできた。これで一匹前の組込み犬となった。

かしこい【だいきち】は、手をかざすと、近くに寄ってくる。
「おさんぽ用リード」を模したスイッチを押下すると、ごきげんで私に挨拶をしてくれる。
まるで【だいきち】は、ほんとに意思を持ってしまったかのようだ。

 

Mission5:完成しても心配をする上司

 

完成報告

あれから半年、通常業務の合間に、20%ルールで進めてきた私の組込み開発実習も、いよいよ完成報告の時が来た。

まるで生き物となった【だいきち】の実動作をデモしながら、上司に完成を報告する。
私好みの仕様どおりに動く【だいきち】。その動作をDT+Traceで計測・解析したエビデンスは、この完成報告を乗り切るための私の強力な武器である。

…はずだった。

 

ほんとの完成とは?

報告を受けた上司は一緒に完成を喜んでくれるものと思っていた。しかし、上司から返ってきた言葉は、予想もしないものだった。

『ほんとに完成として大丈夫?』『動いているようには見えるけど、テストは足りてる?』

目の前が真っ白になるって、こういうことなの!?
今日は週末。定時で帰って、推しのYouTubeを見てから、どう◯◯の森で遊ぶという計画までもが、ホワイトアウトに飲み込まれていく。

意識を取り戻した私は、上司に対してなのか、自分に対してなのかが分からないまま、こぼれ出す苛立ちをおさえながら、こう言い放つ。

『あと何をやるべきか、ご指示いただけますと幸いです!』

 

以前とは違う

上司の指示どおり、不具合箇所の変更点、C0カバレッジの結果、未通過となる処理をひとつずつレビューしていく。
そうして、開発作業が終わったことを、あらためて上司に報告できた。

でも、なぜだろう、上司はさらに問いかけてくる。

『なるほどね…で、これで大丈夫なの!?』

カバレッジ計測前の私であれば、またホワイトアウトしていたかもしれないが、今回はなんだか景色が違って見える。
以前とは違う私、今なら言える。動いているように見えることと、実際に確認できていることは違うのだ。

 

Mission Complete:めざせ!組込み犬マスター

私ははっきりと答える。『レビューのとおり、ここまで確認できたので、大丈夫です!』

上司は笑顔で承認する。『やっと完成できたね、お疲れ様でした。』

上司が最後に求めていたのは、開発者である私が「リリースする自信と勇気」を持つことであった。
それは、品質でもあり、責任でもあり、私の成長の証である、と上司は言う。

しつこい問いに、なんか悔しい思いもしたけど、ちょっと納得。

私がひとりで一から【だいきち】を組み立て、育成するという組込み開発体験をすることで、私自身がエンジニアとしての成長実感を得られたのは事実だ。

今後ももっといろいろな機能を追加し、さらにパワーアップした推し犬【だいきち】を展示会のデモ機として、みなさんにお披露目したい。

組込み犬マスターにぜったいになってやる!

ESP32(Arduino環境)の動的解析によるデバッグ手法

だいきちの動作検証を題材に、DT+Traceによる実行経路の見える化とC0カバレッジ分析をご紹介。動作の確認から不要コードの発見まで、実際の検証結果を紹介します。