我们一般使用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

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