跳到正文

Wiki

从零创建学习工作区

约 2 分钟阅读

从这里开始,由你创建自己的工作区。先用 GenericSystem 跑通配置链路,再换成自编硬件插件。

1.示例 1:创建目录与功能包

source /opt/ros/jazzy/setup.bash
mkdir -p ~/ros2_control_jazzy_ws/src
cd ~/ros2_control_jazzy_ws/src
ros2 pkg create jazzy_control_hardware --build-type ament_cmake
cd jazzy_control_hardware
mkdir -p urdf config launch src include/jazzy_control_hardware

所有文件都由你跟随文章建立。后面的相对路径以 jazzy_control_hardware 包目录为起点。

jazzy_control_hardware/
├── CMakeLists.txt
├── package.xml
├── urdf/two_joint.urdf
├── config/
├── launch/
├── src/
└── include/jazzy_control_hardware/

1.1.完整 package.xml

<?xml version="1.0"?>
<package format="3">
  <name>jazzy_control_hardware</name><version>0.1.0</version>
  <description>Jazzy two joint learning hardware and models</description>
  <maintainer email="learner@example.com">Learner</maintainer><license>Apache-2.0</license>
  <buildtool_depend>ament_cmake</buildtool_depend>
  <depend>hardware_interface</depend><depend>pluginlib</depend>
  <depend>rclcpp</depend><depend>rclcpp_lifecycle</depend>
  <exec_depend>controller_manager</exec_depend>
  <exec_depend>joint_state_broadcaster</exec_depend>
  <exec_depend>forward_command_controller</exec_depend>
  <exec_depend>joint_trajectory_controller</exec_depend>
  <exec_depend>robot_state_publisher</exec_depend><exec_depend>xacro</exec_depend>
  <exec_depend>launch_ros</exec_depend>
  <export><build_type>ament_cmake</build_type></export>
</package>

maintainer 是示例身份,请换成自己的信息。本文件列出了基础阶段所需依赖。

1.2.当前阶段的完整 CMakeLists.txt

cmake_minimum_required(VERSION 3.22)
project(jazzy_control_hardware)
find_package(ament_cmake REQUIRED)
install(DIRECTORY urdf config launch DESTINATION share/${PROJECT_NAME})
ament_package()

现在只安装资源文件,还没有构建 C++ 库。install 让 launch 可以通过包的 share 路径找到模型。

2.示例 2:编写完整机器人描述

保存为 urdf/two_joint.urdf:

<?xml version="1.0"?>
<robot name="mini">

  <link name="world"/>
  <link name="base_link">
    <inertial><mass value="1"/><inertia ixx="0.005" ixy="0" ixz="0" iyy="0.005" iyz="0" izz="0.007"/></inertial>
    <visual><geometry><box size="0.2 0.2 0.1"/></geometry></visual>
  </link>
  <joint name="world_fixed" type="fixed"><parent link="world"/><child link="base_link"/></joint>

  <link name="link1">
    <inertial><origin xyz="0 0 0.2"/><mass value="1"/>
      <inertia ixx="0.0135" ixy="0" ixz="0" iyy="0.0135" iyz="0" izz="0.00042"/>
    </inertial>
    <visual><origin xyz="0 0 0.2"/><geometry><box size="0.05 0.05 0.4"/></geometry></visual>
    <collision><origin xyz="0 0 0.2"/><geometry><box size="0.05 0.05 0.4"/></geometry></collision>
  </link>
  <joint name="joint1" type="revolute">
    <parent link="base_link"/><child link="link1"/>
    <origin xyz="0 0 0.05"/><axis xyz="0 1 0"/>
    <limit lower="-1" upper="1" effort="20" velocity="2"/>
  </joint>

  <link name="link2">
    <inertial><origin xyz="0 0 0.2"/><mass value="1"/>
      <inertia ixx="0.0135" ixy="0" ixz="0" iyy="0.0135" iyz="0" izz="0.00042"/>
    </inertial>
    <visual><origin xyz="0 0 0.2"/><geometry><box size="0.05 0.05 0.4"/></geometry></visual>
    <collision><origin xyz="0 0 0.2"/><geometry><box size="0.05 0.05 0.4"/></geometry></collision>
  </link>
  <joint name="joint2" type="revolute">
    <parent link="link1"/><child link="link2"/>
    <origin xyz="0 0 0.4"/><axis xyz="0 1 0"/>
    <limit lower="-1" upper="1" effort="20" velocity="2"/>
  </joint>

  <ros2_control name="MiniSystem" type="system">
    <hardware><plugin>mock_components/GenericSystem</plugin></hardware>
    <joint name="joint1">
      <command_interface name="position"/>
      <state_interface name="position"><param name="initial_value">0.0</param></state_interface>
      <state_interface name="velocity"/>
    </joint>
    <joint name="joint2">
      <command_interface name="position"/>
      <state_interface name="position"><param name="initial_value">0.0</param></state_interface>
      <state_interface name="velocity"/>
    </joint>
  </ros2_control>
</robot>

两个关节分别连接 base_link、link1、link2;world_fixed 固定基座。模型中的惯量与碰撞用于后续仿真准备,GenericSystem 不根据它们计算动力学。

3.构建并检查

cd ~/ros2_control_jazzy_ws
colcon build --symlink-install --packages-select jazzy_control_hardware
source install/setup.bash
ros2 pkg prefix jazzy_control_hardware
xacro src/jazzy_control_hardware/urdf/two_joint.urdf > /tmp/two_joint.urdf

此阶段验收包和模型是否能找到、解析,不要求机器人已经运动。YAML与spawner启动过程会补齐启动所需文件。


返回 Jazzy 总览 · 上一篇:运行第一个RRBot实例 · 下一篇:URDF与控制接口