Package: triorb_relative_alignment

  • マーカーを基準とした相対位置決め移動の実行

Requirement definition

{
    acc : (加速時間 time [ms]), # 任意。設定が無ければプリセットを使う
    vel_xy_max : (ロボットの最大並進速度 [m/s]), # 任意。設定が無ければプリセットを使う
    vel_w_max : (ロボットの最大回転速度 [rad/s]), # 任意。設定が無ければプリセットを使う
    tags_pose : [
        {
            id : (tag id), # Tag1のID
            pose_goal2tag : [(x),(y),(yaw)] # Goal座標系におけるタグ1の位置・姿勢
        },
        {
            id : (tag id), # Tag2のID
            pose_goal2tag : [(x),(y),(yaw)] # Goal座標系におけるタグ2の位置・姿勢
        },
        {
            id : (tag id), # Tag3のID
            pose_goal2tag : [(x),(y),(yaw)] # Goal座標系におけるタグ3の位置・姿勢
        }
    ]
},

Service

現在見えているタグの相対姿勢情報(robot2tags)を取得

  • Service: (prefix)/drive/alignment/srv/get_tags
  • Type: std_srvs/srv/Trigger
  • Note: “タグ相対姿勢推定のみ開始”状態である必要がある
  • Usage: ```bash root@orin-nx-toda-1go:/ws# ros2 topic pub -1 /drive/alignment/start/detect_only std_msgs/msg/String publisher: beginning loop publishing #1: std_msgs.msg.String(data=’’)

root@orin-nx-toda-1go:/ws# ros2 service call /drive/alignment/srv/get_tags std_srvs/srv/Trigger requester: making request: std_srvs.srv.Trigger_Request()

response: std_srvs.srv.Trigger_Response(success=True, message=’{“tags_pose”: [{“id”: “0”, “pose_goal2tag”: [0.42632964975188725, 0.0008492655958919461, -95.25343144714356]}, {“id”: “1”, “pose_goal2tag”: [0.461662644243898, 0.14932690205624627, -165.66381987317297]}, {“id”: “2”, “pose_goal2tag”: [0.44695366683212034, -0.13160227179054612, -24.916975273946008]}, {“id”: “3”, “pose_goal2tag”: [-0.44885464336120595, -0.12584908094456257, 26.910205716541668]}, {“id”: “4”, “pose_goal2tag”: [-0.4262322711278036, 0.005939190729071545, 95.860490833845]}, {“id”: “5”, “pose_goal2tag”: [-0.4640556788419471, 0.16179577223981575, 166.58180851763746]}]}’)



# Subscriber
## タグ相対姿勢推定のみ開始(ロボットは動かさない)
- Topic: (prefix)/drive/alignment/start/detect_only
- Type: std_msgs/msg/String
- Note:リクエスト文字列は一旦カラ
- Usage:
```bash
root@orin-nx-toda-1go:/ws# ros2 topic pub -1 /drive/alignment/start/detect_only std_msgs/msg/String

相対位置決め開始Request

  • Topic: (prefix)/drive/alignment/start
  • Type: std_msgs/msg/String
  • Note:リクエスト文字列はjson形式
  • Usage:

相対位置決め終了Request

  • Topic: (prefix)/drive/alignment/terminate
  • Type: std_msgs/msg/String
  • Note:リクエスト文字列は一旦カラの予定

Subscriber

Tag検出の結果を受け取る

  • Topic:(prefix)/relative_align_marker/transform
  • Type:geometry_msgs/msg/TransformStamped
  • Definition:カメラから見たマーカーの位置姿勢(右手系)
  • Usage:

Publisher

Tag検出を開始する

  • Topic:(prefix)/relative_align_marker/start
  • Type:std_msgs/msg/Bool

Tag検出を終了する

  • Topic:(prefix)/relative_align_marker/stop
  • Type:std_msgs/msg/Bool

