Подглава 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
Was this helpful?