修改readme格式

This commit is contained in:
shen 2026-03-31 15:32:53 +08:00
parent a18d218e53
commit b907c18023

116
README.md
View File

@ -1,112 +1,176 @@
# 设置代理 # 设置代理
``` shell
export PROXY="http://192.168.31.39:7890" export PROXY="http://192.168.31.39:7890"
export http_proxy="$PROXY" export http_proxy="$PROXY"
export https_proxy="$PROXY" export https_proxy="$PROXY"
export ftp_proxy="$PROXY" export ftp_proxy="$PROXY"
export socks_proxy="$PROXY" export socks_proxy="$PROXY"
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
```
# 设置虚拟can接口 # 设置虚拟can接口
``` shell
sudo ip link add dev can1 type vcan sudo ip link add dev can1 type vcan
sudo ip link set up can1 sudo ip link set up can1
sudo ip link set can1 type vcan bitrate 1000000 sudo ip link set can1 type vcan bitrate 1000000
```
# 设置can波特率 # 设置can波特率
``` shell
ip link set can1 type can bitrate 1000000 ip link set can1 type can bitrate 1000000
```
# 启动can # 启动can
``` shell
ip link set can0 up ip link set can0 up
```
# 设置slcan # 设置slcan
``` shell
sudo slcand -o -c -s8 -S1000000 /dev/ttyACM0 can0 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 sudo slcand -o -c -s8 -S1000000 /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0 can1
```
# 查看can信息 # 查看can信息
``` shell
ip -details -statistics link show can1 ip -details -statistics link show can1
################### ```
# 绑定接口名 # 绑定接口名
``` shell
sudo vim /etc/udev/rules.d/72-gs-usb-can.rules 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}=="004F004F3630501120353355", NAME="can6"
SUBSYSTEM=="net", ACTION=="add", ATTRS{serial}=="004C004F4D4D501020383834", NAME="can7" SUBSYSTEM=="net", ACTION=="add", ATTRS{serial}=="004C004F4D4D501020383834", NAME="can7"
SUBSYSTEM=="net", ACTION=="add", ATTRS{serial}=="0061005A3945501620303651", NAME="can4" SUBSYSTEM=="net", ACTION=="add", ATTRS{serial}=="0061005A3945501620303651", NAME="can4"
SUBSYSTEM=="net", ACTION=="add", ATTRS{serial}=="006500573945501620303651", NAME="can5" SUBSYSTEM=="net", ACTION=="add", ATTRS{serial}=="006500573945501620303651", NAME="can5"
sudo udevadm control --reload-rules sudo udevadm control --reload-rules
sudo udevadm trigger sudo udevadm trigger
####################### ```
# 安装ros依赖 # 安装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 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.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 /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}}]}}' 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 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 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 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 # 启动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
ros2 launch openarm_bimanual_moveit_config demo.launch.py use_fake_hardware:=false robot_controller:=forward_velocity_controller 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 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}" 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}" 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 "{}" ros2 service call /joint_trajectory_recorder/play std_srvs/srv/Trigger "{}"
```
# 保存轨迹 ## 保存轨迹
``` shell
ros2 service call /joint_trajectory_recorder/save std_srvs/srv/Trigger "{}" ros2 service call /joint_trajectory_recorder/save std_srvs/srv/Trigger "{}"
```
# 加载轨迹 ## 加载轨迹
``` shell
ros2 service call /joint_trajectory_recorder/load std_srvs/srv/Trigger "{}" ros2 service call /joint_trajectory_recorder/load std_srvs/srv/Trigger "{}"
```
# 标定 # 摄像头标定
ros2 run camera_calibration cameracalibrator --size 9x6 --square 0.255 \ ``` shell
left:=/camera/left/image_raw right:=/camera/right/image_raw \ 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
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
# huggingface token # huggingface token
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 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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 # 设置can
``` shell
lerobot-setup-can --mode=setup --interfaces=can0,can2 --use_fd=false lerobot-setup-can --mode=setup --interfaces=can0,can2 --use_fd=false
lerobot-setup-can --mode=test --interfaces=can0,can2 --use_fd=false lerobot-setup-can --mode=test --interfaces=can0,can2 --use_fd=false
```
# 测试相机 # 测试相机
``` shell
lerobot-find-cameras opencv lerobot-find-cameras opencv
```
# 启动单臂 # 启动单臂
``` shell
lerobot-teleoperate \ lerobot-teleoperate \
--robot.type=openarm_follower \ --robot.type=openarm_follower \
--robot.port=can0 \ --robot.port=can0 \
@ -117,8 +181,10 @@ lerobot-teleoperate \
--teleop.port=can2 \ --teleop.port=can2 \
--teleop.id=my_leader --teleop.use_can_fd=false \ --teleop.id=my_leader --teleop.use_can_fd=false \
--display_data=true --display_data=true
```
# 录制单臂 # 录制单臂
``` shell
lerobot-record \ lerobot-record \
--robot.type=openarm_follower \ --robot.type=openarm_follower \
--robot.port=can2 \ --robot.port=can2 \
@ -135,14 +201,13 @@ lerobot-record \
--dataset.push_to_hub=false \ --dataset.push_to_hub=false \
--dataset.episode_time_s=10 \ --dataset.episode_time_s=10 \
--dataset.reset_time_s=2 --dataset.reset_time_s=2
```
# 上传数据集
hf upload shenchenayng/lerobot_openarm_test . --repo-type=dataset
# wandb token # wandb token
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 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
# 训练 # 训练
``` shell
lerobot-train \ lerobot-train \
--dataset.repo_id=shenchenayng/lerobot_openarm_test \ --dataset.repo_id=shenchenayng/lerobot_openarm_test \
--dataset.root=/home/shen/.cache/huggingface/lerobot/shenchenayng/lerobot_openarm_test \ --dataset.root=/home/shen/.cache/huggingface/lerobot/shenchenayng/lerobot_openarm_test \
@ -160,8 +225,10 @@ lerobot-train \
--save_freq=100 --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 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 \ lerobot-record \
--robot.type=openarm_follower \ --robot.type=openarm_follower \
--robot.port=can0 \ --robot.port=can0 \
@ -175,3 +242,4 @@ lerobot-record \
--dataset.episode_time_s=1000 \ --dataset.episode_time_s=1000 \
--dataset.push_to_hub=false \ --dataset.push_to_hub=false \
--policy.path=/home/shen/lerobot_openarm_modle/202603260100_model/202603260100/pretrained_model --policy.path=/home/shen/lerobot_openarm_modle/202603260100_model/202603260100/pretrained_model
```