Webots講座の10回目です.今までPythonを使っていましたが,C言語でプログラミングしてみましょう.
レファレンス
環 境
- Windows 10
- Webots R2021b:この記事で使っているJetBotはR2021bから新たなロボットモデルとして追加されました.
はじめてのWebotsプログラミング
- 準 備
- プロジェクトを格納するフォルダとして”C:\ユーザ\ユーザ名\webots”をエクスプローラで作成する.
- プロジェクトの作成
- メニューの[ウィザード]→[新規プロジェクトのディレクトリ…]を選択する.ディレクトリはフォルダのこと.下の窓が開くので[次へ(N)]をクリックする.
- 「ディレクトリの選択」窓になるのでmy_projectをhello_worldに変更して[次へ(N)]をクリックする.下のdemuraは私のユーザ名なので,自分のユーザ名に変更する.
- 「World settings」窓になる.ワールドはシミュレータ上の仮想世界になり,ロボットはそのワールドで動作します.ここでは,ワールド名はhello_world.wbtに変更し,一番下の”Add a rectangle arena”にチェックを入れて[次へ(N)]をクリックする.ワールド名の最後のwbtはワールドファイルの拡張子となります.
- 「結果」窓になるので[完了(F)]をクリックする.
- 市松模様のボードRectangleArena(四角いアリーナ)が下図のように現れる.
- 次に,このRectangleArenaの属性を変えてみよう!左欄の上から5番目にあるRectangleArenaをダブルクリックすると展開され属性が現れる.まず,床のサイズを変更しよう.floorSizeをクリックすると,下欄[Selection floorSize (Vector2)]のxとyに2を入力するとサイズが縦横2倍になる.同様にして,floorTileSizeやwallHeightなどを変えて遊んでみよう.変更したらメニューバーの[ファイル]→[ワードファイルを保存]を選択してワールドを保存する.
- メニューの[ウィザード]→[新規プロジェクトのディレクトリ…]を選択する.ディレクトリはフォルダのこと.下の窓が開くので[次へ(N)]をクリックする.
- ロボットの追加
- 次にロボットをアリーナに登場させよう.ロボットはいろいろ用意されているが,ここではWebotsバージョン2021bから追加されたNVIDIAのJetBotに登場願おう.RectangelArenaをクリックして,その上にある[+]をクリックすると[ノードを追加]窓が開くので,[PROTO nodes (Webots Projects)]→[robots]→[nvidia]→[jetbot]→[JetBot (Robot)]を選択して[追加]をクリックする.
- 下図のように真ん中に黒い四角形のウインドウが現れてアリーナが良く見えない.黒い四角形の右上の×印をクリックしてウインドウを閉じる.
- 下図のようにJetBotが半分アリーナに埋もれた状態で現れる.これを正常な姿勢にするために,シーンツリーの[JetBot “JetBot”]→[rotation]をクリックする.
- シーンツリーの下に[Selection rotation (Rotation)]のウインドウが開くので次の値を入力して,ロボットをx軸周りに-1.57[rad]回転する.これで正常な姿勢になった.メニューから[ファイル]→[ワールドファイルを保存]する.なお,下図の赤矢印はx軸,緑矢印はy軸,青矢印はz軸となっています.
- 次にロボットをアリーナに登場させよう.ロボットはいろいろ用意されているが,ここではWebotsバージョン2021bから追加されたNVIDIAのJetBotに登場願おう.RectangelArenaをクリックして,その上にある[+]をクリックすると[ノードを追加]窓が開くので,[PROTO nodes (Webots Projects)]→[robots]→[nvidia]→[jetbot]→[JetBot (Robot)]を選択して[追加]をクリックする.
- コントローラの作成
- ワールドとロボットを作ったので,次はコントローラを作成する.Webotsではコントローラをプログラミングすることでロボットを動かすことができます.メニューバーから[ウィザード]→[新規ロボットのコントローラ…]を選択する.「新規コントローラの作成」窓が開くので[次へ(N)]をクリックする.
- 「言語選択」窓が開くので”C”にチェックを入れ,[次へ(N)]をクリックする.
- 「IDE selection」窓になるので,Webots (gcc/ Makefile)にチェックを入れて,[次へ(N)]をクリック.
- 「名前の選択」窓になるので,コントローラの名前を入力する.ここでは”hello_world”にする.[次へ(N)]をクリック.
- 「結果」窓になるので[完了(F)]をクリックする.
- テキストエディタが開き,次のコントローラの雛形プログラムが自動的に作られる.
- ここでは,上の雛形コードを下のように変更する.プログラミング言語で定番の初めてのコードといえば,”hello, world”ですね.変更したらエディタの上にあるフロッピーディスクの形をしたsaveアイコンをクリックして保存し,歯車の形をしたbuildボタンでコードをビルドする.なお,ビルドしただけではプログラムは動きません.
#include <stdio.h> #include <webots/robot.h> int main(int argc, char **argv) { wb_robot_init(); while (wb_robot_step(64) != -1) { printf("hello, world\n"); } wb_robot_cleanup(); return 0; }
- ワールドとロボットを作ったので,次はコントローラを作成する.Webotsではコントローラをプログラミングすることでロボットを動かすことができます.メニューバーから[ウィザード]→[新規ロボットのコントローラ…]を選択する.「新規コントローラの作成」窓が開くので[次へ(N)]をクリックする.
ソースコードを説明します.1行目で標準入出力用のヘッダファイル,2行目でWebotsに必要なヘッダファイルをインクルードします.5行目でWebotsを初期化し,11行目で終了処理をしています.7行目のwb_robot_step(64)はシミュレータのタイムステップを表し,1ループで64[ms]シミュレーションを進めるという意味です.この時間を小さくすると計算精度は高くなりますが,シミュレーションは遅くなります.逆に大きくするとシミュレーションは速くなりますが,精度が悪くなり,シミュレータと実世界でのロボットの動きが変わってしまいます.このコントローラはロボットを動かすのではなく,シミュレータが終わるまで,”hello, world”とコンソールに出力し続けるだけです.
- ロボットへのコントローラ組込み
- 実 行
- プログラムを実行するためには,まず,シミュレーション表示部分の上にある,[reset]ボタンを押して,シミュレーションをリセットして初期化します.次に,[run]ボタンを押すとプログラムが実行され,下欄の[Console – All]に “hello, world”と表示されます.今回のプログラムはコンソールに”hello world”と表示するだけの簡単なものです.次回は車輪型ロボットを自作してプログラムで動かしますのでお楽しみに!
ハンズオン
- 新しいプロジェクトを作成して,次のハンズオンを実施してください.
- 市松模様のアリーナRectangleArenaのサイズを変更してみよう.
- 好きなロボットをアリーナに登場させよう.
- コンソールに”I am Happy Robot”と表示するプログラムを作成しよう.
終わり
コメント