ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
来週のRTM講習会のプログラミング実習の手順をまとめたので参考にしてください。
チュートリアル(EV3)
チュートリアル(Raspberry Pi Mouse)
読んでもらえば分かる通りRaspberry Pi、EV3を無線LANアクセスポイントにして接続する予定でしたが有線での接続に変更になりました。
一応無線でも接続できるので、やりたい人はそれでも構いません。
レゴマインドストームEV3が16台、Raspberry Pi Mouseが15台の計31台あるので、1人1台で実習を行います。
個人的にはラズパイマウスをお勧めします。
何故かと言うとチュートリアルを見てもらえば分かる通りEV3は動かすまでにやることが多いからです。
まず箱に入りきらなかったので分解した状態で参加者の皆さんに配ります。一応組み立てる手順は記載してあるので自分で組み立ててもらいます。
あと環境によっては手動でドライバーの更新を行う必要があるかもしれません。
どうせ2時間しかないのだから動いたと言うだけでも充分だと思った方がよさそうです。
一番気を付けなければならないのはネットワークアダプタが複数ある場合で、トラブルに発展する可能性が非常に高いです。
チュートリアルにも書いてありますが、ネームサーバーやRTCを起動する前に無線LANは切っておくことをお勧めします。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
チュートリアル(EV3)
チュートリアル(Raspberry Pi Mouse)
読んでもらえば分かる通りRaspberry Pi、EV3を無線LANアクセスポイントにして接続する予定でしたが有線での接続に変更になりました。
一応無線でも接続できるので、やりたい人はそれでも構いません。
レゴマインドストームEV3が16台、Raspberry Pi Mouseが15台の計31台あるので、1人1台で実習を行います。
個人的にはラズパイマウスをお勧めします。
何故かと言うとチュートリアルを見てもらえば分かる通りEV3は動かすまでにやることが多いからです。
まず箱に入りきらなかったので分解した状態で参加者の皆さんに配ります。一応組み立てる手順は記載してあるので自分で組み立ててもらいます。
あと環境によっては手動でドライバーの更新を行う必要があるかもしれません。
どうせ2時間しかないのだから動いたと言うだけでも充分だと思った方がよさそうです。
一番気を付けなければならないのはネットワークアダプタが複数ある場合で、トラブルに発展する可能性が非常に高いです。
チュートリアルにも書いてありますが、ネームサーバーやRTCを起動する前に無線LANは切っておくことをお勧めします。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
PR
本題に入る前に、OpenRTM-aist-1.1.2がリリースされました。
今回からC++版、Python版、Java版が一気にインストールできるようになりました。
また過去のバージョンのdllもインストールできるようになったわけですが、そのディレクトリへのパスは通していないので手動で設定してください。
set PATH=%RTM_BASE%1.1.1\vc12\bin;%PATH%
別に1.1.2に限った問題ではないのですが、環境変数PATHでOpenRTM-aistへのパスよりもPythonへのパスの方が先にある場合にIDLファイルのコンパイルに失敗します。
これはOpenRTM-aistをインストールしたディレクトリのomniidl.exeではなくPythonディレクトリのomniidl.exeを使おうとするためなのでPythonのパスがOpenRTM-aistのパスより後になるようにしてください。
本当はこれを使いたいのですが、
C:\Program Files (x86)\OpenRTM-aist\1.1.2\omniORB\4.2.1_vc12\bin\x86_win32\omniorb.exe
間違ってこっちを使ってしまいます。
C:\Python27\omniorb.exe
ちなみにどちらもomniidl.exe自体の動作は全く同じです。周りのファイルが違うだけです。
もしくはC:\Program Files (x86)\OpenRTM-aist\1.1.2\omniORB\4.2.1_vc12\lib\python\omniidl_beにあるcxxフォルダをC:\Python27\Lib\site-packages\omniidl_beにコピーすればPython以下のomniidl.exeでC++、Python両方のIDLコンパイルができるようになります。
C:\Program Files (x86)\OpenRTM-aist\1.1.2\omniORB\4.2.1_vc12\lib\python\omniidl_be\cxx
を
C:\Python27\Lib\site-packages\omniidl_be
にコピーします。
omniidlの-b***オプションはomniidl_beフォルダ内のPythonファイル***.pyのrun関数を実行するだけのようなので、OpenRTM-aistをインストールしたディレクトリのomniidl_be内のcxxをコピーするだけで大丈夫なはずです。
ここからが本題です。
ROBOMECH2016で開催されるRTM講習会ですが、プログラミング実習は予習必須です。
理由は察してください。僕がそもそも講習会初参加なので、教えられるか不安です。
以下のページを穴が開くぐらい読んでおいてください。
Raspberry Pi Mouse 活用事例
LEGO Mindstorms EV3 活用事例
実習ではEV3、Raspberry Piを無線LANアクセスポイントにしてそこに接続するわけですが、ネットワークを切り替える際にトラブルが起こると予想しています。
困ったらネーミングサービスを再起動してください。それで何とかなる場合もあります。
とにかく無事に終わることを願うばかりです。
失敗してもあまり怒らないでください。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
今回からC++版、Python版、Java版が一気にインストールできるようになりました。
また過去のバージョンのdllもインストールできるようになったわけですが、そのディレクトリへのパスは通していないので手動で設定してください。
set PATH=%RTM_BASE%1.1.1\vc12\bin;%PATH%
別に1.1.2に限った問題ではないのですが、環境変数PATHでOpenRTM-aistへのパスよりもPythonへのパスの方が先にある場合にIDLファイルのコンパイルに失敗します。
これはOpenRTM-aistをインストールしたディレクトリのomniidl.exeではなくPythonディレクトリのomniidl.exeを使おうとするためなのでPythonのパスがOpenRTM-aistのパスより後になるようにしてください。
本当はこれを使いたいのですが、
C:\Program Files (x86)\OpenRTM-aist\1.1.2\omniORB\4.2.1_vc12\bin\x86_win32\omniorb.exe
間違ってこっちを使ってしまいます。
C:\Python27\omniorb.exe
ちなみにどちらもomniidl.exe自体の動作は全く同じです。周りのファイルが違うだけです。
もしくはC:\Program Files (x86)\OpenRTM-aist\1.1.2\omniORB\4.2.1_vc12\lib\python\omniidl_beにあるcxxフォルダをC:\Python27\Lib\site-packages\omniidl_beにコピーすればPython以下のomniidl.exeでC++、Python両方のIDLコンパイルができるようになります。
C:\Program Files (x86)\OpenRTM-aist\1.1.2\omniORB\4.2.1_vc12\lib\python\omniidl_be\cxx
を
C:\Python27\Lib\site-packages\omniidl_be
にコピーします。
omniidlの-b***オプションはomniidl_beフォルダ内のPythonファイル***.pyのrun関数を実行するだけのようなので、OpenRTM-aistをインストールしたディレクトリのomniidl_be内のcxxをコピーするだけで大丈夫なはずです。
ここからが本題です。
ROBOMECH2016で開催されるRTM講習会ですが、プログラミング実習は予習必須です。
理由は察してください。僕がそもそも講習会初参加なので、教えられるか不安です。
以下のページを穴が開くぐらい読んでおいてください。
Raspberry Pi Mouse 活用事例
LEGO Mindstorms EV3 活用事例
実習ではEV3、Raspberry Piを無線LANアクセスポイントにしてそこに接続するわけですが、ネットワークを切り替える際にトラブルが起こると予想しています。
困ったらネーミングサービスを再起動してください。それで何とかなる場合もあります。
とにかく無事に終わることを願うばかりです。
失敗してもあまり怒らないでください。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
現在のところ、RTCビルダでPythonのRTCのソースコードを出力するとデータの変数の初期化が正しく行われないものがあります。
以下のように記述すれば大丈夫なのでコピペして使ってください。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
以下のように記述すれば大丈夫なのでコピペして使ってください。
RTC.Time(0,0)
RTC.TimedState(RTC.Time(0,0), 0)
RTC.TimedShort(RTC.Time(0,0), 0)
RTC.TimedLong(RTC.Time(0,0), 0)
RTC.TimedUShort(RTC.Time(0,0), 0)
RTC.TimedULong(RTC.Time(0,0), 0)
RTC.TimedFloat(RTC.Time(0,0), 0.0)
RTC.TimedDouble(RTC.Time(0,0), 0.0)
RTC.TimedChar(RTC.Time(0,0), chr(0))
RTC.TimedWChar(RTC.Time(0,0), u"00")
RTC.TimedBoolean(RTC.Time(0,0), False)
RTC.TimedOctet(RTC.Time(0,0), 0)
RTC.TimedString(RTC.Time(0,0), "")
RTC.TimedWString(RTC.Time(0,0), u"")
RTC.TimedShortSeq(RTC.Time(0,0), [])
RTC.TimedLongSeq(RTC.Time(0,0), [])
RTC.TimedUShortSeq(RTC.Time(0,0), [])
RTC.TimedULongSeq(RTC.Time(0,0), [])
RTC.TimedFloatSeq(RTC.Time(0,0), [])
RTC.TimedDoubleSeq(RTC.Time(0,0), [])
RTC.TimedCharSeq(RTC.Time(0,0), [])
RTC.TimedWCharSeq(RTC.Time(0,0), [])
RTC.TimedBooleanSeq(RTC.Time(0,0), [])
RTC.TimedOctetSeq(RTC.Time(0,0), "")
RTC.TimedStringSeq(RTC.Time(0,0), [])
RTC.TimedWStringSeq(RTC.Time(0,0), [])
RTC.RGBColour(0.0,0.0,0.0)
RTC.Point2D(0.0,0.0)
RTC.Vector2D(0.0,0.0)
RTC.Pose2D(RTC.Point2D(0.0,0.0), 0.0)
RTC.Velocity2D(0.0,0.0,0.0)
RTC.Acceleration2D(0.0,0.0)
RTC.PoseVel2D(RTC.Pose2D(RTC.Point2D(0.0,0.0), 0.0), RTC.Velocity2D(0.0,0.0,0.0))
RTC.Size2D(0.0, 0.0)
RTC.Geometry2D(RTC.Pose2D(RTC.Point2D(0.0,0.0), 0.0), RTC.Size2D(0.0, 0.0))
RTC.Covariance2D(*([0.0]*6))
RTC.PointCovariance2D(0.0,0.0,0.0)
RTC.Carlike(0.0,0.0)
RTC.SpeedHeading2D(0.0,0.0)
RTC.Point3D(0.0,0.0,0.0)
RTC.Vector3D(0.0,0.0,0.0)
RTC.Orientation3D(0.0,0.0,0.0)
RTC.Pose3D(RTC.Point3D(0.0,0.0,0.0), RTC.Orientation3D(0.0,0.0,0.0))
RTC.Velocity3D(*([0.0]*6))
RTC.AngularVelocity3D(0.0,0.0,0.0)
RTC.Acceleration3D(0.0,0.0,0.0)
RTC.AngularAcceleration3D(0.0,0.0,0.0)
RTC.PoseVel3D(RTC.Pose3D(RTC.Point3D(0.0,0.0,0.0), RTC.Orientation3D(0.0,0.0,0.0)), RTC.Velocity3D(*([0.0]*6)))
RTC.Size3D(0.0,0.0,0.0)
RTC.Geometry3D(RTC.Pose3D(RTC.Point3D(0.0,0.0,0.0), RTC.Orientation3D(0.0,0.0,0.0)), RTC.Size3D(0.0,0.0,0.0))
RTC.Covariance3D(*([0.0]*21))
RTC.SpeedHeading3D(0.0, RTC.Orientation3D(0.0,0.0,0.0))
RTC.OAP(*([RTC.Vector3D(0.0,0.0,0.0)]*3))
RTC.TimedRGBColour(RTC.Time(0,0), RTC.RGBColour(0.0,0.0,0.0))
RTC.TimedPoint2D(RTC.Time(0,0), RTC.Point2D(0.0,0.0))
RTC.TimedVector2D(RTC.Time(0,0), RTC.Vector2D(0.0,0.0))
RTC.TimedPose2D(RTC.Time(0,0), RTC.Pose2D(RTC.Point2D(0.0,0.0), 0.0))
RTC.TimedVelocity2D(RTC.Time(0,0), RTC.Velocity2D(0.0,0.0,0.0))
RTC.TimedAcceleration2D(RTC.Time(0,0), RTC.Acceleration2D(0.0,0.0))
RTC.TimedPoseVel2D(RTC.Time(0,0), RTC.PoseVel2D(RTC.Pose2D(RTC.Point2D(0.0,0.0), 0.0), RTC.Velocity2D(0.0,0.0,0.0)))
RTC.TimedSize2D(RTC.Time(0,0), RTC.Size2D(0.0, 0.0))
RTC.TimedGeometry2D(RTC.Time(0,0), RTC.Geometry2D(RTC.Pose2D(RTC.Point2D(0.0,0.0), 0.0), RTC.Size2D(0.0, 0.0)))
RTC.TimedCovariance2D(RTC.Time(0,0), RTC.Covariance2D(*([0.0]*6)))
RTC.TimedPointCovariance2D(RTC.Time(0,0), RTC.PointCovariance2D(0.0,0.0,0.0))
RTC.TimedCarlike(RTC.Time(0,0), RTC.Carlike(0.0,0.0))
RTC.TimedSpeedHeading2D(RTC.Time(0,0), RTC.SpeedHeading2D(0.0,0.0))
RTC.TimedPoint3D(RTC.Time(0,0), RTC.Point3D(0.0,0.0,0.0))
RTC.TimedVector3D(RTC.Time(0,0), RTC.Vector3D(0.0,0.0,0.0))
RTC.TimedOrientation3D(RTC.Time(0,0), RTC.Orientation3D(0.0,0.0,0.0))
RTC.TimedPose3D(RTC.Time(0,0), RTC.Pose3D(RTC.Point3D(0.0,0.0,0.0), RTC.Orientation3D(0.0,0.0,0.0)))
RTC.TimedVelocity3D(RTC.Time(0,0), RTC.Velocity3D(*([0.0]*6)))
RTC.TimedAngularVelocity3D(RTC.Time(0,0), RTC.AngularVelocity3D(0.0,0.0,0.0))
RTC.TimedAcceleration3D(RTC.Time(0,0), RTC.Acceleration3D(0.0,0.0,0.0))
RTC.TimedAngularAcceleration3D(RTC.Time(0,0), RTC.AngularAcceleration3D(0.0,0.0,0.0))
RTC.TimedPoseVel3D(RTC.Time(0,0), RTC.PoseVel3D(RTC.Pose3D(RTC.Point3D(0.0,0.0,0.0), RTC.Orientation3D(0.0,0.0,0.0)), RTC.Velocity3D(*([0.0]*6))))
RTC.TimedSize3D(RTC.Time(0,0), RTC.Size3D(0.0,0.0,0.0))
RTC.TimedGeometry3D(RTC.Time(0,0), RTC.Geometry3D(RTC.Pose3D(RTC.Point3D(0.0,0.0,0.0), RTC.Orientation3D(0.0,0.0,0.0)), RTC.Size3D(0.0,0.0,0.0)))
RTC.TimedCovariance3D(RTC.Time(0,0), RTC.Covariance3D(*([0.0]*21)))
RTC.TimedSpeedHeading3D(RTC.Time(0,0), RTC.SpeedHeading3D(0.0, RTC.Orientation3D(0.0,0.0,0.0)))
RTC.TimedOAP(RTC.Time(0,0), RTC.OAP(*([RTC.Vector3D(0.0,0.0,0.0)]*3)))
RTC.Quaternion(*([0.0]*4))
RTC.TimedQuaternion(RTC.Time(0,0), RTC.Quaternion(*([0.0]*4)))
RTC.ActArrayActuatorPos(RTC.Time(0,0), 0, 0.0)
RTC.ActArrayActuatorSpeed(RTC.Time(0,0), 0, 0.0)
RTC.ActArrayActuatorCurrent(RTC.Time(0,0), 0, 0.0)
RTC.Actuator(0.0,0.0,0.0,0.0, RTC.ACTUATOR_STATUS_IDLE)
RTC.ActArrayState(RTC.Time(0,0), [])
RTC.ActArrayActuatorGeometry(RTC.ACTARRAY_ACTUATORTYPE_LINEAR, 0.0, RTC.Orientation3D(0.0,0.0,0.0), RTC.Vector3D(0.0,0.0,0.0), 0.0, 0.0, 0.0, 0.0, False)
RTC.ActArrayGeometry(RTC.TimedGeometry3D(RTC.Time(0,0), RTC.Geometry3D(RTC.Pose3D(RTC.Point3D(0.0,0.0,0.0), RTC.Orientation3D(0.0,0.0,0.0)), RTC.Size3D(0.0,0.0,0.0)), [])
RTC.BumperGeometry(RTC.Pose3D(RTC.Point3D(0.0,0.0,0.0), RTC.Orientation3D(0.0,0.0,0.0)), RTC.Size3D(0.0,0.0,0.0), 0.0)
RTC.BumperArrayGeometry(RTC.Geometry3D(RTC.Pose3D(RTC.Point3D(0.0,0.0,0.0), RTC.Orientation3D(0.0,0.0,0.0)), RTC.Size3D(0.0,0.0,0.0)), [])
RTC.CameraImage(RTC.Time(0,0), 0,0,0,"",0.0,"")
RTC.CameraInfo(RTC.Vector2D(0.0,0.0), RTC.Point2D(0.0,0.0), 0.0,0.0,0.0,0.0)
RTC.FiducialInfo(0, RTC.Pose3D(RTC.Point3D(0.0,0.0,0.0), RTC.Orientation3D(0.0,0.0,0.0)), RTC.Pose3D(RTC.Point3D(0.0,0.0,0.0), RTC.Orientation3D(0.0,0.0,0.0)), RTC.Size3D(0.0,0.0,0.0), RTC.Size3D(0.0,0.0,0.0))
RTC.Fiducials(RTC.Time(0,0), [])
RTC.FiducialFOV(0.0,0.0,0.0)
RTC.GPSTime(0,0)
RTC.GPSData(RTC.Time(0,0), RTC.GPSTime(0,0), 0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0, RTC.GPS_FIX_NONE)
RTC.GripperState(RTC.Time(0,0), RTC.GRIPPER_STATE_UNKNOWN)
RTC.INSData(RTC.Time(0,0), 0.0,0.0,0.0,0.0, RTC.Velocity3D(*([0.0]*6)), RTC.Orientation3D(0.0,0.0,0.0))
RTC.LimbState(RTC.Time(0,0), RTC.OAP(*([RTC.Vector3D(0.0,0.0,0.0)]*3)), RTC.LIMB_STATUS_IDLE)
RTC.Hypothesis2D(RTC.Pose2D(RTC.Point2D(0.0,0.0), 0.0), RTC.Covariance2D(*([0.0]*6)), 0.0)
RTC.Hypotheses2D(RTC.Time(0,0), [])
RTC.Hypothesis3D(RTC.Pose3D(RTC.Point3D(0.0,0.0,0.0), RTC.Orientation3D(0.0,0.0,0.0)), RTC.Covariance3D(*([0.0]*21)), 0.0)
RTC.Hypotheses3D(RTC.Time(0,0), [RTC.Hypothesis3D(RTC.Pose3D(RTC.Point3D(0.0,0.0,0.0), RTC.Orientation3D(0.0,0.0,0.0)), RTC.Covariance3D(*([0.0]*21)), 0.0)])
RTC.OGMapConfig(0.0,0.0,0,0, RTC.Pose2D(RTC.Point2D(0.0,0.0), 0.0))
RTC.OGMapTile(0,0,0,0,"")
RTC.PointFeature(0.0, RTC.Point2D(0.0,0.0), RTC.PointCovariance2D(0.0,0.0,0.0))
RTC.PoseFeature(0.0, RTC.Pose2D(RTC.Point2D(0.0,0.0), 0.0), RTC.Covariance2D(*([0.0]*6)))
RTC.LineFeature(0.0,0.0,0.0, RTC.PointCovariance2D(0.0,0.0,0.0), RTC.Point2D(0.0,0.0), RTC.Point2D(0.0,0.0), False, False)
RTC.Features(RTC.Time(0,0), [],[],[])
RTC.MultiCameraImages(RTC.Time(0,0), [])
RTC.MulticameraGeometry(RTC.Geometry3D(RTC.Pose3D(RTC.Point3D(0.0,0.0,0.0), RTC.Orientation3D(0.0,0.0,0.0)), RTC.Size3D(0.0,0.0,0.0)), [RTC.Geometry3D(RTC.Pose3D(RTC.Point3D(0.0,0.0,0.0), RTC.Orientation3D(0.0,0.0,0.0)), RTC.Size3D(0.0,0.0,0.0))])
RTC.Waypoint2D(RTC.Pose2D(RTC.Point2D(0.0,0.0), 0.0), 0.0,0.0, RTC.Time(0,0), RTC.Velocity2D(0.0,0.0,0.0))
RTC.Path2D(RTC.Time(0,0), [RTC.Waypoint2D(RTC.Pose2D(RTC.Point2D(0.0,0.0), 0.0), 0.0,0.0, RTC.Time(0,0), RTC.Velocity2D(0.0,0.0,0.0))])
RTC.Waypoint3D(RTC.Pose3D(RTC.Point3D(0.0,0.0,0.0), RTC.Orientation3D(0.0,0.0,0.0)), 0.0,0.0, RTC.Time(0,0), RTC.Velocity3D(*([0.0]*6)))
RTC.Path3D(RTC.Time(0,0), [])
RTC.PointCloudPoint(RTC.Point3D(0.0,0.0,0.0), RTC.RGBColour(0.0,0.0,0.0))
RTC.PointCloud(RTC.Time(0,0), [])
RTC.PanTiltAngles(RTC.Time(0,0), 0.0,0.0)
RTC.RangerGeometry(RTC.Geometry3D(RTC.Pose3D(RTC.Point3D(0.0,0.0,0.0), RTC.Orientation3D(0.0,0.0,0.0)), RTC.Size3D(0.0,0.0,0.0)), [])
RTC.RangerConfig(*([0.0]*7))
RTC.RangeData(RTC.Time(0,0), [], RTC.RangerGeometry(RTC.Geometry3D(RTC.Pose3D(RTC.Point3D(0.0,0.0,0.0), RTC.Orientation3D(0.0,0.0,0.0)), RTC.Size3D(0.0,0.0,0.0)), []), RTC.RangerConfig(*([0.0]*7)))
RTC.IntensityData(RTC.Time(0,0), [], RTC.RangerGeometry(RTC.Geometry3D(RTC.Pose3D(RTC.Point3D(0.0,0.0,0.0), RTC.Orientation3D(0.0,0.0,0.0)), RTC.Size3D(0.0,0.0,0.0)), []), RTC.RangerConfig(*([0.0]*7)))
Img.ImageData(0,0, Img.CF_UNKNOWN, "")
Img.CameraIntrinsicParameter([0.0]*5, [])
Img.CameraImage(RTC.Time(0,0), Img.ImageData(0,0, Img.CF_UNKNOWN, ""), Img.CameraIntrinsicParameter([0.0]*5, []), [[0.0]*4]*4)
Img.TimedCameraImage(RTC.Time(0,0), Img.CameraImage(RTC.Time(0,0), Img.ImageData(0,0, Img.CF_UNKNOWN, ""), Img.CameraIntrinsicParameter([0.0]*5, []), [[0.0]*4]*4), 0)
Img.MultiCameraImage([],0)
Img.TimedMultiCameraImage(RTC.Time(0,0), Img.MultiCameraImage([],0), 0)
Img.NamedValue("","")
Img.CameraDeviceProfile("","",0,"","",Img.CameraIntrinsicParameter([0.0]*5, []),[])
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
とりあえずRaspberry Pi Mouse関連のRTC、RTシステムのマニュアルを作成したので宣伝しておきます。
ちなみにRaspberry Pi Mouse フルキットで71280円です。
何だか高いなあ。
その割にはなんだか取扱説明書が雑と言うか、動作確認のコマンドを間違えるのはどうかと思います。
どこにも組み立て方がなかったのでRTCのマニュアルに載せました。しかも手書きで。
だから何だっていう感じはしますけど。写真撮れば良かったとか思っている人もいるとは思いますが、写真を加工するとコラ画像っぽくなるのがなんとなく嫌いです。
持っている人がいれば使ってください。
ちなみにRaspberry Pi Mouse フルキットで71280円です。
何だか高いなあ。
その割にはなんだか取扱説明書が雑と言うか、動作確認のコマンドを間違えるのはどうかと思います。
どこにも組み立て方がなかったのでRTCのマニュアルに載せました。しかも手書きで。
だから何だっていう感じはしますけど。写真撮れば良かったとか思っている人もいるとは思いますが、写真を加工するとコラ画像っぽくなるのがなんとなく嫌いです。
持っている人がいれば使ってください。
今回はコンポーネントオブザーバーのようにRTCが外部のサービスを使う方法について説明します。
まずは利用するサービスをIDLで定義します。
このようにSDOPackage::SDOServiceを継承したインターフェースを定義します。
次にこのようにOpenRTM_aist.SdoServiceConsumerBaseを継承したクラスを作成します。
ここで定義したtestServiceConsumerはtestServiceConsumerInit関数を呼び出すことでファクトリが登録されます。
そして外部からRTCのオブジェクトリファレンスを取得してadd_service_profile関数を呼び出すと、testServiceConsumerのinit関数が呼び出されます。
init関数ではRTCオブジェクトとプロファイルを受け取ることができます。
このプロファイルからサービスのプロバイダ等を取得することができます。
後はアクションでもポートでもいいのでリスナを追加して、その中でサービスを呼び出してやるとRTCからサービスを利用している事にはなります。
まあ独自に外部サービスを作成する人もあまりいないだろうし、あまり知ってても役には立たないような気はしますけど。
普通はRTC自体にサービスポートを作成してそれで使うので、何か事情がない限り上記の方法で追加するのはあまり好ましくないように思います。
次にコネクタのSubscription Typeを独自に作成する方法を説明します。
まずはこのようにPublisherBaseクラスを継承したクラスを作成します。
適当な例が思い浮かばなかったので、今回は1回write関数を呼び出すと2回データを送信するという謎仕様にしています。全く役には立ちません。
そしてrtc.confのmanager.modules.preloadに記述するか何かしらの方法でPublisherTestInit関数を呼び出してファクトリを登録するだけです。
後はRTシステムエディタで接続時にSubscription Typeをtestに設定してあげれば使えます。
まあこれも知っていても独自にパブリッシャーを作成する事もあまりないように思うので、あまり意味はないような気はします。
ただ独自に外部のモジュールを作成して何らかの機能を追加するにしても、RTCがそのモジュールに依存しないように設計するようにはする必要はあると思います。
例えばそのモジュールを使用するためにRTCのソースコードを変更する必要がある、というのは本末転倒なので避けるようにしましょう。
最後に独自のバッファの作り方を説明します。
と言いたいところですが、作り方自体はパブリッシャーやプロバイダ、コンシュマーとあまり変わらないので省略します。
こんな感じでBufferBaseクラスを継承したクラスを作成して、~Init関数でファクトリを登録するだけです。この例はwrite関数を呼び出すと変数にデータを書き込んで、read関数を読み込むと変数をNoneにするというだけなので、実用性は皆無です。
ただRTシステムエディタのコネクタの設定ウィンドウでバッファの種類を選択するドロップダウンリスト等はないみたいなので、詳細から直接入力してください。
dataport.buffer_typeという項目名で設定できます。
全然関係ないけどLuaのCORBA実装のOiLを使ってみたのですけど、何故かomniORBとかみたいな他のCORBA実装と通信できませんでした。何が違うのかは分かりませんけど、面倒なので調べるのはやめておきます。知っている人は教えてください。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
まずは利用するサービスをIDLで定義します。
このようにSDOPackage::SDOServiceを継承したインターフェースを定義します。
次にこのようにOpenRTM_aist.SdoServiceConsumerBaseを継承したクラスを作成します。
ここで定義したtestServiceConsumerはtestServiceConsumerInit関数を呼び出すことでファクトリが登録されます。
そして外部からRTCのオブジェクトリファレンスを取得してadd_service_profile関数を呼び出すと、testServiceConsumerのinit関数が呼び出されます。
init関数ではRTCオブジェクトとプロファイルを受け取ることができます。
このプロファイルからサービスのプロバイダ等を取得することができます。
後はアクションでもポートでもいいのでリスナを追加して、その中でサービスを呼び出してやるとRTCからサービスを利用している事にはなります。
まあ独自に外部サービスを作成する人もあまりいないだろうし、あまり知ってても役には立たないような気はしますけど。
普通はRTC自体にサービスポートを作成してそれで使うので、何か事情がない限り上記の方法で追加するのはあまり好ましくないように思います。
次にコネクタのSubscription Typeを独自に作成する方法を説明します。
まずはこのようにPublisherBaseクラスを継承したクラスを作成します。
適当な例が思い浮かばなかったので、今回は1回write関数を呼び出すと2回データを送信するという謎仕様にしています。全く役には立ちません。
そしてrtc.confのmanager.modules.preloadに記述するか何かしらの方法でPublisherTestInit関数を呼び出してファクトリを登録するだけです。
後はRTシステムエディタで接続時にSubscription Typeをtestに設定してあげれば使えます。
まあこれも知っていても独自にパブリッシャーを作成する事もあまりないように思うので、あまり意味はないような気はします。
ただ独自に外部のモジュールを作成して何らかの機能を追加するにしても、RTCがそのモジュールに依存しないように設計するようにはする必要はあると思います。
例えばそのモジュールを使用するためにRTCのソースコードを変更する必要がある、というのは本末転倒なので避けるようにしましょう。
最後に独自のバッファの作り方を説明します。
と言いたいところですが、作り方自体はパブリッシャーやプロバイダ、コンシュマーとあまり変わらないので省略します。
こんな感じでBufferBaseクラスを継承したクラスを作成して、~Init関数でファクトリを登録するだけです。この例はwrite関数を呼び出すと変数にデータを書き込んで、read関数を読み込むと変数をNoneにするというだけなので、実用性は皆無です。
ただRTシステムエディタのコネクタの設定ウィンドウでバッファの種類を選択するドロップダウンリスト等はないみたいなので、詳細から直接入力してください。
dataport.buffer_typeという項目名で設定できます。
全然関係ないけどLuaのCORBA実装のOiLを使ってみたのですけど、何故かomniORBとかみたいな他のCORBA実装と通信できませんでした。何が違うのかは分かりませんけど、面倒なので調べるのはやめておきます。知っている人は教えてください。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・