プラグイン名:CnoidRos
依存プラグイン:Grasp
PRMやMotionFileで生成した動作をROSで通信する。
ROSノードはpythonスクリプトで書かれており、CnoidRosプラグインとPythonスクリプトはメモリマップドファイルでプロセス間通信を行う。
以下のフォーマットで通信する。
(命令1);(命令2);.......(命令n)
命令は以下の通り
goInitial()
goOff()
joints[0,0,0,....0]:1.0 (関節角を設定.[]内は関節角列を:のあとは動作時間をあらわしている)
rhandClose
lhandClose
rhandOpen
lhandOpen
$ sudo apt-get update && sudo apt-get install ros-indigo-rtmros-nextage ros-indigo-rtmros-hironx
$ mkdir -p ~/catkin_ws/src $ cd ~/catkin_ws/src $ catkin_init_workspace $ cd ~/catkin_ws/ $ catkin_make
$ source devel/setup.bash
$ catkin_create_pkg CnoidRos std_msgs rospy
$ cp "graspPluginのパス"/CnoidRos/ROS/CnoidRos.py ~/catkin_ws/src/CnoidRos/src/
$ chmod a+x ~/catkin_ws/src/CnoidRos/src/CnoidRos.py
1.choreonoidを起動します。
2.ターミナルを起動しroscoreを実行
$ roscore
$ rtmlaunch nextage_ros_bridge nextage_ros_bridge_simulation.launch
$ source ~/catkin_ws_devel/setup.bash $ rosrun CnoidRos CnoidRos.py
・Ubuntuマシン
-ROS2のインストール
https://github.com/ros2/ros2/wiki/Linux-Install-Binary を参考にインストールを行います。
-CnoidRosTalker.pyのセットアップ
CnoidRosTalker.pyをROS2ディレクトリにコピーします。ROS2が~/ros2_installにインストールされたと仮定します。
$ cp "graspPluginのパス"/CnoidRos/ROS/CnoidRosTalker.py ~/ros2_install/ros2-linux/bin/ $ chmod a+x ~/ros2_install/ros2-linux/bin/CnoidRosTalker.py
※ROS2インストール時にPython3がインストールされます。python2系が既にインストールされていても、デフォルトでpython3が使用されるようになります。もしデフォルトでpython2系を使用したい場合は環境変数のPATH中のPython3のパスの後にPython2のパスがあるので、Python2のパス,Python3のパス順になるように編集してください。そしてpython3でスクリプトを処理するときは
> python スクリプトファイル名.py
> py -3 スクリプトファイル名.py
-CnoidRosListener.pyのセットアップ
CnoidRos/ROS下のCnoidRosListener.py, command_dispatcher.py, nextage_manipulator.pyをC:\dev\ros2\install\binフォルダにコピーします。
・Ubuntuマシン
以下の手順でCnoidRosTalkerを起動します。
ターミナルを起動します
$ . ros2_install/ros2-linux/local_setup.bash $ CnoidRosTalker.py
> cd C:\dev\ros2\install > local_setup.bat > python bin\CnoidRosListener.py
・pythonスクリプトについて
CnoidRosバーのボタンをクリックするとそれに応じてWindowsにメッセージが表示される。Windows側での表示処理はnextage_manipulator.pyに記述されている。
このファイルを書き換えることで処理内容を変更できる。
CnoidRosバーのボタンが押されたときに呼ばれるnextage_manipulator.pyの関数を以下に示す。
[Home] -> goInitial()
[OffPose]->goOffPose()
[Move]->動作に応じてrhandOpen(),rhandClose(),lhandOpen(),lhandClose(),setJointAngles(angle,time)が呼ばれる。