校内案内ロボットG25用のROS 2ワークスペースです。CAN通信、BLE入力、ジョイスティック変換などを含みます。
- CANフレームの送受信(SocketCAN ↔ ROS 2)
- BLE入力をTwistに変換して
/cmd_velへ配信 - ジョイスティック入力をTwistに変換
- 速度・位置・加速度の軌道可視化
- systemdサービスによるCAN/GPIO初期化
- ble_server - BLEサーバー(Node.js)
- src/can_interface - CANインターフェースノード
- src/can_msgs - CANメッセージ定義
- src/ble_controller - BLE → Twist 変換ノード
- src/debug_tools/joy_controller - Joy → Twist
- src/debug_tools/jerk_trajectory_controller - 軌道可視化
- systemd - systemdサービス
- ROS 2 Humble
- Node 24.11.1 (BLEサーバー用)
- CAN対応デバイス(Raspberry Pi内蔵CAN、CANable2など)
colcon build --symlink-installrosdep update
rosdep install --from-paths src --ignore-src -r -y cd ble_server
npm install
cd ..また、ble_server実行のため、以下のコマンドを実行してください
sudo setcap cap_net_raw+eip $(eval readlink -f `which node`)- サービスをインストール:
./install_services.sh- サービス起動(自動起動設定済み):
sudo systemctl start can-setup.service- ログ確認
sudo systemctl status can-setup.service
sudo journalctl -u can-setup.service -fCANable2などのデバイスを使用する場合、適宜CANインターフェースを設定してください。
sudo ip link set can0 type can bitrate 1000000
sudo ip link set can0 up参考: CANable 2.0で高速can通信 with ROS 2
source install/setup.bashros2 run can_interface can_interface_nodeCANフレーム送信:
ros2 topic pub /can_tx can_msgs/msg/Frame "{id: 100, is_extended: false, is_remote: false, length: 2, data: [255, 255, 0, 0, 0, 0, 0, 0]}" -1CANフレーム受信確認:
ros2 topic echo /can_rx- BLEサーバー起動:
node ble_server/ble_server.js- ROS 2ノード起動:
ros2 run ble_controller ble_controller_noderos2 run joy_controller joy_to_twistros2 run jerk_trajectory_controller visualize_trajectory.py/can_rx- 受信CANフレーム(Publisher)/can_tx- 送信CANフレーム(Subscriber)/cmd_vel- 速度指令(Publisher)joy- ジョイスティック入力(Subscriber)
interface(can_interface): CANインターフェース名(デフォルト: "can0")max_linear_speed(joy_controller): 直進最大速度max_angular_speed(joy_controller): 旋回最大速度
- CAN/GPIO操作にはroot権限が必要です。
- BLEサーバー実行にはNode.jsが必要です。