标签: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文件中的部分内容拼接并且改编的。
- 模型的生成方式,调用了
single_vehicle_spawn.launch
,并传入不同的mavlink_udp_port
和mavlink_tcp_port
用于不同飞机mavlink连接。- 每架飞机的
mavros
传入不同的fcu_url
和tgt_system
参数,便于启动不同的mavros
- 补充:
gcs_url
是指地面站端口,而我们在仿真中一般用不到地面站。- 关于udp端口的含义可以参照PX4官网,也可以参照这篇博客PX4仿真中的UDP端口匹配
- 提示:使用
group ns
的方式可以为包含的节点创建前缀名,用来区分每架飞机的节点和话题。
- 新版本的PX4-Autopilot还增加了一些launch文件,主要是区分了
urdf
和sdf
两种模型生成方式 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_descirption
下iris_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_descirption
中iris_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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。