Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include <boost/shared_ptr.hpp>
00029 #include <boost/algorithm/string.hpp>
00030
00031 #include <common/SystemPaths.hh>
00032 #include <common/Plugin.hh>
00033
00034 #include <ros/ros.h>
00035 #include <ros/package.h>
00036
00037 #include <map>
00038
00039 namespace gazebo
00040 {
00041
00042 typedef std::vector<std::string> V_string;
00043 typedef std::map<std::string, std::string> M_string;
00044
00045 class GazeboRosPathsPlugin : public SystemPlugin
00046 {
00047 public:
00048 GazeboRosPathsPlugin()
00049 {
00050 this->LoadPaths();
00051 }
00052
00053 ~GazeboRosPathsPlugin()
00054 {
00055 };
00056
00057 void Init()
00058 {
00059 }
00060
00061 void Load(int argc, char** argv)
00062 {
00063 }
00064
00065
00066
00067
00068
00069
00070 void rosPackageCommandDebug(const std::string& cmd, V_string& output)
00071 {
00072 std::string out_string = ros::package::command(cmd);
00073 V_string full_list;
00074 boost::split(full_list, out_string, boost::is_any_of("\r\n"));
00075
00076
00077 V_string::iterator it = full_list.begin();
00078 V_string::iterator end = full_list.end();
00079 for (; it != end; ++it)
00080 {
00081 if (!it->empty())
00082 {
00083 output.push_back(*it);
00084 }
00085 }
00086 }
00087
00088
00089
00090
00091
00092 void rosPackageGetPluginsDebug(const std::string& package, const std::string& attribute, V_string& plugins)
00093 {
00094 M_string plugins_map;
00095 rosPackageGetPluginsDebug(package, attribute, plugins_map);
00096 M_string::iterator it = plugins_map.begin();
00097 M_string::iterator end = plugins_map.end();
00098 for (; it != end; ++it)
00099 {
00100 plugins.push_back(it->second);
00101 }
00102 }
00103
00104
00105
00106
00107
00108 void rosPackageGetPluginsDebug(const std::string& package, const std::string& attribute, M_string& plugins)
00109 {
00110 V_string lines;
00111 rosPackageCommandDebug("plugins --attrib=" + attribute + " " + package, lines);
00112
00113 V_string::iterator it = lines.begin();
00114 V_string::iterator end = lines.end();
00115 for (; it != end; ++it)
00116 {
00117 V_string tokens;
00118 boost::split(tokens, *it, boost::is_any_of(" "));
00119
00120 if (tokens.size() >= 2)
00121 {
00122 std::string package = tokens[0];
00123 std::string rest = boost::join(V_string(tokens.begin() + 1, tokens.end()), " ");
00124 plugins[package] = rest;
00125 }
00126 }
00127 }
00128 void LoadPaths()
00129 {
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155 gazebo::common::SystemPaths::Instance()->gazeboPathsFromEnv = false;
00156 std::vector<std::string> gazebo_media_paths;
00157 rosPackageGetPluginsDebug("gazebo","gazebo_media_path",gazebo_media_paths);
00158 for (std::vector<std::string>::iterator iter=gazebo_media_paths.begin(); iter != gazebo_media_paths.end(); iter++)
00159 {
00160 ROS_DEBUG("med path %s",iter->c_str());
00161 gazebo::common::SystemPaths::Instance()->AddGazeboPaths(iter->c_str());
00162 }
00163
00164
00165
00166 gazebo::common::SystemPaths::Instance()->pluginPathsFromEnv = false;
00167 std::vector<std::string> plugin_paths;
00168 rosPackageGetPluginsDebug("gazebo","plugin_path",plugin_paths);
00169 for (std::vector<std::string>::iterator iter=plugin_paths.begin(); iter != plugin_paths.end(); iter++)
00170 {
00171 ROS_DEBUG("plugin path %s",(*iter).c_str());
00172 gazebo::common::SystemPaths::Instance()->AddPluginPaths(iter->c_str());
00173 }
00174
00175
00176
00177 gazebo::common::SystemPaths::Instance()->modelPathsFromEnv = false;
00178 std::vector<std::string> model_paths;
00179 rosPackageGetPluginsDebug("gazebo","gazebo_model_path",model_paths);
00180 for (std::vector<std::string>::iterator iter=model_paths.begin(); iter != model_paths.end(); iter++)
00181 {
00182 ROS_DEBUG("model path %s",(*iter).c_str());
00183 gazebo::common::SystemPaths::Instance()->AddModelPaths(iter->c_str());
00184 }
00185
00186
00187 std::string gazeborc = ros::package::getPath("gazebo")+"/.do_not_use_gazeborc";
00188 setenv("GAZEBORC",gazeborc.c_str(),1);
00189
00190 }
00191 private:
00192
00193 };
00194
00195
00196 GZ_REGISTER_SYSTEM_PLUGIN(GazeboRosPathsPlugin)
00197
00198 }
00199