日経ソフトウエア2026年5月号

24日発売の雑誌「日経ソフトウエア2026年5月号」で2件の記事を書かせて頂きました。

・特集、ロボットシミュレーション・プログラミング入門、前編。

・連載、生成AIでプログラムを作ろう第5回目。

 

ロボットシミュレーションの特集記事は「フィジカルAI」がどうのというタイトルが付いてますが、実際のところはフィジカルAIとあまり関係ないです。「PyBullet」は無料で使えてオススメです。コードがPythonで書けるので、AIは簡単に導入できます。最初、四足歩行ロボットを動かそうと思ったのですが、難解すぎたので、4輪の車を扱うことにしました。四足歩行ロボットは後編で取り上げる予定です

 

生成AIの連載記事では10言語対応の翻訳アプリを作ってみました。これはChatGPTだと楽勝で作れると思うのですが、ローカルLLMを使ったので結構、苦戦しました。

ダイソーのハンダ(110円)

ダイソーでハンダを買ってみました。税込110円

ハンダの直径は1mm。ヤニ入り、鉛入りのハンダです。

パッケージのどこを見ても長さが書いてありません。重さも不明です。

 

うろ覚えで上皿天秤っぽいものを自作してみました。

ハンダの反対側に12円ぶんの硬貨を載せたら釣り合いました。10円玉=4.5g、1円玉=1gとすると、重さは6.5gです。グラムあたり約17円ですね。

 

以前は太洋電機産業(goot)の「SD-62」という精密プリント基板用ハンダをよく買っていました。4年前の秋月の領収書によると、当時の価格は14gで210円。グラムあたり約15円でした。

「SD-62」は知らないうちに販売が終わっていて(廃番とのこと)、今は紙パッケージの「SD-82」に切り替わっています。秋月のWebサイトによると、現在の「SD-82」の価格は14gで400円。グラムあたり約29円です。4年間でハンダが2倍近く値上がりしてるということになります。

そう考えると、ダイソーのハンダはかなりお買い得な気がします。

 

nicotakuya.hatenablog.com

「トップライダー」専用コントローラーの互換品を作る

ファミコン用ゲーム「トップライダー(1988年発売)」の専用コントローラーの互換品を作ってみました。

回路図とプログラムはGitHubに公開しています。

github.com

 

 

「トップライダー」はバイクのレースゲームです。専用コントローラーはバイク部分とハンドル部分で構成されています。バイク部分は風船のように空気で膨らませます。プレイヤーはそれにまたがります。

バイクを傾けて遊ぶという操作方法は「ハングオン」と一緒です。専用コントローラーは非常にレアで高額です。カセット単体は結構安く入手できますが(自分の場合は税込340円で購入)、専用コントローラーがないと遊べません。

(隠しコマンドを使うと備え付けのコントローラーで遊べるのですが、ハングオンが出来きません。速度を上げるとコーナーで引っかかります。)

 

Arduinoを使って専用コントローラーを再現してみました。

左から順にシフトスイッチ(ギヤの切り替え)、アナログスティック(左右の傾きとウイリー)、OLED、アクセルボタン、ブレーキボタン、セレクトボタン、スタートボタンです。OLEDはデバッグ用です。本来、アクセルはグリップ型ですが、ここではボタンにしました。

本来ならば加速度センサーでバイクの傾きを検出するべきですが、アナログスティックで済ませました。

 

https://problemkaputt.de/everynes.htm#controllersinflatablecontrollers

通信方法はMartin Korthさんが開発したエミュレータ「NO$NES」の技術情報を参考にさせて頂きました。

 

ファミコンからの出力信号を測定してみました。ラッチが2つもあって混乱したのですが、OUT0は見ないで、OUT1を見れば良いだけでした。ラッチ開始直後にクロックが8回来るので、そのタイミングでデータをファミコンに送信します。

 

「トップライダー」をプレイ中の様子です。

アナログスティックの左右でバイクを傾けます。バイクの傾きは水平+左3段階+右3段階=7段階あります。アナログスティックを下に入れるとウイリーするように割り当てましたが、使いどころがわかりません。

NO$NESの資料によるとアクセルは「Slow」「Fast」「Turbo」の3種類があるとのことですが、製品のパッケージにはそういう表記はないので単に「Turbo=最高の加速」という意味だと思います。ここではボタンを押したら「Turbo」に設定しました。

