C++
ROS
ロボット

ROS講座07 joyプログラム

概要

ROSプログラムの一例を示します。今回はturtle_simをジョイスティックで操作すROSノードを作成します。今回は画面上の「亀」を動かすだけですが、「亀」を実際のロボットに置き換えればラジコンを行うことができます。

joyスティックについて

今回はPS3をコントローラーとして使います。PS3のコントローラーはスティックの感度が高く、ほかのPC用のジョイスティックよりも使いやすいです。以下のaptリポジトリをインストールすればほかにドライバは必要なく、PS3コントローラーをUSBケーブルで接続するだけで使用できます。実はPS4のコントローラーも使用できますが、キーの割り当ての順番が違うので注意が必要です。

turtle_simのインストール

turtlesimはROSの入門用のROSパッケージです。その中でもturtle_simは実行すると以下のような「亀」のいる画面が表示されます。

turtle_simの実行(roscoreを別途実行すること)
rosrun turtlesim turtlesim_node 

turtle_sim.png

これをrosトピックを送ることで動かすことができます。この「亀」は/turtle1/cmd_velというトピックにgeometry_msgs::Twist型でROSトピックを投げると動きます。以下のコマンドはTwistまで書いたら後はTabを押すと補完されます。「亀」を止めるためにはCtrl+Cを押します。

「亀」を動かす
rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear:
  x: 1.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0" 

Twist送信ROSノードのソースコード

上のようにコマンドを送るのは手間なのでジョイスティックから動かせるようにします。joy nodeを使えばjoyスティックの入力を/joyというROSトピックをパブリッシュします。これのデータを変換してTwistを送信します。

twist_publisher.cpp
#include "ros/ros.h"
#include "sensor_msgs/Joy.h"
#include "tf/transform_broadcaster.h"

geometry_msgs::Twist cmd_vel;
void joy_callback(const sensor_msgs::Joy& joy_msg){
    cmd_vel.linear.x =joy_msg.axes[1];
    cmd_vel.linear.y =joy_msg.axes[0];
    cmd_vel.angular.z=joy_msg.axes[2];
}

int main(int argc, char **argv){
    ros::init(argc, argv, "s4_omni_demo");
    ros::NodeHandle n;

    //publish
    ros::Publisher cmd_pub = n.advertise<geometry_msgs::Twist>("cmd_vel", 1000);

    //subscriibe
    ros::Subscriber joy_sub   = n.subscribe("joy", 10, joy_callback);

    ros::Rate loop_rate(10);
    while (ros::ok()){
        cmd_pub.publish(cmd_vel);
    ros::spinOnce();
        loop_rate.sleep();
    }
    return 0;
}

launch、実行

joyノードをインストールします。

joyノードをインストール
sudo apt-get install ros-kinetic-joy

いろいろなROSノードを使うのでlaunchファイルにまとめます。

turtle.launch
<launch>
  <node name="joy_node"   pkg="joy" type="joy_node" />
  <node name="twist_publisher" pkg="ros_lecture" type="twist_publisher">
    <remap from="cmd_vel" to="turtle1/cmd_vel"/>
  </node>
  <node name="turtlesim_node" pkg="turtlesim" type="turtlesim_node" />
</launch>

実行

launch
roslaunch ros_lecture turtle.launch

ジョイスティックを動かすと画面上の「亀」が動きます。もしPS3を使っていて、「亀」が動かないときはPSボタンを押してください。

目次ページへのリンク

ROS講座の目次へのリンク