Подглава 12.9.2 launch-файл dynamixel_controllers

Файл dynamixels.launch в каталоге rbx1_dynamixels/launch показывает, как запустить сервоконтроллеры, когда у нас есть контроллер USB2Dynamixel на устройстве /dev/ttyUSB0 и два сервопривода Dynamixel на шине с аппаратными идентификаторами 1 и 2. Давайте взглянем на него сейчас:

<launch>
    <param name="/use_sim_time" value="false" />
    
    <!-- Load the URDF/Xacro model of our robot -->
        <param name="robot_description" command="$(find xacro)/xacro.py '$(find 
rbx1_description)/urdf/turtlebot_with_head.xacro'" />
    <!-- Publish the robot state -->
        <node name="robot_state_publisher" pkg="robot_state_publisher" 
type="state_publisher">
        <param name="publish_frequency" value="20.0" />
    </node>
    
    <!-- Start the Dynamixel low-level driver manager with parameters -->
    <node name="dynamixel_manager" pkg="dynamixel_controllers" 
         type="controller_manager.py" required="true" output="screen">
        <rosparam>
            namespace: turtlebot_dynamixel_manager
             serial_ports:
                 dynamixel_ax12:
                     port_name: "/dev/ttyUSB0"
                     baud_rate: 1000000
                     min_motor_id: 1
                     max_motor_id: 2
                     update_rate: 20
         </rosparam>
    </node>
    
    <!-- Load the joint controller configuration from a YAML file -->
    <rosparam file="$(find rbx1_dynamixels)/config/dynamixel_params.yaml" 
command="load" />

    <!-- Start the head pan and tilt controllers -->
    <node name="dynamixel_controller_spawner_ax12" pkg="dynamixel_controllers" 
    type="controller_spawner.py" 
        args="--manager=turtlebot_dynamixel_manager  
              --port=dynamixel_ax12  
              --type=simple  
        head_pan_joint  
        head_tilt_joint" 
        output="screen" />
    <!-- Start the Dynamixel Joint States Publisher -->
    
    <node name="dynamixel_joint_states_publisher" pkg="rbx1_dynamixels" 
type="dynamixel_joint_state_publisher.py" output="screen" />
    <!-- Start all Dynamixels in the relaxed state -->
    <node pkg="rbx1_dynamixels" type="relax_all_servos.py" 
name="relax_all_servos" />
</launch>

Если ваш контроллер USB2Dynamixel находится на устройстве, отличном от /dev/ttyUSB0, и / или ваши идентификаторы сервоприводов отличаются от 1 и 2, отредактируйте этот файл сейчас, прежде чем идти дальше.

launch-файл сначала загружает модель URDF для робота и запускает узел robot_state_publisher для публикации состояния робота в tf. Затем мы запускаем узел controller_manager.py, загружаем файл dynamixels_param.yaml, который мы рассматривали ранее, затем порождает пару совместных контроллеров, по одному для каждого сервопривода.

Следующий запущенный узел называется dynamixel_joint_state_publisher.py и находится в каталоге rbx1_dynamixels/nodes. Он не является частью пакета dynamixel_controllers, но нам необходимо исправить одно несоответствие в том, как пакет публикует совместные состояния. Вместо использования стандартного типа сообщения ROS JointState, который мы ввели ранее, пакет dynamixel_controllers использует пользовательский тип сообщения для публикации состояний шарниров, включая некоторую дополнительную полезную информацию, такую как температура сервопривода. Если вы посмотрите на код узла dynamixel_joint_state_publisher.py, вы увидите, что он просто переиздает пользовательскую информацию о совместном состоянии как стандартное сообщение JointState в теме /joint_states.

Наконец, в launch-файлe запускается узел relax_all_servos.py, находящийся в каталоге rbx1_dynamixels/nodes, который ослабляет крутящий момент на каждом сервоприводе и устанавливает разумный предел скорости и крутящего момента по умолчанию. (Подробнее об этом ниже.)

Last updated