움직이기
ssh -i ~/.ssh/id_ed25519 -Y quad@192.167.1.31
map --(rtabmap)--> odom --(rtabmap_odom)--> base_link --(static)--> base_link_frd --(static)--> camera_link --(static)--> camera_color_optical_frame
1.
ros2 launch mavros px4.launch fcu_url:=serial:///dev/serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UART_Bridge_Controller_0001-if00-port0:921600 fcu_protocol:=v2.0
2.
ros2 launch realsense2_camera rs_launch.py align_depth:=true enable_gyro:=true enable_accel:=true unite_imu_method:=2 enable_sync:=true publish_tf:=false
ros2 launch realsense2_camera rs_launch.py align_depth:=true enable_gyro:=true enable_accel:=true unite_imu_method:=linear_interpolation enable_sync:=true publish_tf:=false
3.
ros2 run tf2_ros static_transform_publisher \
0.10 -0.02 0.05 0 0 0 1 base_link camera_link
4.
ros2 run tf2_ros static_transform_publisher \
0 0 0 -0.5 0.5 -0.5 0.5 camera_link camera_color_optical_frame
3.
ros2 run tf2_ros static_transform_publisher 0 0 0 1 0 0 0 base_link base_link_frd
4.
ros2 run tf2_ros static_transform_publisher 0 0 0 0 0 0 1 base_link_frd camera_link
5.
ros2 run tf2_ros static_transform_publisher 0 0 0 -0.5 0.5 -0.5 0.5 camera_link camera_color_optical_frame
6. 위에꺼
ros2 run rtabmap_odom rgbd_odometry --ros-args -p frame_id:=base_link -p odom_frame_id:=odom -p publish_tf:=true -p wait_for_transform:=0.8 -p approx_sync:=true -p approx_sync_max_interval:=0.02 -p qos:=2 -p qos_camera_info:=2 -r rgb/image:=/camera/camera/color/image_raw -r depth/image:=/camera/camera/depth/image_rect_raw -r rgb/camera_info:=/camera/camera/color/camera_info -r depth/camera_info:=/camera/camera/depth/camera_info -r imu:=/mavros/imu/data
ros2 run rtabmap_odom rgbd_odometry --ros-args -p frame_id:=base_link -p odom_frame_id:=odom -p publish_tf:=true -p wait_for_transform:=0.8 -p approx_sync:=true -p approx_sync_max_interval:=0.02 -p qos:=2 -p qos_camera_info:=2 -r rgb/image:=/camera/camera/color/image_raw -r depth/image:=/camera/camera/depth/image_rect_raw -r rgb/camera_info:=/camera/camera/color/camera_info -r odom:=/rtabmap/odom -r imu:=/mavros/imu/data
7.위에꺼
ros2 run rtabmap_slam rtabmap --ros-args -p frame_id:=base_link -p odom_frame_id:=odom -p map_frame_id:=map -p publish_tf:=true -p tf_delay:=0.12 -p tf_tolerance:=0.5 -p wait_for_transform:=0.8 -p subscribe_depth:=true -p subscribe_rgb:=true -p approx_sync:=true -p approx_sync_max_interval:=0.12 -p qos_image:=2 -p qos_camera_info:=2 -r rgb/image:=/camera/camera/color/image_raw -r depth/image:=/camera/camera/depth/image_rect_raw -r rgb/camera_info:=/camera/camera/color/camera_info -r odom:=/rtabmap/odom -r imu:=/mavros/imu/data -r depth/camera_info:=/camera/camera/depth/camera_info -p subscribe_imu:=true
ros2 run rtabmap_slam rtabmap --ros-args -p frame_id:=base_link -p odom_frame_id:=odom -p map_frame_id:=map -p publish_tf:=true -p tf_delay:=0.12 -p tf_tolerance:=0.5 -p wait_for_transform:=0.8 -p subscribe_depth:=true -p subscribe_rgb:=true -p approx_sync:=true -p approx_sync_max_interval:=0.12 -p qos_image:=2 -p qos_camera_info:=2 -r rgb/image:=/camera/camera/color/image_raw -r depth/image:=/camera/camera/depth/image_rect_raw -r rgb/camera_info:=/camera/camera/color/camera_info -r odom:=/rtabmap/odom -r imu:=/mavros/imu/data
8. px4 드론의 파라미터 설정... 각각의 명령어는 ros2 service call을 통해서 한다.
- /mavros/param/set
- MAVROS에서 파라미터를 설정하기 위한 서비스이다.
- mavros_msgs/srv/ParamSetV2
- 사용하는 서비스 타입
- param_id:
- 설정할 파라미터 이름
- value
- 설정할 값
- type: 2 ==> 설정할 값을 integer타입으로 설정하겠다.
ros2 service call /mavros/param/set mavros_msgs/srv/ParamSetV2 \
"{force_set: true, param_id: 'COM_ARM_WO_GPS', value: {type: 2, integer_value: 1}}"
ros2 service call /mavros/param/set mavros_msgs/srv/ParamSetV2 \
"{force_set: true, param_id: 'CBRK_IO_SAFETY', value: {type: 2, integer_value: 22027}}"
ros2 service call /mavros/param/set mavros_msgs/srv/ParamSetV2 \
"{force_set: true, param_id: 'CBRK_USB_CHK', value: {type: 2, integer_value: 197848}}"
ros2 service call /mavros/param/set mavros_msgs/srv/ParamSetV2 \
"{force_set: true, param_id: 'COM_RC_IN_MODE', value: {type: 2, integer_value: 1}}"
- COM_ARM_NO_GPS
- gps없이 드론을 arm할수있게 허용합니다.
- 0 ==> GPS없다면, arm불가능
- 1 ==> GPS가 없어도, ARM가능 ( 실내에서 GPS없이 드론을 arm하고 싶을때 사용 )
- CBRK_IO_SAFETY
- IO safety Breaker 파라미터이다. 하드웨어 안전장치를 비활성화한다.
- 22027 ==> 안전 브레이커 해제
- 0 ==> 안전기능 활성화
- IO safety Breaker 파라미터이다. 하드웨어 안전장치를 비활성화한다.
- CBRK_USB_CHK
- USB연결 상태 검사 우회
- 197848 ==> USB연결 상태 무시 ==> 즉, USB가 연결되어 있어도 비행을 가능하게 한다.
- COM_RC_IN_MODE
- RC입력 방식을 설정
- 0 ==> RC 수신기를 자동으로 탐지
- 1 ==> MaVLink로 RC입력 받기. ==> 즉, 실제 RC수신기가 없고, GCS or simulator로 RC를 제어할때 설정
ros2 service call /mavros/cmd/command mavros_msgs/srv/CommandLong \
"{broadcast: false, command: 246, confirmation: 0, \
param1: 1.0, param2: 0.0, param3: 0.0, param4: 0.0, param5: 0.0, param6: 0.0, param7: 0.0}"
9. 드론에 "속도0으로 가만히 있어라"라는 명령어 보내기
----> 유사시에 이거를 종료
ros2 topic pub -r 20 /mavros/setpoint_velocity/cmd_vel_unstamped \
geometry_msgs/msg/Twist '{linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}'
- ros2 topic pub
- ROS2에서 topic에 message를 publish한다.
- -r 20
- 초당 20Hz로 반복해서 message를 보냄. ( OFFBOARD 모드 유지에 필수이다. )
- / mavros / setpoint_velocity / cmd_vel_unstamped
- MAVROS가 수신하는 velocity 명령 토픽
- geometry_msgs / msg / Twist
- 메시지 타입 ( 선속도 + 각속도 벡터 포함 )
- {linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}
- 드론을 정지 상태로 유지하라는 의미.
10. OFFBOARD 모드로 전환
ros2 service call /mavros/set_mode mavros_msgs/srv/SetMode \
"{base_mode: 0, custom_mode: 'OFFBOARD'}"
11. 단순 arming 테스트
ros2 service call /mavros/cmd/command mavros_msgs/srv/CommandLong \
"{broadcast: false, command: 400, confirmation: 0, \
param1: 1.0, param2: 0.0, param3: 0.0, param4: 0.0, param5: 0.0, param6: 0.0, param7: 0.0}"
12. arming 옵션을 true로 바꿔줌.
ros2 service call /mavros/cmd/arming mavros_msgs/srv/CommandBool "{value: true}"
ros2 service call /mavros/cmd/arming mavros_msgs/srv/CommandBool "{value: false}"
ros2 topic pub -r 20 /mavros/setpoint_velocity/cmd_vel_unstamped \geometry_msgs/msg/Twist '{}'
ros2 topic pub --times 60 -r 20 /mavros/setpoint_velocity/cmd_vel_unstamped \
geometry_msgs/msg/Twist '{linear: {x: 0.0, y: 0.0, z: 0.1}, angular: {x: 0.0, y: 0.0, z: 0.0}}'
13. 안전 하강 ( 착륙 )
ros2 service call /mavros/set_mode mavros_msgs/srv/SetMode "{base_mode: 0, custom_mode: 'AUTO.LAND'}"