ふるお〜と!- FullAuto

AI・ロボットが普及しBI(ベーシックインカム)が早急に実現されることを願う元ニートのブログ

ふるお〜と!-FullAuto

【ROS2】ros_ignを試してみる

github.com

Ignition CitadelとROS2 Dashingをブリッジしてみる。

環境

Ubuntu18.04

導入手順
ROS2 Dashing Installing ROS 2 via Debian Packages
Ignition Citadel https://ignitionrobotics.org/docs/citadel/install_ubuntu

まだ、Nvidiaのドライバを入れていなければ、下記を実行。

$ sudo ubuntu-drivers autoinstall

インストール

$ mkdir -p ~/bridge_ws/src
$ cd ~/bridge_ws/src
$ git clone https://github.com/osrf/ros_ign.git -b dashing

まだ、rodep updateしていないなら下記を実行。

$ sudo apt install python-rosdep2
$ sudo rosdep init
$ rosdep update

ROSの依存関係をインストール

$ cd ~/bridge_ws
$ rosdep install --from-paths src -i -y --rosdistro dashing \
  --skip-keys=ignition-gazebo2 \
  --skip-keys=ignition-gazebo3 \
  --skip-keys=ignition-msgs4 \
  --skip-keys=ignition-msgs5 \
  --skip-keys=ignition-rendering2 \
  --skip-keys=ignition-rendering3 \
  --skip-keys=ignition-sensors2 \
  --skip-keys=ignition-sensors3 \
  --skip-keys=ignition-transport7 \
  --skip-keys=ignition-transport8

まだ、colconをインストールしてないなら下記を実行

$ sudo apt install python3-colcon-common-extensions

ビルド

$ source /opt/ros/dashing/setup.bash
$ cd ~/bridge_ws/
$ colcon build

実行

Publisher

とりあえず、joint_stateをPublishしているIgnitionのデモを実行する

$ ign gazebo /usr/share/ignition/ignition-gazebo3/worlds/lift_drag.sdf

Bridge

書式は
rosrun ros_ign_bridge parameter_bridge [Topic Name]@[ROS type]@[Ignition Type]
Ignition Typeの指定は
ignition::msgs::StringMsg
ではなく
ignition.msgs.StringMsg
なので注意。
また、
ROS2は 名前空間msgが追加されたので注意。

$ . ~/bridge_ws/install/setup.bash
$ ros2 run ros_ign_bridge parameter_bridge /world/lift_drag/model/lift_drag_demo_model/joint_state@sensor_msgs/msg/JointState@ignition.msgs.Model

Subscriber

とりあえず、ros topicで表示してみる。

$ ros2 topic echo /world/lift_drag/model/lift_drag_demo_model/joint_state

そうすると以下のような値がゲットできる。

header: 
  seq: 5104
  stamp: 
    secs: 1997
    nsecs: 156000000
  frame_id: ''
name: [rod_1_joint, blade_1_joint, blade_2_joint]
position: [-1.4130987461707797e-21, 0.0, 0.0]
velocity: [-8.18722873613537e-21, 0.0, 0.0]
effort: [0.0, 0.0, 0.0]

型は定義は sensor_msgs/JointState Documentation

ゆえにC++上でアクセスするには
sensor_msgs::JointState joint_state;
としてインスタンスを取得し、

int stamp = joint_state.header.stamp.secs;
string name = joint_state.name;
float64 position = joint_state.position;
float64 velocity = joint_state.velocity;
float64 effort = joint_state.effort;

のようにアクセスする。