ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-10-06 15:32:12  阅读:721  来源: 互联网

标签:iris sitl launch GAZEBO PX4 sdf gazebo


目录


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

1.1 单个launch文件解读

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

  • px4.launch

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

  • posix_sitl.launch

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

  • mavros_posix_sitl.launch

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使用。

  • single_vehicle_spawn.launch

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

  • multi_uav_mavros_sitl.launch

是由前面几个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的方式可以为包含的节点创建前缀名,用来区分每架飞机的节点和话题。
  • 新版本的PX4-Autopilot还增加了一些launch文件,主要是区分了urdfsdf两种模型生成方式
  • single_vehicle_spawn_sdf.launch指明了用后缀名.sdf模型生成。
  • single_vehicle_spawn_xacro.launch指明了用后缀名.xacro模型生成。

在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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有