Skip to content

fiveages-sim/juxie-ros2-control

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Juxie ROS2 Control

ROS2 Control 硬件接口,用于通过 CAN FD 通信控制 JX 电机(循环同步位置模式)。

功能特性

  • 支持 CAN FD 通信(1Mbps 仲裁段,5Mbps 数据段)
  • 支持最多 8 个电机同时控制
  • 循环同步位置(CSP)控制模式
  • 提供位置、速度状态反馈
  • 支持位置命令控制

硬件接口

命令接口(Command Interfaces)

  • position: 关节位置命令(弧度)

状态接口(State Interfaces)

  • position: 关节实际位置(弧度)
  • velocity: 关节实际速度(弧度/秒)

编译

cd ~/ros2_ws
colcon build --packages-up-to juxie_ros2_control --symlink-install
source install/setup.bash

配置参数

在 ROS2 Control 配置中需要设置以下硬件参数:

  • can_interface (string, 默认: "can0"): CAN 接口名称
  • motor_ids (string, 必需): 电机 ID 列表,格式为 "1,2,3""[1,2,3]"
  • control_period_ms (int, 默认: 1): 控制周期(毫秒),默认 1ms = 1000Hz

使用示例

1. 在 URDF/Xacro 中配置硬件接口

在您的机器人描述文件中添加 ROS2 Control 配置:

<?xml version="1.0"?>
<robot name="my_robot" xmlns:xacro="http://www.ros.org/wiki/xacro">

  <!-- 定义关节接口 -->
  <ros2_control name="juxie_system" type="system">
    <hardware>
      <plugin>juxie_ros2_control/JxHardware</plugin>
      <!-- CAN 接口配置 -->
      <param name="can_interface">can0</param>
      <!-- 电机 ID 列表(最多 8 个) -->
      <param name="motor_ids">1,2,3</param>
      <!-- 控制周期(毫秒) -->
      <param name="control_period_ms">1</param>
    </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>

    <joint name="joint3">
      <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>

2. 配置 CAN 接口

配置步骤

  1. 编辑 sudoers 文件
sudo visudo
  1. 添加以下行(将 your_username 替换为你的实际用户名,将 can0 为默认配置的设备名称)
your_username ALL=(ALL) NOPASSWD: /sbin/ip link set can0 down, /sbin/ip link set can0 up type can bitrate * dbitrate * fd on

示例(如果用户名为 fa,设备名称为 can0):

fa ALL=(ALL) NOPASSWD: /sbin/ip link set can0 down, /sbin/ip link set can0 up type can bitrate * dbitrate * fd on

3. 启动控制器

使用标准的 ROS2 Control 控制器(如 joint_trajectory_controller):

# 启动机器人描述
ros2 launch your_robot_description display.launch.py

# 启动控制器管理器
ros2 control load_controller joint_state_broadcaster
ros2 control load_controller joint_trajectory_controller

# 激活控制器
ros2 control set_controller_state joint_state_broadcaster active
ros2 control set_controller_state joint_trajectory_controller active

4. 发送位置命令

# 使用命令行发送位置命令
ros2 topic pub /joint_trajectory_controller/joint_trajectory \
  trajectory_msgs/msg/JointTrajectory \
  "{joint_names: ['joint1', 'joint2', 'joint3'], \
    points: [{positions: [0.5, -0.5, 1.0], time_from_start: {sec: 2, nanosec: 0}}]}"

注意事项

  1. 电机 ID 顺序: motor_ids 参数中的 ID 顺序必须与 URDF 中定义的关节顺序一致
  2. 角度范围: 电机角度范围为 -180° 到 +180°(-π 到 +π 弧度)
  3. 权限要求: CAN 接口配置需要 root 权限,确保运行节点时具有相应权限
  4. CAN FD 支持: 确保您的 CAN 适配器支持 CAN FD 模式
  5. 控制周期: 默认 1ms 控制周期,可根据实际需求调整

故障排除

  • CAN 接口初始化失败: 检查 CAN 接口名称是否正确,接口是否已连接
  • 电机无响应: 检查电机 ID 配置是否正确,CAN 总线连接是否正常
  • 权限错误: 确保具有配置 CAN 接口的权限,可能需要使用 sudo 或配置 udev 规则

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •