其他分享
首页 > 其他分享> > PX4在GAZEBO仿真中加载iris模型问题

PX4在GAZEBO仿真中加载iris模型问题

作者:互联网

目录


1. PX4启动仿真的launch系列文件

1.1 单个launch文件解读

打开每个文件的开头,都有对它功能的描述。

Posix SITL PX4 launch script
Launches Only PX4 SITL. This can be used by external projects
加载px4_sitl仿真的节点

Posix SITL environment launch script
launches PX4 SITL, Gazebo environment, and spawns vehicle
px4.launch基础上,打开GAZEBO环境并使用spawn_model加载sdf格式的飞机模型

posix_sitl.launch基础上,加入mavros package里的px4.launch(注意不是px4下的px4.launch)。
即开启了sitl仿真后,飞机信息通过mavros来传递交互。那么交互的端口号fcu_url即飞机端udp端口由<arg name="fcu_url" default="udp://:14540@localhost:14557"/>确定。这个参数主要是为传入mavros使用。

Posix SITL environment launch script
launchs PX4 SITL and spawns vehicle
打开sitl节点,以及使用xacro加载urdf格式的飞机模型。注意加载模型有urdf和上述sdf两种方式。后文会对两种方式详细比较。

是由前面几个launch文件中的部分内容拼接并且改编的。

  1. 模型的生成方式,调用了single_vehicle_spawn.launch,并传入不同的mavlink_udp_portmavlink_tcp_port用于不同飞机mavlink连接。
  2. 每架飞机的mavros传入不同的fcu_urltgt_system参数,便于启动不同的mavros
  3. 补充:gcs_url是指地面站端口,而我们在仿真中一般用不到地面站。
  4. 关于udp端口的含义可以参照PX4官网,也可以参照这篇博客PX4仿真中的UDP端口匹配
  5. 提示:使用group ns的方式可以为包含的节点创建前缀名,用来区分每架飞机的节点和话题。

在v1.12.3版本中PX4-Autopilot/Tools/sitl_gazebo/models/下的模型中,凡是model.sdf文件都多了model.sdf.jinja,model.sdf.last_generated文件。
而之前采用URDF文件生成,一般都是调用PX4-Autopilot/Tools/sitl_gazebo/models/rotors_descirptioniris_base.xacro。目前v1.12.3版本已经没有这个rotors_descirption文件夹了,也就是说px4开始全面转向sdf格式的模型。
【注】经过ubuntu18.04+gazebo9对sdf文件生成模型测试,会出现gazebo无法加载的情况,目前可用于仿真仍然是xacro格式的模型。该问题待更新


1.2 对iris模型添加相机

由上文所述,目前通过改xacro文件可以加载模型,不要通过简单地修改<arg name="vehicle" value="iris_fpv_cam">来试图给iris添加相机。因为最终它会调用rotors_descirptioniris_base.xacro来加载解析。而当vehicle = iris_fpv_cam时,他会去寻找iris_fpv_cam_base.xacro,然而这个文件是没有的。
最粗暴的方式是直接修改iris_base.xacro文件,为它添加相机组件。参照博客gazebo中为Px4安装单目相机

如果直接想使用现成的模型,建议typhoon h480(六旋翼飞机带云台相机)


1.3 ~/.bashrc环境变量问题

如果不能运行,可能是环境变量的问题,
参照之前我的博客Ubuntu18.04安装PX4并与ROS联合实验 这一部分

这是我的~/.bashrc,请根据自己的系统路径修改:


2. 一些Bug

2.1 我的台式机无法加载模型

2.1.1 若使用v1.9.2版本

总会出现

[INFO] [1633444976.357504, 0.000000]: Loading model XML from file /home/wzy/src/PX4-Autopilot/Tools/sitl_gazebo/models/iris/iris.sdf
[INFO] [1633444976.362299, 0.000000]: Waiting for service /gazebo/spawn_sdf_model
[ INFO] [1633444977.225659845]: waitForService: Service [/gazebo/set_physics_properties] is now available.
[ INFO] [1633444977.249643142, 0.020000000]: Physics dynamic reconfigure ready.
[INFO] [1633444977.266593, 0.000000]: Calling service /gazebo/spawn_sdf_model
[INFO] [1633444977.463774, 0.204000]: Spawn status: SpawnModel: Successfully spawned entity
gzserver: symbol lookup error: /home/wzy/src/PX4-Autopilot/build/px4_sitl_default/build_gazebo/libgazebo_multirotor_base_plugin.so: undefined symbol: _ZN8mav_msgs4msgs10MotorSpeedC1Ev

曾经花了很多努力,也以失败告终

2.1.2 若使用v1.12.3版本

[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[INFO] [1633502837.816712, 0.010000]: Spawn status: SpawnModel: Successfully spawned entity
[tcsetpgrp failed in terminal_inferior: Inappropriate ioctl for device]
[libprotobuf ERROR …/…/src/google/protobuf/descriptor_database.cc:57] File already exists in database: Imu.proto
[libprotobuf FATAL …/…/src/google/protobuf/descriptor.cc:1164] CHECK failed: generated_database_->Add(encoded_file_descriptor, size):
terminate called after throwing an instance of ‘google::protobuf::FatalException’
what(): CHECK failed: generated_database_->Add(encoded_file_descriptor, size):

经问题排查,是protobuf不能链接静态库(或者动态库)导致的。由于ros-melodic-gazebo-ros依赖于libgazebo9-dev,而安装sudo apt-get install libgazebo9-dev会自动安装依赖libprotobuf-dev,所以不可避免地要安装二进制版本libprotobuf-dev。想通过源码编译解决protobuf的问题不太可能。


2.2 gazebo无法打开

若遇到终端输入 gazebo 没有反应,gazebo --verbose可以看到详细的输出,一般是端口占用问题。
通过改变端口号 export GAZEBO_MASTER_URI=http://localhost:11348可以解决。

标签:iris,sitl,launch,GAZEBO,PX4,sdf,gazebo
来源: https://blog.csdn.net/boyhoodme/article/details/120621078