ep18113
2022.10.20
sotaが話者のほうに胴体を向けるプログラムを作成したいです。
Sotaサポート様
いつもお世話になっております。

件名の通りです。
お手数をおかけしますが、ご回答お願いいたします。
以上、何卒よろしくお願いいたします。

・質問
Sotaが顔追従(もしくは顔検出)を行っている状態で、話者のほうに胴体を向けたいと思っているんですが、実現は可能なのでしょうかj?
また、実現が可能であるならば具体的にどのような感じで行うのかを教えてほしいです。
開発環境はeclipseで行っています。
回答
Sotaサポート
2022.10.21
ep18113様
 
お世話になっております。Sotaサポートです。
Sotaでは、CRobotPoseクラスで個別に動かすモータIDを設定できるため、例えば下記のようなコードで胴体ヨー軸のみを動かすことができます(CSotaMotion motionが存在する前提です)。
 
CRobotPose pose = new CRobotPose();
pose.SetPose( new Byte[]{1},
new Short[]{400}
);
pose.SetTorque( new Byte[]{1},
new Short[]{100}
);
motion.play(pose,2000);
CRobotUtil.wait(2000);
 
 
また、顔追跡と検出した顔の座標情報の取得については、VstoneMagicで下図のようなプログラムによって実現できます。同様のプログラムを作成して、プロジェクト内のソースコード(srcjpcomysotamymain.java)を参照すると実装方法がご確認いただけます。
顔の座標情報は、このプログラムではGlobalVariable.faceresultに代入され、GlobalVariable.faceresult.getCenterPoint(0)を実行することで、最初に見つかった顔の座標をPointで取得できます。
ep18113
2022.10.21
Sotaサポート様 いつもお世話になっております。 早速実装してみたのですが、エラーを吐いてしまい、実行できていません。 エラー内容については、ログ出力のAPIではPointはString型に変換できないというものだったのですが、ログ出力のAPIの中は「GlobalVariable.faceresult.getCenterPoint(0)」でお間違えないですか? 間違っているようでしたら、ご教授よろしくお願いします。 また、顔検出及び座標取得はvstonemagic上で可能とのことでしたが、ソースコード(srcjpcomysotamymain.java) は何も変更を与えていないということでよろしいでしょうか?
ep18113
2022.10.21
Sotaサポート様
いつもお世話になっております。
追加質問失礼します。
現在、「System.out.println(GlobalVariable.faceresult.getCenterPoint(0));」という形で、座標の表示は行えました。質問に答えてありがとうございます。

私の最終的な目標としては、顔追跡し、顔が向いている分だけ胴体も動かして話者に向けてposeを行うということです。
今現在座標は取得することができましたが、その座標を使って胴体に使用する方法というのがわかっていない状況です。
何か方法がわかれば教えていただきたいです。
長文失礼しました。
Sotaサポート
2022.10.24
ep18113様

お世話になります。Sotaサポートです。
PointとStringの型の違いにつきまして、ログとして出力するにはご質問の通りString形式にする必要がありますが、プログラムとしては数値で取得する必要があるため、そのように記述させていただきました。
基本的にはgetCenterPointでカメラ画像中の顔の座標が取得できますので、目的に応じて適時型を変換してお使いください。

「srcjpcomysotamymain.java」は、フォーラムの投稿の際に記号が抜けてしまっておりました。正しくは「src/jp/co/mysota/mymain.java」になります。
VstoneMagicで作成したSota用プロジェクトのデフォルト設定では、作成したプログラムがこのソースに書き込まれますので、Javaを直接コーディングされている場合でも、VstoneMagicでプログラムの作成後にこのソースをご参照いただくとヒントになるかと思い紹介いたしました。

顔追従のプログラムの首の動きを別の軸(胴体)に置き換えることはできないため、先の回答では代替方法の一つとしてカメラで顔の位置を取得し、別途胴体をその方向に向きなおす例を提示しました。
ただ、この方法だとSotaが顔を真正面にとらえた時に、体を基準とした絶対的な角度の確認が難しいため、別の方法として、現在の全身のポーズを取得して、首ヨー軸の角度から絶対的な角度を割り出して胴体ヨー軸を動かす方法の方が適切だったかもしれません。
よろしければそちらの実装をお試しください。
ep18113
2022.10.24
Sotaサポート様
いつもお世話になっております。

