GZ-sim源码编译
我们一般使用Gazebo都是直接使用二进制的方式安装,但有时候我们需要新增或修改gz中使用的plugin插件模块,因此本文介绍如何下载编译并使用gz插件源码。
参考链接:
源码编译
工具配置
安装pyhton虚拟环境
sudo apt update && sudo apt install -y python3-pip python3-venv lsb-release gnupg curl git
启动并配置python虚拟环境
python3 -m venv $HOME/vcs_colcon_installation
. $HOME/vcs_colcon_installation/bin/activate
pip3 install vcstool colcon-common-extensions
安装vcstool
sudo sh -c 'echo "deb http://packages.ros.org/ros2/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros2-latest.list'
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install python3-vcstool python3-colcon-common-extensions
下载源码
mkdir -p ~/workspace/src
cd ~/workspace/src
curl -O https://raw.githubusercontent.com/gazebo-tooling/gazebodistro/master/collection-harmonic.yaml
vcs import < collection-harmonic.yaml
安装依赖
sudo curl https://packages.osrfoundation.org/gazebo.gpg --output /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg] http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gazebo-stable.list > /dev/null
sudo apt-get update
cd ~/workspace/src
sudo apt -y install \
$(sort -u $(find . -iname 'packages-'`lsb_release -cs`'.apt' -o -iname 'packages.apt' | grep -v '/\.git/') | sed '/gz\|sdf/d' | tr '\n' ' ')
编译源码
# 首先需要运行下面的指令,切换python环境
. $HOME/vcs_colcon_installation/bin/activate
# 我在编译时直接使用
colcon build --merge-install
# 系统会直接卡死,随后使用
colcon build --cmake-args ' -DBUILD_TESTING=OFF' --merge-install
# 可以顺利编译通过
测试功能
source ~/workspace/install/setup.bash
# 后可以使用
gz sim
# 尝试打开gazebo,若顺利打开,则表明编译与安装完成
插件使用解释
以Ardupilot开源飞控使用iris模型为例,首先看到iris_with_ardupilot/model.sdf模型中部分代码为
<plugin name="ArduPilotPlugin"
filename="ArduPilotPlugin">
<!-- Port settings -->
<fdm_addr>127.0.0.1</fdm_addr>
<fdm_port_in>9002</fdm_port_in>
<connectionTimeoutMaxCount>5</connectionTimeoutMaxCount>
<lock_step>1</lock_step>
<have_32_channels>0</have_32_channels>
<modelXYZToAirplaneXForwardZDown degrees="true">0 0 0 180 0 0</modelXYZToAirplaneXForwardZDown>
<gazeboXYZToNED degrees="true">0 0 0 180 0 90</gazeboXYZToNED>
<imuName>iris_with_standoffs::imu_link::imu_sensor</imuName>
其中 <plugin name="ArduPilotPlugin" filename="ArduPilotPlugin">表示使用的是ArduPilotPlugin插件,该插件位于ardupilot_gazebo github仓库。此外该插件中对每个旋翼的控制通过以下内容实现。
<control channel="0">
<jointName>iris_with_standoffs::rotor_0_joint</jointName>
<useForce>1</useForce>
<multiplier>838</multiplier>
<offset>0</offset>
<servo_min>1100</servo_min>
<servo_max>1900</servo_max>
<type>VELOCITY</type>
<p_gain>0.20</p_gain>
<i_gain>0</i_gain>
<d_gain>0</d_gain>
<i_max>0</i_max>
<i_min>0</i_min>
<cmd_max>2.5</cmd_max>
<cmd_min>-2.5</cmd_min>
<controlVelocitySlowdownSim>1</controlVelocitySlowdownSim>
</control>
通过以上模块,可实现仿真中旋翼转速的控制。
计算旋翼拉力/阻力和力矩由gz插件模块实现。在iris_with_ardupilot/model.sdf模型中调用gz插件。
<plugin filename="gz-sim-lift-drag-system"
name="gz::sim::systems::LiftDrag">
<a0>0.3</a0>
<alpha_stall>1.4</alpha_stall>
<cla>4.2500</cla>
<cda>0.10</cda>
<cma>0.0</cma>
<cla_stall>-0.025</cla_stall>
<cda_stall>0.0</cda_stall>
<cma_stall>0.0</cma_stall>
<area>0.002</area>
<air_density>1.2041</air_density>
<cp>0.084 0 0</cp>
<forward>0 1 0</forward>
<upward>0 0 1</upward>
<link_name>iris_with_standoffs::rotor_0</link_name>
</plugin>
该插件位于lift_drag github源码仓库,通过读取旋翼关节的转速,计算旋翼拉力/阻力和力矩,作用在link上。
若需要修改模块,可在前述做下载的源码上进行修改,编译之后就可以正常使用,若希望新增模块,可在gz-sim/src/systems文件夹下参考其他文件夹,新增对应的plugin文件夹。需要注意的是,在同级目录的CMakeLists.txt文件中需要新增add_subdirectory(XXX)。
注意
值得一提的是,前述下载源码不仅仅包括一些plugin插件模块,还有gz-math/gz-sensors等所有gz中使用的模块,如gz-math中包含的pid模块就用来实现上面电机转速的控制,gz-sensors中包含的AirPressureSensor模块用来模拟气压传感器。总而言之,这里下载的源码实际上是整个gazebo仿真器,内容十分丰富。
示例
四旋翼仿真
#第1终端
./waf configure --board sitl
./waf copter
. $HOME/vcs_colcon_installation/bin/activate
gz sim -v4 -r iris_runway.sdf
#第2终端
sim_vehicle.py -v ArduCopter -f gazebo-iris --model JSON --map --console
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)