https://github.com/fiveages-sim/juxie-ros2-control
https://github.com/fiveages-sim/juxie-ros2-control
Last synced: 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/fiveages-sim/juxie-ros2-control
- Owner: fiveages-sim
- Created: 2025-11-27T10:36:20.000Z (6 months ago)
- Default Branch: main
- Last Pushed: 2026-01-28T08:27:09.000Z (4 months ago)
- Last Synced: 2026-01-28T23:53:57.239Z (4 months ago)
- Language: C++
- Size: 23.4 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Juxie ROS2 Control
ROS2 Control 硬件接口,用于通过 CAN FD 通信控制 JX 电机(循环同步位置模式)。
## 功能特性
- 支持 CAN FD 通信(1Mbps 仲裁段,5Mbps 数据段)
- 支持最多 8 个电机同时控制
- 循环同步位置(CSP)控制模式
- 提供位置、速度状态反馈
- 支持位置命令控制
## 硬件接口
### 命令接口(Command Interfaces)
- `position`: 关节位置命令(弧度)
### 状态接口(State Interfaces)
- `position`: 关节实际位置(弧度)
- `velocity`: 关节实际速度(弧度/秒)
## 编译
```bash
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
juxie_ros2_control/JxHardware
can0
1,2,3
1
0.0
0.0
0.0
```
### 2. 配置 CAN 接口
#### 配置步骤
1. **编辑 sudoers 文件**
```bash
sudo visudo
```
2. **添加以下行**(将 `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`):
```bash
# 启动机器人描述
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. 发送位置命令
```bash
# 使用命令行发送位置命令
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 规则