現在getServoAnglesを使い、首のヨー軸のサーボの角度を取得し、胴体に代入するプログラムを作成しましたが、「エラー: 不適合な型: Short[]をShortに変換できません:」というエラーが出てしまい、実行できていません。ここで質問なのですが、getServoAnglesを使い、首のヨー軸のサーボ角度を胴体に代入することは物理的に無理なのでしょうか?
コードを添付させていただきますので、わかることがあれば教えていただきたいです。
私自身の知識不足で何度質問してしまいすいません。


 
ep18113
2022.10.24
コードが見切れていたので再投稿させていただきます。
Sotaサポート
2022.10.25

ep18113様

お世話になっております。Sotaサポートです。
申し訳ありませんが、コードのデバッグに関する事項は承っておりません。発生しているエラーは一般的な変数・オブジェクトの型の指定違いですので、必要なメソッドに対して適切な型でデータを渡すことで解決するかと思います。
pose.getServoAngle(byte servoid)で指定のID1軸分の角度、pose.getServoAngles(byte[] servoids)で指定のID複数のモータの角度をそれぞれ取得できますので、そこで得られた数値を用いてpose.SetPose(),motion.play()をそれぞれ実行することで、目的の動作に近いものを作成いただけるかと思います。
ep18113
2022.10.25
Sotaサポート様
いつもお世話になっております。

質問に答えていただきありがとうございます。
getServoAngleと​getServoAnglesについて質問なのですが、サーボの角度を取得する際の実行例などがあれば教えていただきたいです。
 
Sotaサポート
2022.10.26
ep18113様
 
お世話になります。Sotaサポートです。
getServoAngleを用いて、ID6(首ヨー軸)の角度を取得し、それをID1(胴体ヨー軸)に設定するコード例は下記のようになります。
CSotaMotion motionが定義されている前提となります。
 
CRobotPose pose =(CRobotPose)motion.getReadPose();
 
short axispos = pose.getServoAngle((byte)6);
pose.SetPose( new Byte[]{1},new Short[]{axispos});
 
motion.play(pose,2000);
CRobotUtil.wait(2000);
ep18113
2022.10.26
Sotaサポート様
いつもお世話になっております。

質問に答えていただきありがとうございます。
ep18113
2022.10.27
Sotaサポート様
いつもお世話になっております。

顔追従を用いた話者の方に胴体を向けるプログラムの方は完成したのですが、自分が思っていた挙動と少し違ったので、顔検出を用いて話者の方に胴体を向けたいと考えております。

現在完成している部分を説明させていただくと、
1、顔検出を行い、顔を見つけた場合
Point point = GlobalVariable.faceresult.getCenterPoint(0); 
System.out.println(point.x);
という文を用いて顔の中央座標のx座標の出力は成功している

今現状わかっていないことは、顔の中央座標のx座標を取得できたとして、その座標をどのように胴体のヨー軸角度に挿入するのかということです。
わかることありましたらご教授のほうよろしくお願いします。

 
Sotaサポート
2022.10.28
ep18113様

お世話になります。Sotaサポートです。
プログラムの作成方法自体につきましてはサポート範囲外のため、お答えいたしかねます。
また、画像中の座標と胴体ヨー軸の対応ですが、弊社では過去に作例等が無いため具体的な対比などは把握しておりません。基本的には実機にて実際に撮影・動作を行いご確認いただくことで、対応する角度は概ね求めていただけるかと思います。

何卒宜しくお願い致します。
ep18113
2022.11.10
Sotaサポート様
いつもお世話になっております。

話者の方を向くプログラムを作成するうえで、Sotaのカメラ画角について教えていただきたく質問させていただきました。

何卒よろしくお願いします。
Sotaサポート
2022.11.11
ep18113様

お世話になります。Sotaサポートです。
Sotaのカメラ画角等仕様につきましては、下記をご参照ください。
http://www.vstone.co.jp/sotamanual/index.php?%E4%BB%95%E6%A7%98%E8%A9%B3%E7%B4%B0#g0304e6d
この質問に回答する
 

Page Top