2014年12月7日日曜日

ROS hydroでTurtlebot2を(シュミレータ上で)動かしてみる2(オドメトリ情報からの動作)

前置きは無しにしてぱぱっと書きます
 ROS hydroのgazeboを使ってTurtlebot2を動かします。

方法は簡単で前回記事にあったTurtlebot2のトピックリストから使える情報を取得して速度情報を送るという感じです。
今回はオドメトリの情報を入力、出力を速度情報という形で動作させます。

流れは下のようになります 。
1.gazeboのワールド上にTurtlebotのみを表示
 $ roslaunch turtlebot_gazebo turtlebot_empty_world.launch

2.動作プログラムを走らせる
動作プログラムは下のような形で作りました


#include<iostream>
#include<math.h>
#include<ros/ros.h>
#include<nav_msgs/Odometry.h>
#include<geometry_msgs/Twist.h>

using namespace std;

namespace{
    double poseX;
    double poseY;
    double poseT;
}

void odomCallback(const nav_msgs::Odometry::ConstPtr &odom)
{
    poseX = odom->pose.pose.position.x;
    poseY = odom->pose.pose.position.y;
    poseT = odom->pose.pose.orientation.w;

    cout<<"x = "<<poseX<<"[m]"<<"\t";
    cout<<"y = "<<poseY<<"[m]"<<"\t";
    cout<<"theta = "<<poseT*180/M_PI<<"[deg]"<<endl;
}

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

    ros::Subscriber odom_sub = node.subscribe("odom",1,odomCallback);
    ros::Publisher vel_pub = node.advertise<geometry_msgs::Twist>("cmd_vel",1);

    geometry_msgs::Twist cmd_vel;

    while(ros::ok())
    {
        if(poseX < 5.0)
        {
            cmd_vel.linear.x = 0.2;
            cmd_vel.linear.y = 0.0;
            cmd_vel.angular.z = 0.0;
        }
        else
        {
            cmd_vel.linear.x = 0.0;
            cmd_vel.linear.y = 0.0;
            cmd_vel.angular.z = 0.0;
        }
        vel_pub.publish(cmd_vel);
        ros::spinOnce();
    }
    return 0;
}

このプログラムはパブリッシュするトピックを”cmd_vel"にしているので起動時に以下のようにリマップしてください

$ rosrun パッケージ名 実行ファイル名 cmd_vel:=/mobile_base/commands/velocity

間違い訂正に気づいたら追記行います。

雑記
最初に参考にしたのがキーボード入力を行なってkobukiを動かすというものを参考にしていたのでモーター電源ONにしないと走らないんじゃ!!?と思ってモータ電源入れるプログラムも作ったけど実際後で動かしてみると要らなかったみたい。無くても普通に動き出した。

実機の場合はいるのかなぁ?
次は搭載しているセンサ使っての簡単なナビゲーションかな

2014年12月4日木曜日

ROS hydroでTurtlebot2(シュミレータ上で)を動かしてみる 1(インストール&表示編)

後輩指導のために必要になったのでメモとして

ROS hydroはインストールしていることが前提
参考サイトはチュートリアルなど

1.turtlebotのシュミレータ用ファイルをダウンロード

$ sudo apt-get install ros-hydro-turtlebot-simulator

2.gazeboに表示したturtlebotをrvizに表示するためのファイルをダウンロード

$ sudo apt-get install ros-hydro-turtlebot-apps ros-hydro-turtlebot-rviz-launchers

3.launchファイルの起動

・空のワールドにturtlebotを表示
$ roslaunch turtlebot_gazebo turtlebot_empty_world.launch

・rvizを使用してturtlebotの状態を表示
$ roslaunch turtlebot_rviz_launchers view_robot.launch

4.キーボード入力で動かしたい時
$ roslaunch turtlebot_teleop keyboard_teleop.launch
$ roslaunch kobuki_keyop keyop.launch

その他メモ

・初期起動時のturtlebotのrqt_graph




・起動時のturtlebotのトピック
/camera/depth/camera_info
/camera/depth/image_raw
/camera/depth/points
/camera/parameter_descriptions
/camera/parameter_updates
/camera/rgb/camera_info
/camera/rgb/image_raw
/camera/rgb/image_raw/compressed
/camera/rgb/image_raw/compressed/parameter_descriptions
/camera/rgb/image_raw/compressed/parameter_updates
/camera/rgb/image_raw/compressedDepth
/camera/rgb/image_raw/compressedDepth/parameter_descriptions
/camera/rgb/image_raw/compressedDepth/parameter_updates
/camera/rgb/image_raw/theora
/camera/rgb/image_raw/theora/parameter_descriptions
/camera/rgb/image_raw/theora/parameter_updates
/clock
/cmd_vel_mux/active
/cmd_vel_mux/input/navi
/cmd_vel_mux/input/safety_controller
/cmd_vel_mux/input/teleop
/cmd_vel_mux/parameter_descriptions
/cmd_vel_mux/parameter_updates
/depthimage_to_laserscan/parameter_descriptions
/depthimage_to_laserscan/parameter_updates
/gazebo/link_states
/gazebo/model_states
/gazebo/parameter_descriptions
/gazebo/parameter_updates
/gazebo/set_link_state
/gazebo/set_model_state
/initialpose
/joint_states
/laserscan_nodelet_manager/bond
/mobile_base/commands/motor_power
/mobile_base/commands/reset_odometry
/mobile_base/commands/velocity
/mobile_base/events/bumper
/mobile_base/events/cliff
/mobile_base/sensors/bumper_pointcloud
/mobile_base/sensors/core
/mobile_base/sensors/imu_data
/mobile_base_nodelet_manager/bond
/move_base_simple/goal
/odom
/rosout
/rosout_agg
/scan
/tf
/tf_static

メモメモ
Kinectを搭載してるからrgbカメラ、depthイメージなどがある。
depthイメージをレーザーセンサと同様の働きをさせている。
bumperも使おうと思えば使える。
移動ロボットの基本となるオドメトリ情報を出している
速度に感してはcmd_vel_muxで管理している感じ?
gazeboとrvizの同時起動の負荷やばい・・・・

来週の金曜日までに動作させないとだから急がないとなぁ・・・
間違いあれば直します