環境
Ubuntu 16.04
ROS Kinetic
Gazebo9 (7)
前提
元記事の説明を前提にしているのでこちらからご覧ください。
元記事とのアプローチの異なる点についてまとめていきます。
car_demoを落としてきて、catkinワークスペースにファイルをまとめておいておいてからスタート。
Gazeboのインストールまわり
ROS KineticではGazeboはver7を使っていますが、本シミュレーションではver8が必要です。
なお、筆者はこの発展のcitysimから始めたのでgazebo9を使っています。
gazebo7を削除せずに(?)gazebo9のインストール
元記事ではgazebo7まわりを削除していましたが削除しなくてもインストール可能でした。(実際は無効にされてるのかもしれない)
参考にした記事は以下の通り。
とりあえず手順をまとめると以下の通りになります。
sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'
wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
sudo apt-get update
sudo apt-get install ros-kinetic-gazebo9-ros-pkgs
sudo apt-get install ros-kinetic-gazebo9-ros-control
コンパイルエラーへの対処
ignition-msgs0まわり
コンパイルするとignition-msgs0がないと言われます。
まずは依存関係の解決。
sudo apt-get install libprotobuf-dev protobuf-compiler libprotoc-dev libignition-math3-dev
次に該当ファイルをbitbucketのサイトからclone、checkoutする。超絶余談ですがHTTPで作業していたのでこの時点でSSHに変更せざるを得なくなりました。該当記事はこちら。
hg clone ssh://hg@bitbucket.org/ignitionrobotics/ign-msgs
cd ign-msgs
hg pull && hg update ign-msgs0
buildする。
mkdir bulid
cd build
cmake ..
sudo make install
gazeboのバージョン依存とかに関わる項
元記事にあるとおり、gazebo9でやっているのでバージョンの変更箇所でやはり怒られます。
でもGazeboのバージョンは共存できるってここにあるしgazebo8もいれちゃおうとしましたが諸々のエラーが出て断念。
仕方がないのでソースコードをアップグレードしました。gazebo_ros_block_laser.cpp
において以下の変更を行います。
エラーの箇所を探してください。
- 変更1
//last_update_time_ = this->world_->GetSimTime();
last_update_time_ = this->world_->SimTime();
- 変更2
void GazeboRosBlockLaser::OnStats( const boost::shared_ptr<msgs::WorldStatistics const> &_msg)
{
this->sim_time_ = msgs::Convert( _msg->sim_time() );
//math::Pose pose;
//pose.pos.x = 0.5*sin(0.01*this->sim_time_.Double());
gzdbg << "plugin simTime [" << this->sim_time_.Double() << "] update pose [" << 0.5*sin(0.01*this->sim_time_.Double()) << "]\n";
}
実行
joystickは接続していないのでコントローラで制御できるわけではないですが、キーボード上で一応操作できました。
source ~/catkin_ws/devel/setup.bash
roslaunch car_demo demo.launch
ちょっと道幅が広すぎますね。さすがアメリカンといった感じ。(???)
自己位置同定とかも走っているのでlaunchファイルの詳細について暇があったら見ていきます。
どうやって制御しているか?
cmd_velで制御しているのかと思いきやおそらく/joy
の値を用いているかと思いきや該当するtopicが配信されてない...
どうやって制御しているのかよく調べておきます。これとか参考になるかな?
$ rostopic list
/amcl_pose
/base_pose_ground_truth
/clicked_point
/clock
/diagnostics
/gazebo/link_states
/gazebo/model_states
/gazebo/parameter_descriptions
/gazebo/parameter_updates
/gazebo/set_link_state
/gazebo/set_model_state
/initialpose
/joint_states
/joy
/move_base_simple/goal
/particlecloud
/prius
/prius/back_camera/image_raw
/prius/back_camera/image_raw/compressed
/prius/back_camera/image_raw/compressed/parameter_descriptions
/prius/back_camera/image_raw/compressed/parameter_updates
/prius/back_camera/image_raw/compressedDepth
/prius/back_camera/image_raw/compressedDepth/parameter_descriptions
/prius/back_camera/image_raw/compressedDepth/parameter_updates
/prius/back_camera/image_raw/theora
/prius/back_camera/image_raw/theora/parameter_descriptions
/prius/back_camera/image_raw/theora/parameter_updates
/prius/back_camera/parameter_descriptions
/prius/back_camera/parameter_updates
/prius/back_camera_info
/prius/back_sonar/left_far_range
/prius/back_sonar/left_middle_range
/prius/back_sonar/right_far_range
/prius/back_sonar/right_middle_range
/prius/center_laser/scan
/prius/front_camera/image_raw
/prius/front_camera/image_raw/compressed
/prius/front_camera/image_raw/compressed/parameter_descriptions
/prius/front_camera/image_raw/compressed/parameter_updates
/prius/front_camera/image_raw/compressedDepth
/prius/front_camera/image_raw/compressedDepth/parameter_descriptions
/prius/front_camera/image_raw/compressedDepth/parameter_updates
/prius/front_camera/image_raw/theora
/prius/front_camera/image_raw/theora/parameter_descriptions
/prius/front_camera/image_raw/theora/parameter_updates
/prius/front_camera/parameter_descriptions
/prius/front_camera/parameter_updates
/prius/front_camera_info
/prius/front_left_laser/scan
/prius/front_right_laser/scan
/prius/front_sonar/left_far_range
/prius/front_sonar/left_middle_range
/prius/front_sonar/right_far_range
/prius/front_sonar/right_middle_range
/prius/left_camera/image_raw
/prius/left_camera/image_raw/compressed
/prius/left_camera/image_raw/compressed/parameter_descriptions
/prius/left_camera/image_raw/compressed/parameter_updates
/prius/left_camera/image_raw/compressedDepth
/prius/left_camera/image_raw/compressedDepth/parameter_descriptions
/prius/left_camera/image_raw/compressedDepth/parameter_updates
/prius/left_camera/image_raw/theora
/prius/left_camera/image_raw/theora/parameter_descriptions
/prius/left_camera/image_raw/theora/parameter_updates
/prius/left_camera/parameter_descriptions
/prius/left_camera/parameter_updates
/prius/left_camera_info
/prius/right_camera/image_raw
/prius/right_camera/image_raw/compressed
/prius/right_camera/image_raw/compressed/parameter_descriptions
/prius/right_camera/image_raw/compressed/parameter_updates
/prius/right_camera/image_raw/compressedDepth
/prius/right_camera/image_raw/compressedDepth/parameter_descriptions
/prius/right_camera/image_raw/compressedDepth/parameter_updates
/prius/right_camera/image_raw/theora
/prius/right_camera/image_raw/theora/parameter_descriptions
/prius/right_camera/image_raw/theora/parameter_updates
/prius/right_camera/parameter_descriptions
/prius/right_camera/parameter_updates
/prius/right_camera_info
/rosout
/rosout_agg
/tf
/tf_static