Robotに速度指示を送る

  • Topic:(prefix)/drive/run_vel
  • Type:TriorbRunVel3

パラメーター

  • ROBOT_VEL_MAX_TRANS : ロボットの最大並進速度 [m/s]
  • ROBOT_VEL_MAX_ROT : ロボットの最大回転速度 [rad/s]
  • PID_GAIN_TRANS_P : 並進用のP Gain
  • PID_GAIN_TRANS_I : 並進用のI Gain
  • PID_GAIN_TRANS_D : 並進用のD Gain
  • PID_GAIN_ROT_P : 回転用のP Gain
  • PID_GAIN_ROT_I : 回転用のI Gain
  • PID_GAIN_ROT_D : 回転用のD Gain
  • FAIL_SAFE_TIME : 移動指示をキャンセルする時間 [sec]
  • ACC_TIME_MS:加減速時間 [ms]
  • ONGOAL_ERROR_XY : 並進方向の許容誤差 [m]
  • ONGOAL_ERROR_YAW : 回転方向の許容誤差 [deg]
  • ONGOAL_VELOCITY_XY : 並進方向のゴール判定速度 [m/s]
  • ONGOAL_VELOCITY_YAW : 回転方向のゴール判定速度 [rad/s]

MEMO

カメラデバイスの名前解決(docker起動前)

if [ ! -e /dev/video-usb0 ]; then
    sudo -E python /triorb/install/scripts/fix_video_device.py
fi

dockerの起動

docker run -it --rm --name dev_local --privileged --net=host --ipc=host --pid=host --runtime=nvidia --gpus all \
            --add-host=localhost:127.0.1.1 \
            -e ROS_LOCALHOST_ONLY=1 \
            -e ROS_DOMAIN_ID=$(cat /triorb/params/ROS_DOMAIN_ID) \
            -e ROS_PREFIX=$(cat /triorb/params/ROS_PREFIX) \
            -v /triorb:/triorb \
            -v /dev:/dev \
            -v /sys/devices/:/sys/devices/ \
            -v /triorb/log:/log \
            -v /triorb/build:/build \
            -v /triorb/install:/install \
            -v /triorb/params:/params \
            -v /triorb/data:/data \
            -v /triorb/tslam:/tslam \
            -v /triorb/.jupyter:/root/.jupyter \
            -v /etc/NetworkManager/system-connections:/etc/NetworkManager/system-connections \
            -v /var/run/dbus:/var/run/dbus \
            -v $(pwd):/ws \
            -w /ws \
            $(cat /triorb/params/DOCKER_IMAGE_ROS) /bin/bash -c '\
                    source /ros_entrypoint.sh &&\
                    source /install/humble/setup.bash &&\
                    python3 -m pip install pupil_apriltags &&
                    /bin/bash'

モーター制御Node、カメラキャプチャNode、タグ検出Node、の起動(docker内)

source /install/humble/setup.bash
tmux new-session -s camera -d "ros2 run triorb_camera_capture camera_capture --ros-args --param dev:=/dev/video-csi0,/dev/video-usb0,/dev/video-usb1,/dev/video-usb2 --param pub:=/camera0,/camera3,/camera4,/camera2 --param rot:=0,0,0,180"
tmux new-session -s stream_camera -d "ros2 run triorb_streaming_images streaming_image_node --port 3332 --ip "0.0.0.0" --ros-args --param topic_name_raw:=/camera0 --param sub_path:=/camera --param scale:=0.5 --param fps:=1.0"
tmux new-session -s drive -d "ros2 run triorb_drive_pico drive"

tmux new-session -s marker -d "colcon build --packages-select triorb_relative_align_marker && source ./install/setup.bash && ros2 run triorb_relative_align_marker relative_align_marker"

本Nodeの起動

tmux new-session -s align -d "colcon build --packages-select triorb_relative_alignment && source ./install/setup.bash && ros2 run triorb_relative_alignment relative_alignment"