バイクの速度比較です。Fastだと直線で200km/h止まりですが、Turboだと240km/hオーバーになりました。

実際にゲームを遊んでみましたが、ビジュアルもサウンドもかなり頑張っていると思います。真面目にリアルを目指してます。コンセプトが奇抜すぎて、キワモノ扱いされているのがもったいないです。互換品のコントローラーが普及すれば、もっと正当に評価されるようになるかもしれません。

 

www.youtube.com

 

(おまけ) 2018年に雑誌の記事を書く時に作った「Nintendo Labo」のバイク型Toy-Conです。やっていることは「トップライダー」と全く一緒ですね。これにもウイリーする機能がありました。

 

nicotakuya.hatenablog.com

nicotakuya.hatenablog.com

ファミリートレーナー専用マットコントローラーの互換品を作る

「ファミリートレーナー専用マットコントローラー(1986年発売)」の互換品を作ってみました。ボタンを押すだけで、マットを踏んだ代わりになるというゲームパッドです。試していませんが、「ぽっくんモグラー」も遊べるかもしれません。

 

回路図です。4列×3行のキーマトリックスです。Nesdev Wikiの情報を参考にしました。読み書きするアドレスとビット番号から回路を推測しています。

https://www.nesdev.org/wiki/Power_Pad

ボタンがONの時にHighをファミコン側に送信するという仕様なので、ロジックICで論理を反転しています。必要な部品は小信号ダイオード12個、スイッチ12個、ロジックIC、集合抵抗、ファミコン用15pinコネクタ(メス型)です。手持ちの部品の都合で74HC00を使いましたが、74HC04でも良いと思います。

自作する場合には安全に配慮してください。動作無保証です。万が一、事故が発生した場合の責任は負いかねます。

 

ファミコンからの出力信号を測定してみました。Lowでその行を読み込みます。OUT2→OUT1→OUT0の順にボタンを4つずつスキャンします(ボタン4個×スキャン3回=計12個)。誤認識対策のため、Lowに落ちる時間が長いです。最後OUT0がLowに落ちっぱなしになっていますが、備え付けのゲームパッドを読み込むためだと思います。

 

ファミリートレーナーの第1弾「アスレチックワールド」をプレイ中の様子です。6番と7番を長押しすると、ゲームがスタートします。これでマットコントローラーがなくてもファミリートレーナーのゲームが遊べるようになりました。

 

参考までにマットコントローラーの実物がこちらです。大きいです。

 

www.youtube.com

 

nicotakuya.hatenablog.com

nicotakuya.hatenablog.com

DIY-ROBOT ver.2.0(製作費約3000円の自作ロボット)

自作ロボット「DIY-ROBOT」を、Ver.2にアップデートしました。

左がVer.1(旧型)で、右がVer.2(新型)です。

回路図とプログラムはこちらで公開してます。

github.com

 

Ver.1は製作費が4762円だったので、反省して、今度のVer.2は製作費を3030円にまで抑えました。ディスプレイ以外は性能を落としていないつもりです。

とにかく安い部品に切り替えました。ラズパイPicoは初代を使ってます。

タイヤはペットボトルのフタと輪ゴムで作ったので、0円です。回転軸にはホットボンドで固定しています。

基板のスペーサはコンビニでもらったストローを6mmくらいに切って使ってます。

ボールキャスターだった部分をどう作るのか、いろいろ悩んだのですが、結局、単線のワイヤーで浮かせるだけで済ませました。

ギヤードモーターは激安の280円ですが、小さくて、回転が静かで素晴らしいです。もっと早く使えば良かった。ただし、6V仕様なので、デューティ比が50%以上でないとストールしてしまいます。

 

ディスプレイをOLED(モノクロ2諧調)に変えたので、カラー表示ができなくなりました。カラーセンサーは正常に機能しています。

 

拡張端子に1.54インチのTFT液晶を接続すると、カラー表示ができます。

互換性を保つため、VRAMのデータは16ビットカラーで格納しています。TFT液晶の場合はフォントを3倍に拡大したり、できるだけ見た目が同じになるように工夫しています。

 

拡張端子にSDカードスロットを接続すると、SDカードの読み書きができます(Arduino-Pico版のみ)。SDカードの使い道はいまだに不明です。

 

www.youtube.com