鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    Failed to load plugin libgazebo_ros_gpu_laser.so: libgazebo_ros_gpu_laser.so: cannot open shared object file: No such file or directory

    已定时 已固定 已锁定 已移动 已解决
    ROS 2相关问题
    gazebo gazebo指令
    3
    8
    1.1k
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • yudonghou123Y
      小猴同学
      最后由 编辑

      我的系统是ubuntu22.04 ros2 humble
      当我在运行项目时,终端输出以下问题:

      [Err] [Plugin.hh:212] Failed to load plugin  libgazebo_ros_force_system.so --ros-args -r gazebo:__ns:=/gazebo:  libgazebo_ros_force_system.so --ros-args -r gazebo:__ns:=/gazebo: cannot open shared object file: No such file or directory
      

      和

      [Err] [Plugin.hh:212] Failed to load plugin libgazebo_ros_gpu_laser.so: libgazebo_ros_gpu_laser.so: cannot open shared object file: No such file or directory
      

      通过上网查找资料,我运行以下指令:

      sudo apt-get install ros-humble-gazebo-ros-force-system
      sudo apt-get install ros-humble-gazebo-ros-gpu-laser
      

      发现无法定位相关的包,而且还有一点很奇怪,能够正常在gazebo中加载出模型,也能够正常拖动,但是鼠标一旦点击gazebo左边明细栏的model中机器人的模型,gazebo就会崩溃,需要强制退出,请问这两个问题应该如何解决呢?如果您能够提供答案,万分感激

      小鱼小 1 条回复 最后回复 回复 引用 0
      • 小鱼小
        小鱼 技术大佬 @yudonghou123
        最后由 编辑

        @yudonghou123 gazebo崩溃的终端有没有提示,是uuv的项目吗(如果是,我之前遇到过,是模型碰撞有些问题)

        新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

        yudonghou123Y 1 条回复 最后回复 回复 引用 0
        • yudonghou123Y
          小猴同学 @小鱼
          最后由 编辑

          @小鱼 您好,是UUV项目,当gazebo出现崩溃提示时,终端并没有输出任何提示,下面是在gazebo出现强制退出提示框时,运行gazebo环境时的终端输出:

          [INFO] [launch]: All log files can be found below /home/user2/.ros/log/2023-01-03-09-33-56-166184-user2-31472
          [INFO] [launch]: Default logging verbosity is set to INFO
          [INFO] [plankton_global_sim_time-1]: process started with pid [31485]
          [INFO] [gzserver-2]: process started with pid [31487]
          [INFO] [gzclient-3]: process started with pid [31489]
          [INFO] [static_transform_publisher-4]: process started with pid [31491]
          [INFO] [publish_world_models.py-5]: process started with pid [31493]
          [static_transform_publisher-4] [WARN] [1672709636.802938475] []: Old-style arguments are deprecated; see --help for new-style arguments
          [static_transform_publisher-4] [INFO] [1672709636.810684886] [world_ned_frame_publisher]: Spinning until stopped - publishing transform
          [static_transform_publisher-4] translation: ('0.000000', '0.000000', '0.000000')
          [static_transform_publisher-4] rotation: ('0.707107', '0.707107', '0.000000', '0.000000')
          [static_transform_publisher-4] from 'world' to 'world_ned'
          [gzclient-3] WARNING: CPU random generator seem to be failing, disabling hardware random number generation
          [gzclient-3] WARNING: RDRND generated: 0xffffffff 0xffffffff 0xffffffff 0xffffffff
          [gzclient-3] Gazebo multi-robot simulator, version 11.10.2
          [gzclient-3] Copyright (C) 2012 Open Source Robotics Foundation.
          [gzclient-3] Released under the Apache 2 License.
          [gzclient-3] http://gazebosim.org
          [gzclient-3] 
          [gzserver-2] Gazebo multi-robot simulator, version 11.10.2
          [gzserver-2] Copyright (C) 2012 Open Source Robotics Foundation.
          [gzserver-2] Released under the Apache 2 License.
          [gzserver-2] http://gazebosim.org
          [gzserver-2] 
          [publish_world_models.py-5] [INFO] [1672709637.277702701] [publish_world_models]: publish_world_models: start publishing vehicle footprints to RViz
          [gzserver-2] [Msg] Waiting for master.
          [gzserver-2] [Msg] Connected to gazebo master @ http://127.0.0.1:11345
          [gzserver-2] [Msg] Publicized address: 172.16.24.224
          [gzserver-2] Warning [parser.cc:723] Can not find the XML attribute 'version' in sdf XML tag for model: NED frame. Please specify the SDF protocol supported in the model configuration file. The first sdf tag in the config file will be used 
          [gzserver-2] [INFO] [1672709638.500273424] [gazebo.gazebo_ros]: Publishing states of gazebo models at [/gazebo/model_states]
          [gzserver-2] [INFO] [1672709638.500737383] [gazebo.gazebo_ros]: Publishing states of gazebo links at [/gazebo/link_states]
          [publish_world_models.py-5] [INFO] [1672709638.584478737] [publish_world_models]: 
          [publish_world_models.py-5] New model being published: heightmap
          [publish_world_models.py-5]      Position: [0.0, 0.0, -95.0]
          [publish_world_models.py-5]      Orientation: [0.0, 0.0, 0.0, 1.0]
          [publish_world_models.py-5]      Scale: [1.0, 1.0, 1.0]
          [publish_world_models.py-5] [INFO] [1672709638.584724503] [publish_world_models]: 
          [publish_world_models.py-5] New model being published: seafloor
          [publish_world_models.py-5]      Position: [0.0, 0.0, -100.0]
          [publish_world_models.py-5]      Orientation: [0.0, 0.0, 0.0, 1.0]
          [publish_world_models.py-5]      Scale: [1.0, 1.0, 1.0]
          [publish_world_models.py-5] [INFO] [1672709638.584942054] [publish_world_models]: 
          [publish_world_models.py-5] New model being published: north
          [publish_world_models.py-5]      Position: [1000.0, 0.0, -50.0]
          [publish_world_models.py-5]      Orientation: [0.0, 0.0, 0.0, 1.0]
          [publish_world_models.py-5]      Scale: [1.0, 1.0, 1.0]
          [publish_world_models.py-5] [INFO] [1672709638.585154456] [publish_world_models]: 
          [publish_world_models.py-5] New model being published: south
          [publish_world_models.py-5]      Position: [-1000.0, 0.0, -50.0]
          [publish_world_models.py-5]      Orientation: [0.0, 0.0, 0.0, 1.0]
          [publish_world_models.py-5]      Scale: [1.0, 1.0, 1.0]
          [publish_world_models.py-5] [INFO] [1672709638.585369553] [publish_world_models]: 
          [publish_world_models.py-5] New model being published: west
          [publish_world_models.py-5]      Position: [0.0, -1000.0, -50.0]
          [publish_world_models.py-5]      Orientation: [0.0, 0.0, 0.0, 1.0]
          [publish_world_models.py-5]      Scale: [1.0, 1.0, 1.0]
          [publish_world_models.py-5] [INFO] [1672709638.585596042] [publish_world_models]: 
          [publish_world_models.py-5] New model being published: east
          [publish_world_models.py-5]      Position: [0.0, 1000.0, -50.0]
          [publish_world_models.py-5]      Orientation: [0.0, 0.0, 0.0, 1.0]
          [publish_world_models.py-5]      Scale: [1.0, 1.0, 1.0]
          [gzclient-3] [Msg] Waiting for master.
          [gzclient-3] [Msg] Connected to gazebo master @ http://127.0.0.1:11345
          [gzclient-3] [Msg] Publicized address: 172.16.24.224
          [gzclient-3] [Wrn] [Event.cc:61] Warning: Deleting a connection right after creation. Make sure to save the ConnectionPtr from a Connect call
          [gzserver-2] [Msg] Loading world file [/home/user2/auv_ws/install/uuv_gazebo_worlds/share/uuv_gazebo_worlds/worlds/ocean_waves.world]
          [gzserver-2] [Msg] Loading underwater world...
          [gzserver-2] [Msg] Current velocity [m/s] Gauss-Markov process model:
          [gzserver-2] [Msg]      Mean = 0
          [gzserver-2]    Min. Limit = 0
          [gzserver-2]    Max. Limit = 5
          [gzserver-2]    Mu = 0
          [gzserver-2]    Noise Amp. = 0
          [gzserver-2] [Msg] Current velocity horizontal angle [rad] Gauss-Markov process model:
          [gzserver-2] [Msg]      Mean = 0
          [gzserver-2]    Min. Limit = -3.14159
          [gzserver-2]    Max. Limit = 3.14159
          [gzserver-2]    Mu = 0
          [gzserver-2]    Noise Amp. = 0
          [gzserver-2] [Msg] Current velocity horizontal angle [rad] Gauss-Markov process model:
          [gzserver-2] [Msg]      Mean = 0
          [gzserver-2]    Min. Limit = -3.14159
          [gzserver-2]    Max. Limit = 3.14159
          [gzserver-2]    Mu = 0
          [gzserver-2]    Noise Amp. = 0
          [gzserver-2] [Msg] Current velocity topic name: hydrodynamics/current_velocity
          [gzserver-2] [Msg] Underwater current plugin loaded!
          [gzserver-2]    WARNING: Current velocity calculated in the ENU frame
          [gzserver-2] [Msg] [UnderwaterCurrentROSPlugin] Node created with name: underwater_current_plugin with namespace: /hydrodynamics
          [gzserver-2] [Msg] [SphericalCoordinatesROSInterfacePlugin] Node created with name: sc_interface with namespace: /
          [gzserver-2] [Msg] Spherical coordinates reference=
          [gzserver-2]    - Latitude [degrees]=56.719
          [gzserver-2]    - Longitude [degrees]=3.51562
          [gzserver-2]    - Altitude [m]=0
          [gzserver-2] [Wrn] [Event.cc:61] Warning: Deleting a connection right after creation. Make sure to save the ConnectionPtr from a Connect call
          [gzserver-2] [INFO] [1672709644.635819479] [camera_controller]: Publishing camera info to [/eca_a9/camera/camera_info]
          [gzserver-2] [Msg] GPSROSPlugin - Loading base sensor plugin
          [gzserver-2] [Msg] [eca_a9_gazebo_gps_ros_plugin] Node created
          [gzserver-2]     - with name: eca_a9_gazebo_gps_ros_plugin
          [gzserver-2]     - with ns: /eca_a9
          [gzserver-2] [Msg] GPSROSPlugin - Converting GPS sensor pointer
          [gzserver-2] [Msg] GPSROSPlugin - Initialize sensor topic publisher
          [gzserver-2] [Err] [Plugin.hh:212] Failed to load plugin libgazebo_ros_gpu_laser.so: libgazebo_ros_gpu_laser.so: cannot open shared object file: No such file or directory
          [gzserver-2] [Err] [Plugin.hh:212] Failed to load plugin libgazebo_ros_gpu_laser.so: libgazebo_ros_gpu_laser.so: cannot open shared object file: No such file or directory
          [gzserver-2] Registered HydrodynamicModel type fossen
          [gzserver-2] Registered HydrodynamicModel type sphere
          [gzserver-2] Registered HydrodynamicModel type cylinder
          [gzserver-2] Registered HydrodynamicModel type spheroid
          [gzserver-2] Registered HydrodynamicModel type box
          [gzserver-2] [Msg] [UnderwaterObjectROSPlugin]: Node created. Name: eca_a9_uuv_plugin, namespace: /
          [gzserver-2] [Msg] Subscribing to current velocity topic: hydrodynamics/current_velocity
          [gzserver-2] [Msg] Name of the BASE_LINK: eca_a9/base_link
          [gzserver-2] [Msg] HMFossen: Using linear damping NULL
          [gzserver-2] [Msg] HMFossen: Using quad damping NULL
          [gzserver-2] eca_a9::eca_a9/base_link::added_mass
          [gzserver-2]            4           0           0           0           0           0
          [gzserver-2]            0          95           0           0           0           0
          [gzserver-2]            0           0          75           0           0           0
          [gzserver-2]            0           0           0         0.4           0           0
          [gzserver-2]            0           0           0           0          27           0
          [gzserver-2]            0           0           0           0           0          32
          [gzserver-2] eca_a9::eca_a9/base_link::scaling_added_mass
          [gzserver-2] eca_a9::eca_a9/base_link::offset_added_mass
          [gzserver-2] eca_a9::eca_a9/base_link::linear_damping
          [gzserver-2]            0           0           0           0           0           0
          [gzserver-2]            0           0           0           0           0           0
          [gzserver-2]            0           0           0           0           0           0
          [gzserver-2]            0           0           0           0           0           0
          [gzserver-2]            0           0           0           0           0           0
          [gzserver-2]            0           0           0           0           0           0
          [gzserver-2] eca_a9::eca_a9/base_link::linear_damping_forward_speed
          [gzserver-2]           -8           0           0           0           0           0
          [gzserver-2]            0        -162           0           0           0         150
          [gzserver-2]            0           0        -108           0        -100           0
          [gzserver-2]            0           0           0         -13           0           0
          [gzserver-2]            0           0          37           0         -20           0
          [gzserver-2]            0         -34           0           0           0         -32
          [gzserver-2] eca_a9::eca_a9/base_link::quadratic_damping
          [gzserver-2]            0           0           0           0           0           0
          [gzserver-2]            0           0           0           0           0           0
          [gzserver-2]            0           0           0           0           0           0
          [gzserver-2]            0           0           0           0           0           0
          [gzserver-2]            0           0           0           0           0           0
          [gzserver-2]            0           0           0           0           0           0
          [gzserver-2] eca_a9::eca_a9/base_link::scaling_damping
          [gzserver-2] eca_a9::eca_a9/base_link::offset_linear_damping
          [gzserver-2] eca_a9::eca_a9/base_link::offset_lin_forward_speed_damping
          [gzserver-2] eca_a9::eca_a9/base_link::offset_nonlin_damping
          [gzserver-2] eca_a9::eca_a9/base_link::volume
          [gzserver-2]    0.0679999 m^3
          [gzserver-2] eca_a9::eca_a9/base_link::scaling_volume
          [gzserver-2] Registered ThrusterDynamics type ZeroOrder
          [gzserver-2] Registered ThrusterDynamics type FirstOrder
          [gzserver-2] Registered ThrusterDynamics type Yoerger
          [gzserver-2] Registered ThrusterDynamics type Bessa
          [gzserver-2] Registered LiftDrag type Quadratic
          [gzserver-2] Registered LiftDrag type TwoLines
          [gzserver-2] [INFO] [1672709645.197180352] [eca_a9_fin0_model]: [FinROSPlugin] Namespace: 
          [gzserver-2] [INFO] [1672709645.214025420] [eca_a9_fin1_model]: [FinROSPlugin] Namespace: 
          [gzserver-2] [INFO] [1672709645.220164371] [eca_a9_fin2_model]: [FinROSPlugin] Namespace: 
          [gzserver-2] [INFO] [1672709645.225986638] [eca_a9_fin3_model]: [FinROSPlugin] Namespace: 
          [gzserver-2] [Msg] Subscribing to current velocity topic: hydrodynamics/current_velocity
          [gzserver-2] [Msg] Fin #0 initialized
          [gzserver-2]    - Link: eca_a9/fin0
          [gzserver-2]    - Robot model: eca_a9
          [gzserver-2]    - Input command topic: /eca_a9/fins/id_0/input
          [gzserver-2]    - Output topic: /eca_a9/fins/id_0/output
          [gzserver-2] [Msg] Subscribing to current velocity topic: hydrodynamics/current_velocity
          [gzserver-2] [Msg] Fin #1 initialized
          [gzserver-2]    - Link: eca_a9/fin1
          [gzserver-2]    - Robot model: eca_a9
          [gzserver-2]    - Input command topic: /eca_a9/fins/id_1/input
          [gzserver-2]    - Output topic: /eca_a9/fins/id_1/output
          [gzserver-2] [Msg] Subscribing to current velocity topic: hydrodynamics/current_velocity
          [gzserver-2] [Msg] Fin #2 initialized
          [gzserver-2]    - Link: eca_a9/fin2
          [gzserver-2]    - Robot model: eca_a9
          [gzserver-2]    - Input command topic: /eca_a9/fins/id_2/input
          [gzserver-2]    - Output topic: /eca_a9/fins/id_2/output
          [gzserver-2] [Msg] Subscribing to current velocity topic: hydrodynamics/current_velocity
          [gzserver-2] [Msg] Fin #3 initialized
          [gzserver-2]    - Link: eca_a9/fin3
          [gzserver-2]    - Robot model: eca_a9
          [gzserver-2]    - Input command topic: /eca_a9/fins/id_3/input
          [gzserver-2]    - Output topic: /eca_a9/fins/id_3/output
          [gzserver-2] Registered ConversionFunction type Basic
          [gzserver-2] Registered ConversionFunction type Bessa
          [gzserver-2] Registered ConversionFunction type LinearInterp
          [gzserver-2] [WARN] [1672709645.332107307] [tf2_buffer]: Detected time source change. Clearing TF buffer.
          [gzserver-2] [Msg] ConversionFunctionBasic::Create conversion function
          [gzserver-2]    - rotorConstant: 4.9e-05
          [gzserver-2] [Msg] [ThrusterROSPlugin] Node created with name: eca_a9_0_thruster_model, with ns: /
          [gzserver-2] [Msg] Thruster #0 initialized
          [gzserver-2]    - Link: eca_a9/thruster_0
          [gzserver-2]    - Robot model: eca_a9
          [gzserver-2]    - Input command topic: /eca_a9/thrusters/id_0/input
          [gzserver-2]    - Thrust output topic: /eca_a9/thrusters/id_0/thrust
          [gzserver-2] [Msg] ROS Battery Plugin for link <eca_a9/battery_link> initialized
          [gzserver-2]    - Initial charge [Ah]=1.1665
          [gzserver-2]    - Update rate [Hz]=2
          [gzserver-2] [Msg] [pose_3d_plugin] Node created
          [gzserver-2]     - with name: pose_3d_plugin
          [gzserver-2]     - with ns: /eca_a9
          [gzserver-2] [Msg] Static reference frame=world_ned
          [gzserver-2] [Msg] [libuuv_gazebo_dvl_plugin] Node created
          [gzserver-2]     - with name: libuuv_gazebo_dvl_plugin
          [gzserver-2]     - with ns: /eca_a9
          [gzserver-2] [Msg] Static reference frame=world
          [gzserver-2] [Msg] CustomBatteryConsumerROSPlugin::Device <eca_a9_dvl_battery_consumer> added as battery consumer for the battery <eca_a9/battery_link>
          [gzserver-2]    - ID=0
          [gzserver-2]    - Power load [W]=25
          [gzserver-2] [Msg] CustomBatteryConsumerROSPlugin::Device <eca_a9_sonarleft_battery_consumer> added as battery consumer for the battery <eca_a9/battery_link>
          [gzserver-2]    - ID=1
          [gzserver-2]    - Power load [W]=25
          [gzserver-2] [Msg] CustomBatteryConsumerROSPlugin::Device <eca_a9_sonarright_battery_consumer> added as battery consumer for the battery <eca_a9/battery_link>
          [gzserver-2]    - ID=2
          [gzserver-2]    - Power load [W]=25
          [gzserver-2] [Msg] [libuuv_gazebo_subseapressure_plugin] Node created
          [gzserver-2]     - with name: libuuv_gazebo_subseapressure_plugin
          [gzserver-2]     - with ns: /eca_a9
          [gzserver-2] [Msg] CustomBatteryConsumerROSPlugin::Device <eca_a9_pressure_battery_consumer> added as battery consumer for the battery <eca_a9/battery_link>
          [gzserver-2]    - ID=3
          [gzserver-2]    - Power load [W]=5
          [gzserver-2] [Msg] [libuuv_gazebo_imu_plugin] Node created
          [gzserver-2]     - with name: libuuv_gazebo_imu_plugin
          [gzserver-2]     - with ns: /eca_a9
          [gzserver-2] [Msg] Static reference frame=world
          [gzserver-2] gzserver: /home/user2/auv_ws/src/Plankton-master/uuv_gazebo_plugins/uuv_gazebo_ros_plugins/src/CustomBatteryConsumerROSPlugin.cpp:62: virtual void gazebo::CustomBatteryConsumerROSPlugin::Load(gazebo::physics::ModelPtr, sdf::v9::ElementPtr): Assertion `(this->battery)&&("Battery was NULL")' failed.
          [ERROR] [gzserver-2]: process has died [pid 31487, exit code -6, cmd 'gzserver worlds/ocean_waves.world --verbose -slibgazebo_ros_init.so -slibgazebo_ros_factory.so -slibgazebo_ros_force_system.so'].
          [gzserver-2] 
          gzclient-3] [Wrn] [Publisher.cc:135] Queue limit reached for topic /gazebo/oceans_waves/user_camera/pose, deleting message. This warning is printed only once.
          

          运行机器人模型的终端输出没有任何提示,您看看,若能解决,非常感谢,也谢谢您之前的解答,您身体刚阳康,也不要过多劳累,注意休息🤠

          小鱼小 1 条回复 最后回复 回复 引用 0
          • 小鱼小
            小鱼 技术大佬 @yudonghou123
            最后由 编辑

            @yudonghou123 在 Failed to load plugin libgazebo_ros_gpu_laser.so: libgazebo_ros_gpu_laser.so: cannot open shared object file: No such file or directory 中说:

            Battery was NULL

            可以搜一搜代码中这句话,看看是个什么情况

            新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

            yudonghou123Y 2 条回复 最后回复 回复 引用 0
            • yudonghou123Y
              小猴同学 @小鱼
              最后由 yudonghou123 编辑

              @小鱼 非常感谢您的解答,我查了一下,发现在他的uuv_gazebo_ros_plugins/src/CustomBatteryConsumerROSPlugin.cpp中关于其是这么描述的:

                GZ_ASSERT(_sdf->HasElement("battery_name"), "Battery name is missing");
                this->batteryName = _sdf->Get<std::string>("battery_name");
                this->battery = link->Battery(this->batteryName);
                GZ_ASSERT(this->battery, "Battery was NULL");
              

              其完整程序如下:

              // Copyright (c) 2020 The Plankton Authors.
              // All rights reserved.
              //
              // This source code is derived from UUV Simulator
              // (https://github.com/uuvsimulator/uuv_simulator)
              // Copyright (c) 2016-2019 The UUV Simulator Authors
              // licensed under the Apache license, Version 2.0
              // cf. 3rd-party-licenses.txt file in the root directory of this source tree.
              //
              // Licensed under the Apache License, Version 2.0 (the "License");
              // you may not use this file except in compliance with the License.
              // You may obtain a copy of the License at
              //
              //     http://www.apache.org/licenses/LICENSE-2.0
              //
              // Unless required by applicable law or agreed to in writing, software
              // distributed under the License is distributed on an "AS IS" BASIS,
              // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
              // See the License for the specific language governing permissions and
              // limitations under the License.
              
              #include <uuv_gazebo_ros_plugins/CustomBatteryConsumerROSPlugin.h>
              
              namespace gazebo
              {
              /////////////////////////////////////////////////
              CustomBatteryConsumerROSPlugin::CustomBatteryConsumerROSPlugin()
              {
                this->isDeviceOn = true;
              }
              
              /////////////////////////////////////////////////
              CustomBatteryConsumerROSPlugin::~CustomBatteryConsumerROSPlugin()
              {
              }
              
              /////////////////////////////////////////////////
              void CustomBatteryConsumerROSPlugin::Load(physics::ModelPtr _parent,
                sdf::ElementPtr _sdf)
              {
                if (!rclcpp::ok())
                {
                  gzerr << "Not loading plugin since ROS has not been "
                        << "properly initialized.  Try starting gazebo with ros plugin:\n"
                        << "  gazebo -s libgazebo_ros_api_plugin.so\n";
                  return;
                }
              
                //Create the ROS node with the plugin's name
                //TODO Check uniqueness of the node
                myRosNode = gazebo_ros::Node::CreateWithArgs(_sdf->Get<std::string>("name"));  //gazebo_ros::Node::Get(_sdf);
                // new ros::NodeHandle(""));
              
                GZ_ASSERT(_sdf->HasElement("link_name"), "Battery link name (link_name) is missing");
                this->linkName = _sdf->Get<std::string>("link_name");
                physics::LinkPtr link = _parent->GetLink(this->linkName);
                GZ_ASSERT(link, "Consumer plugin: battery link was NULL");
              
                GZ_ASSERT(_sdf->HasElement("battery_name"), "Battery name is missing");
                this->batteryName = _sdf->Get<std::string>("battery_name");
                this->battery = link->Battery(this->batteryName);
                GZ_ASSERT(this->battery, "Battery was NULL");
              
                GZ_ASSERT(_sdf->HasElement("power_load"), "Power load is missing");
                this->powerLoad = _sdf->Get<double>("power_load");
              
                GZ_ASSERT(this->powerLoad > 0, "Power load must be greater than zero");
              
                // Adding consumer
                this->consumerID = this->battery->AddConsumer();
              
                if (_sdf->HasElement("topic_device_state"))
                {
                  std::string topicName = _sdf->Get<std::string>("topic_device_state");
                  if (!topicName.empty())
                      myDeviceStateSub = myRosNode->create_subscription<std_msgs::msg::Bool>(
                        topicName, 1,
                        std::bind(&CustomBatteryConsumerROSPlugin::UpdateDeviceState,
                        this, std::placeholders::_1));
                }
                else
                {
                  // In the case the device is always on, then set the power load only once
                  this->UpdatePowerLoad(this->powerLoad);
                }
              
                gzmsg << "CustomBatteryConsumerROSPlugin::Device <"
                  << _sdf->Get<std::string>("name") 
                  << "> added as battery consumer for the battery <" 
                  << this->linkName << ">" << std::endl
                  << "\t- ID=" << this->consumerID << std::endl
                  << "\t- Power load [W]=" << this->powerLoad
                  << std::endl;
              }
              
              /////////////////////////////////////////////////
              void CustomBatteryConsumerROSPlugin::UpdateDeviceState(
                const std_msgs::msg::Bool::SharedPtr _msg)
              {
                this->isDeviceOn = _msg->data;
                if (this->isDeviceOn)
                  this->UpdatePowerLoad(this->powerLoad);
                else
                  this->UpdatePowerLoad(0.0);
              }
              
              /////////////////////////////////////////////////
              void CustomBatteryConsumerROSPlugin::UpdatePowerLoad(double _powerLoad)
              {
                if (!this->battery->SetPowerLoad(this->consumerID, _powerLoad))
                  gzerr << "Error setting the consumer power load" << std::endl;
              }
              
              GZ_REGISTER_MODEL_PLUGIN(CustomBatteryConsumerROSPlugin)
              }
              
              

              下面是机器人urdf文件关于这个battery的内容,还是命名空间的问题吗?

              <link name="eca_a9/battery_link">
                  <inertial>
                    <inertia ixx="0.00001" ixy="0.0" ixz="0.0" iyy="0.00001" iyz="0.0" izz="0.00001"/>
                    <mass value="0.001"/>
                    <origin rpy="0 0 0" xyz="0 0 0"/>
                  </inertial>
                </link>
                <joint name="eca_a9/battery_joint" type="revolute">
                  <origin rpy="0 0 0" xyz="0 0 0"/>
                  <parent link="eca_a9/base_link"/>
                  <child link="eca_a9/battery_link"/>
                  <axis xyz="1 0 0"/>
                  <limit effort="0" lower="0" upper="0" velocity="0"/>
                </joint>
                <gazebo reference="eca_a9/battery_link">
                  <battery name="eca_a9/battery">
                    <voltage>4.2</voltage>
                  </battery>
                </gazebo>
                <gazebo>
                  <plugin filename="liblinear_battery_ros_plugin.so" name="eca_a9_linear_battery_ros_plugin">
                    <ros>
                      <namespace>eca_a9</namespace>
                    </ros>
                    <!-- <namespace>${namespace}</namespace> -->
                    <link_name>eca_a9/battery_link</link_name>
                    <battery_name>eca_a9/battery</battery_name>
                    <open_circuit_voltage_constant_coef>3.7</open_circuit_voltage_constant_coef>
                    <open_circuit_voltage_linear_coef>-3.1424</open_circuit_voltage_linear_coef>
                    <initial_charge>1.1665</initial_charge>
                    <capacity>0.5</capacity>
                    <resistance>0.002</resistance>
                    <smooth_current_tau>1.9499</smooth_current_tau>
                    <update_rate>2.0</update_rate>
                  </plugin>
                </gazebo>
              
              1 条回复 最后回复 回复 引用 0
              • yudonghou123Y yudonghou123 将这个主题转为问答主题,在
              • yudonghou123Y
                小猴同学 @小鱼
                最后由 编辑

                此回复已被删除!
                yudonghou123Y 1 条回复 最后回复 回复 引用 0
                • yudonghou123Y
                  小猴同学 @yudonghou123
                  最后由 编辑

                  @yudonghou123
                  其参数的launch文件为:

                  <launch>
                    <arg name="debug" default="0"/>
                    <arg name="x" default="0"/>
                    <arg name="y" default="0"/>
                    <arg name="z" default="-20"/>
                    <arg name="roll" default="0.0"/>
                    <arg name="pitch" default="0.0"/>
                    <arg name="yaw" default="0.0"/>
                  
                    <arg name="use_sim_time" default="true"/>
                    <arg name="use_geodetic" default="false"/>
                    <arg name="latitude" default="0"/>
                    <arg name="longitude" default="0"/>
                    <arg name="depth" default="0"/>
                  
                    <arg name="mode" default="default"/>
                    <arg name="namespace" default="eca_a9"/>
                    <arg name="latitude_ref" default="0"/>
                    <arg name="longitude_ref" default="0"/>
                    <arg name="altitude_ref" default="0"/>
                  
                    <arg name="use_ned_frame" default="true"/>
                    <arg name="generated_urdf" default="$(find-pkg-share eca_a9_description)/robots/generated/$(var namespace)/robot_description"/>
                    <arg name="cmd"
                         default="$(exec-in-pkg xacro xacro) '$(find-pkg-share eca_a9_description)/robots/eca_a9_$(var mode).urdf.xacro'
                            debug:=$(var debug)
                            namespace:=$(var namespace)
                            inertial_reference_frame:=world_ned
                            > $(var generated_urdf)
                            " />
                    <arg name="cmdUnless"
                         default="$(exec-in-pkg xacro xacro) '$(find-pkg-share eca_a9_description)/robots/eca_a9_$(var mode).urdf.xacro'
                            debug:=$(var debug)
                            namespace:=$(var namespace)
                            inertial_reference_frame:=world 
                            > $(var generated_urdf)
                            " />
                  
                  
                      <!-- Mode to open different robot configurations as set the in file )
                    nomenclature standard for the files in /robots
                  
                    /robots/<mode>.xacro
                    -->
                    <arg name="mode" default="default"/>
                  
                    <!-- Vehicle's namespace -->
                    <arg name="namespace" default="eca_a9"/>
                  
                    <include file="$(find-pkg-share eca_a9_description)/launch/upload_eca_a9.launch.py">
                      <arg name="debug" value="$(var debug)"/>
                      <arg name="x" value="$(var x)"/>
                      <arg name="y" value="$(var y)"/>
                      <arg name="z" value="$(var z)"/>
                      <arg name="roll" value="$(var roll)"/>
                      <arg name="pitch" value="$(var pitch)"/>
                      <arg name="yaw" value="$(var yaw)"/>
                      <arg name="use_ned_frame" value="$(var use_ned_frame)"/>
                      <arg name="namespace" value="$(var namespace)"/>
                      <!-- <arg name="use_sim_time" value="$(var use_sim_time)"/> -->
                    </include>
                    <!-- <group>
                      <push-ros-namespace namespace="$(var namespace)" />
                  
                      <group if="$(var use_ned_frame)">
                        <executable
                          cmd="$(var cmd)"
                          name="robot_description"
                          output="screen"
                          shell="true">
                        </executable>
                      </group>
                  
                      <group unless="$(var use_ned_frame)">
                        <executable
                          cmd="$(var cmdUnless)"
                          cwd="$(find-pkg-prefix xacro)"
                          name="robot_description"
                          output="screen"
                          shell="true">
                        </executable>
                      </group> -->
                  
                      <!-- Run a python script to the send a service call to gazebo_ros to spawn a URDF robot -->
                      <!-- <group if="$(var use_geodetic)">
                        <node
                          name="urdf_spawner"
                          pkg="gazebo_ros"
                          exec="spawn_entity.py"
                          respawn="false"
                          output="screen"
                          args="
                            -latitude $(var latitude)
                            -longitude $(var longitude)
                            -depth $(var depth)
                            -latitude_ref $(var latitude_ref)
                            -longitude_ref $(var longitude_ref)
                            -altitude_ref $(var altitude_ref)
                            -R $(var roll)
                            -P $(var pitch)
                            -Y $(var yaw)
                            -entity $(var namespace)
                            -file $(var generated_urdf)
                          "/>
                      </group>
                  
                      <group unless="$(var use_geodetic)">
                        <node
                          name="urdf_spawner"
                          pkg="gazebo_ros"
                          exec="spawn_entity.py"
                          respawn="false"
                          output="screen"
                          args="
                            -x $(var x)
                            -y $(var y)
                            -z $(var z)
                            -R $(var roll)
                            -P $(var pitch)
                            -Y $(var yaw)
                            -entity $(var namespace)
                            -file $(var generated_urdf)
                          "/>
                      </group> -->
                  
                      <!-- A joint state publisher plugin already is started with the model, no need to use the default joint state publisher  -gazebo_namespace /gazebo-->
                  
                      <!-- Publish robot model for ROS -->
                       <!--     <node name="robot_state_publisher" pkg="robot_state_publisher" exec="robot_state_publisher" output="screen">
                        <param name="robot_description" value="/$(var namespace)/robot_description" />
                        <param name="use_sim_time" value="$(var use_sim_time)" />
                      </node> -->
                      <!-- <node name="robot_state_publisher" pkg="robot_state_publisher" exec="robot_state_publisher" respawn="true" output="screen"
                        args="$(var generated_urdf)">
                        <param name="use_sim_time" value="$(var use_sim_time)"/>
                      </node>
                    </group> -->
                  
                    <!--publish state and tf for in relation to the world frame -->
                  <!--   <include file="$(find-pkg-share uuv_assistants)/launch/message_to_tf.launch">
                      <arg name="namespace" value="$(var namespace)"/>
                      <arg name="world_frame" value="world"/>
                      <arg name="child_frame_id" value="/$(var namespace)/base_link"/>
                    </include> -->
                  
                  </launch>
                  
                  
                  11424158741 1 条回复 最后回复 回复 引用 0
                  • yudonghou123Y yudonghou123 将这个主题标记为已解决,在
                  • 11424158741
                    江花月夜 @yudonghou123
                    最后由 编辑

                    @yudonghou123 您好,我也遇到了相同的问题,请问您最后如何解决的

                    1 条回复 最后回复 回复 引用 0
                    • 第一个帖子
                      最后一个帖子
                    皖ICP备16016415号-7
                    Powered by NodeBB | 鱼香ROS