From b907c18023a7a65d0a2e9a583131cd3240d41f7e Mon Sep 17 00:00:00 2001 From: shen <664376944@qq.com> Date: Tue, 31 Mar 2026 15:32:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9readme=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 116 +++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 92 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index ad10b32..aea4bae 100644 --- a/README.md +++ b/README.md @@ -1,112 +1,176 @@ # 设置代理 +``` shell export PROXY="http://192.168.31.39:7890" + export http_proxy="$PROXY" + export https_proxy="$PROXY" + export ftp_proxy="$PROXY" + export socks_proxy="$PROXY" PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +``` # 设置虚拟can接口 +``` shell sudo ip link add dev can1 type vcan + sudo ip link set up can1 + sudo ip link set can1 type vcan bitrate 1000000 +``` # 设置can波特率 +``` shell ip link set can1 type can bitrate 1000000 +``` # 启动can +``` shell ip link set can0 up +``` # 设置slcan +``` shell sudo slcand -o -c -s8 -S1000000 /dev/ttyACM0 can0 + sudo slcand -o -c -s8 -S1000000 /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 can1 +``` # 查看can信息 +``` shell ip -details -statistics link show can1 -################### +``` # 绑定接口名 +``` shell sudo vim /etc/udev/rules.d/72-gs-usb-can.rules SUBSYSTEM=="net", ACTION=="add", ATTRS{serial}=="004F004F3630501120353355", NAME="can6" + SUBSYSTEM=="net", ACTION=="add", ATTRS{serial}=="004C004F4D4D501020383834", NAME="can7" + SUBSYSTEM=="net", ACTION=="add", ATTRS{serial}=="0061005A3945501620303651", NAME="can4" + SUBSYSTEM=="net", ACTION=="add", ATTRS{serial}=="006500573945501620303651", NAME="can5" sudo udevadm control --reload-rules + sudo udevadm trigger -####################### +``` # 安装ros依赖 -rosdepc install --from-paths src --ignore-src --rosdistro=humble -y +``` shell +rosdepc install --from-paths src --ignore-src --rosdistro=humble -y +``` # 启动单臂 +``` shell ros2 launch openarm_bringup openarm.launch.py arm_type:=v10 use_fake_hardware:=false can_interface:=can6 +``` # 设置单臂运动 +``` shell ros2 action send_goal /joint_trajectory_controller/follow_joint_trajectory control_msgs/action/FollowJointTrajectory '{trajectory: {joint_names: ["openarm_joint1", "openarm_joint2", "openarm_joint3", "openarm_joint4", "openarm_joint5", "openarm_joint6", "openarm_joint7"], points: [{positions: [0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15], time_from_start: {sec: 1, nanosec: 0}}]}}' ros2 action send_goal /joint_trajectory_controller/follow_joint_trajectory control_msgs/action/FollowJointTrajectory '{trajectory: {joint_names: ["openarm_joint1", "openarm_joint2", "openarm_joint3", "openarm_joint4", "openarm_joint5", "openarm_joint6", "openarm_joint7"], points: [{positions: [0, 0, 0, 0, 0, 0, 0], time_from_start: {sec: 1, nanosec: 0}}]}}' +``` # 设置右臂运动 -ros2 action send_goal /right_joint_trajectory_controller/follow_joint_trajectory control_msgs/action/FollowJointTrajectory '{trajectory: {joint_names: ["openarm_right_joint1", "openarm_right_joint2", "openarm_right_joint3", "openarm_right_joint4", "openarm_right_joint5", "openarm_right_joint6", "openarm_right_joint7"], points: [{positions: [0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15], time_from_start: {sec: 1, nanosec: 0}}]}}' +``` shell +ros2 action send_goal /right_joint_trajectory_controller +follow_joint_trajectory control_msgs/action/FollowJointTrajectory '{trajectory: {joint_names: ["openarm_right_joint1", "openarm_right_joint2", "openarm_right_joint3", "openarm_right_joint4", "openarm_right_joint5", "openarm_right_joint6", "openarm_right_joint7"], points: [{positions: [0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15], time_from_start: {sec: 1, nanosec: 0}}]}}' ros2 action send_goal /right_joint_trajectory_controller/follow_joint_trajectory control_msgs/action/FollowJointTrajectory '{trajectory: {joint_names: ["openarm_right_joint1", "openarm_right_joint2", "openarm_right_joint3", "openarm_right_joint4", "openarm_right_joint5", "openarm_right_joint6", "openarm_right_joint7"], points: [{positions: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0], time_from_start: {sec: 1, nanosec: 0}}]}}' +``` # 启动双臂 +``` shell ros2 launch openarm_bringup openarm.bimanual.launch.py arm_type:=v10 use_fake_hardware:=false gravity_compensation_enabled:=false gravity_compensation_use_kdl:=false gravity_torque_mode:=false enable_joint_state_udp_broadcast:=true joint_state_udp_payload_format:=json +``` # 启动双臂位置控制器 +``` shell ros2 launch openarm_bringup openarm.bimanual.launch.py arm_type:=v10 use_fake_hardware:=false gravity_compensation_enabled:=false gravity_compensation_use_kdl:=false gravity_torque_mode:=false robot_controller:=forward_position_controller enable_joint_state_udp_broadcast:=true joint_state_udp_payload_format:=json +``` # 启动双臂重力补偿 +``` shell ros2 launch openarm_bringup openarm.bimanual.launch.py arm_type:=v10 use_fake_hardware:=false gravity_compensation_enabled:=true gravity_compensation_use_kdl:=true gravity_torque_mode:=true gripper_gravity_compensation_enabled:=true enable_joint_state_udp_broadcast:=true joint_state_udp_payload_format:=json +``` # 启动moveit +``` shell ros2 launch openarm_bimanual_moveit_config demo.launch.py use_fake_hardware:=false + ros2 launch openarm_bimanual_moveit_config demo.launch.py use_fake_hardware:=false robot_controller:=forward_velocity_controller - +``` # 启动动作录制 -# 启动节点 +## 启动节点 +``` shell ros2 launch openarm_joint_recorder joint_trajectory_recorder.launch.py +``` -# 开始录制 +## 开始录制 +``` shell ros2 service call /joint_trajectory_recorder/set_recording std_srvs/srv/SetBool "{data: true}" +``` -# 停止录制 +## 停止录制 +``` shell ros2 service call /joint_trajectory_recorder/set_recording std_srvs/srv/SetBool "{data: false}" +``` -# 回放 +## 回放 +``` shell ros2 service call /joint_trajectory_recorder/play std_srvs/srv/Trigger "{}" +``` -# 保存轨迹 +## 保存轨迹 +``` shell ros2 service call /joint_trajectory_recorder/save std_srvs/srv/Trigger "{}" +``` -# 加载轨迹 +## 加载轨迹 +``` shell ros2 service call /joint_trajectory_recorder/load std_srvs/srv/Trigger "{}" +``` -# 标定 -ros2 run camera_calibration cameracalibrator --size 9x6 --square 0.255 \ - left:=/camera/left/image_raw right:=/camera/right/image_raw \ - left_camera:=camera_frame_left right_camera:=camera_frame_right - -# 下载数据集 -hf download --repo-type dataset --token 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 pixparse/cc3m-wds --local-dir /home/D/ --resume-download - -export HF_ENDPOINT=https://hf-mirror.com +# 摄像头标定 +``` shell +ros2 run camera_calibration cameracalibrator --size 9x6 --square 0.255 left:=/camera/left/image_raw right:=/camera/right/image_raw left_camera:=camera_frame_left right_camera:=camera_frame_right +``` # huggingface token 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 +# 下载数据集 +``` shell +export HF_ENDPOINT=https://hf-mirror.com + +hf download --repo-type dataset --token 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 pixparse/cc3m-wds --local-dir /home/D/ --resume-download +``` +# 上传数据集 +``` shell +hf upload shenchenayng/lerobot_openarm_test . --repo-type=dataset +``` + # 设置can +``` shell lerobot-setup-can --mode=setup --interfaces=can0,can2 --use_fd=false + lerobot-setup-can --mode=test --interfaces=can0,can2 --use_fd=false +``` # 测试相机 +``` shell lerobot-find-cameras opencv +``` # 启动单臂 +``` shell lerobot-teleoperate \ --robot.type=openarm_follower \ --robot.port=can0 \ @@ -117,8 +181,10 @@ lerobot-teleoperate \ --teleop.port=can2 \ --teleop.id=my_leader --teleop.use_can_fd=false \ --display_data=true +``` # 录制单臂 +``` shell lerobot-record \ --robot.type=openarm_follower \ --robot.port=can2 \ @@ -135,14 +201,13 @@ lerobot-record \ --dataset.push_to_hub=false \ --dataset.episode_time_s=10 \ --dataset.reset_time_s=2 - -# 上传数据集 -hf upload shenchenayng/lerobot_openarm_test . --repo-type=dataset +``` # wandb token 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 # 训练 +``` shell lerobot-train \ --dataset.repo_id=shenchenayng/lerobot_openarm_test \ --dataset.root=/home/shen/.cache/huggingface/lerobot/shenchenayng/lerobot_openarm_test \ @@ -160,8 +225,10 @@ lerobot-train \ --save_freq=100 lerobot-train --dataset.repo_id=shenchenayng/lerobot_openarm_test --dataset.root=/home/featurize/lerobot_openarm_test --dataset.revision=v0.1.0 --dataset.streaming=false --policy.type=act --output_dir=/home/featurize/lerobot_openarm_modle/a --job_name=lerobot_openarm_test --policy.device=cuda --wandb.enable=true --wandb.project=lerobot_openarm_test --policy.push_to_hub=false --steps=2000 --batch_size=8 --save_freq=100 +``` - +# 推理 +``` shell lerobot-record \ --robot.type=openarm_follower \ --robot.port=can0 \ @@ -175,3 +242,4 @@ lerobot-record \ --dataset.episode_time_s=1000 \ --dataset.push_to_hub=false \ --policy.path=/home/shen/lerobot_openarm_modle/202603260100_model/202603260100/pretrained_model + ```