紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
小鱼 ROS 2 新书上线!点击链接查看, 新书配套视频点击链接查看。
提问前必看的发帖注意事项—— 提问前必看!不符合要求的问题拒绝回答!!
社区使用指南—如何添加标签修改密码
launch运行报错
-
系统ubuntu22.04 ros2 humble
我的launch文件如下:<launch> <!-- Vehicle's initial position --> <arg name="debug" default="0"/> <arg name="x" default="0"/> <arg name="y" default="0"/> <arg name="z" default="-5"/> <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="record" default="false"/> <arg name="bag_filename" default="recording.bag"/> <arg name="use_ned_frame" default="true"/> <arg name="uuv_name" default="eca_a9"/> <arg name="joy_id" default="0"/> <include file="$(find-pkg-share eca_a9_description)/launch/upload_eca_a9.launch"> <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)"/> </include> <include file="$(find-pkg-share eca_a9_control)/launch/start_auv_teleop.launch"> <arg name="uuv_name" value="$(var uuv_name)"/> <arg name="joy_id" value="$(var joy_id)"/> </include> <!-- Initialize the recording fo the simulation according to the record flag --> <include file="$(find-pkg-share eca_a9_gazebo)/launch/record_demo.launch"> <arg name="record" value="$(var record)"/> <arg name="use_ned_frame" value="$(var use_ned_frame)"/> <arg name="bag_filename" value="$(var bag_filename)"/> </include> </launch>
终端报错:
[INFO] [launch]: All log files can be found below /home/user2/.ros/log/2023-02-16-18-17-19-117051-user2-544257 [INFO] [launch]: Default logging verbosity is set to INFO redefining global symbol: range when instantiating macro: pressure_plugin_macro (/home/user2/auv_ws/install/uuv_sensor_ros_plugins/share/uuv_sensor_ros_plugins/urdf/pressure_snippets.xacro) instantiated from: default_pressure (/home/user2/auv_ws/install/uuv_sensor_ros_plugins/share/uuv_sensor_ros_plugins/urdf/pressure_snippets.xacro) instantiated from: eca_a9_base (/home/user2/auv_ws/install/eca_a9_description/share/eca_a9_description/urdf/eca_a9_base.xacro) in file: /home/user2/auv_ws/install/eca_a9_description/share/eca_a9_description/urdf/eca_a9_sensors.xacro included from: /home/user2/auv_ws/install/eca_a9_description/share/eca_a9_description/robots/eca_a9_default.urdf.xacro redefining global symbol: gamma when instantiating macro: chemical_concentration_sensor_macro (/home/user2/auv_ws/install/uuv_sensor_ros_plugins/share/uuv_sensor_ros_plugins/urdf/chemical_concentration_snippets.xacro) instantiated from: default_chemical_concentration_sensor (/home/user2/auv_ws/install/uuv_sensor_ros_plugins/share/uuv_sensor_ros_plugins/urdf/chemical_concentration_snippets.xacro) instantiated from: eca_a9_base (/home/user2/auv_ws/install/eca_a9_description/share/eca_a9_description/urdf/eca_a9_base.xacro) in file: /home/user2/auv_ws/install/eca_a9_description/share/eca_a9_description/urdf/eca_a9_sensors.xacro included from: /home/user2/auv_ws/install/eca_a9_description/share/eca_a9_description/robots/eca_a9_default.urdf.xacro [ERROR] [launch]: Caught exception in launch (see debug for traceback): Caught exception when trying to load file of format [launch]: Error trying to process rule "substitution": Unknown substitution: arg
其中有问题的一个文件,其程序是这样的
// 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 2 license // 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_sensor_ros_plugins/SubseaPressureROSPlugin.h> namespace gazebo { //double range = 3000; ///////////////////////////////////////////////// SubseaPressureROSPlugin::SubseaPressureROSPlugin() : ROSBaseModelPlugin() { } ///////////////////////////////////////////////// SubseaPressureROSPlugin::~SubseaPressureROSPlugin() { } ///////////////////////////////////////////////// void SubseaPressureROSPlugin::Load(physics::ModelPtr _model, sdf::ElementPtr _sdf) { ROSBaseModelPlugin::Load(_model, _sdf); //GetSDFParam<double>(_sdf, "saturation", this->saturation, 3000); GetSDFParam<double>(_sdf, "saturation", this->range, 3000); GetSDFParam<bool>(_sdf, "estimate_depth_on", this->estimateDepth, false); GetSDFParam<double>(_sdf, "standard_pressure", this->standardPressure, 101.325); GetSDFParam<double>(_sdf, "kPa_per_meter", this->kPaPerM, 9.80638); this->rosSensorOutputPub = myRosNode->create_publisher<sensor_msgs::msg::FluidPressure>( this->sensorOutputTopic, 1); if (this->gazeboMsgEnabled) { this->gazeboSensorOutputPub = this->gazeboNode->Advertise<sensor_msgs::msgs::Pressure>( myRobotNamespace + "/" + this->sensorOutputTopic, 1); } } ///////////////////////////////////////////////// bool SubseaPressureROSPlugin::OnUpdate(const common::UpdateInfo& _info) { // Publish sensor state this->PublishState(); if (!this->EnableMeasurement(_info)) return false; // Using the world pose wrt Gazebo's ENU reference frame ignition::math::Vector3d pos; #if GAZEBO_MAJOR_VERSION >= 8 pos = this->link->WorldPose().Pos(); #else pos = this->link->GetWorldPose().Ign().Pos(); #endif double depth = std::abs(pos.Z()); double pressure = this->standardPressure; if (depth >= 0) { // Convert depth to pressure pressure += depth * this->kPaPerM; } pressure += this->GetGaussianNoise(this->noiseAmp); double inferredDepth = 0.0; // Estimate depth, if enabled if (this->estimateDepth) { inferredDepth = (pressure - this->standardPressure) / this->kPaPerM; } // Publish Gazebo pressure message, if enabled if (this->gazeboMsgEnabled) { sensor_msgs::msgs::Pressure gazeboMsg; gazeboMsg.set_pressure(pressure); gazeboMsg.set_stddev(this->noiseSigma); if (this->estimateDepth) gazeboMsg.set_depth(inferredDepth); this->gazeboSensorOutputPub->Publish(gazeboMsg); } // Publish ROS pressure message sensor_msgs::msg::FluidPressure rosMsg; rosMsg.header.stamp.sec = _info.simTime.sec; rosMsg.header.stamp.nanosec = _info.simTime.nsec; rosMsg.header.frame_id = this->link->GetName(); rosMsg.fluid_pressure = pressure; rosMsg.variance = this->noiseSigma * this->noiseSigma; this->rosSensorOutputPub->publish(rosMsg); // Read the current simulation time #if GAZEBO_MAJOR_VERSION >= 8 this->lastMeasurementTime = this->world->SimTime(); #else this->lastMeasurementTime = this->world->GetSimTime(); #endif return true; } ///////////////////////////////////////////////// GZ_REGISTER_MODEL_PLUGIN(SubseaPressureROSPlugin) }
那个参数在其函数文件定义的是protected类型的,各位大佬,请问这是什么情况呢?怎么解决呢