# 工作日誌 ## 3/16 - 嘗試組裝第一隻腳,但發現有螺絲是沒被寫在BOM表上的 以後直接買完整一點的尺寸 - 壓克力去工設系切 ## 3/18 - 調教3D列印ABS材料的參數 overhang angle: https://www.youtube.com/watch?v=iYtlrqmIy3o&ab_channel=ItsMeaDMaDe ## 3/21開始組裝之日 - 發現有一個python檔案,可以調整每個servo的offset 3/25初步組裝完成,進入電路時代 3/29 電路接線完成 剩下電池還在大陸 ## 4/9期中報告(教授提出的建議) - 關於馬達短路的討論: 可能是馬達的瞬間電流過大,超過電源供應器的功率 - 李博士:要單獨測試IMU的運作、硬體模型中的IMU與現實的IMU參數是否相同 - 何明字:確認 Issac gym 跟 Gazebo 中的硬體模型參數相同 - 周榮華:跑動時的負載,需要考慮 - 李博士:上下的壓克力板可能不夠堅固,如果跌倒可能造成斷裂, 要再測試一下 ## 4/14整線、組裝、測試電路 ## 4/28 SD卡壞了 滾吧 重新安裝環境,也知道藍牙問題要怎麼解決了 ## 4/29 馬達組裝完畢 ## 5/1 ### 寫完開機腳本 SPI, 藍芽, ROS環境 ## 電量顯示檢測 如果不變 → 檢查 topic 名/回調是否生效 繪製邏輯 如果 log 顯示在變,但畫面不變 → 檢查百分比計算、round() 邏輯或 ImageDraw 坐標是否把新值畫進去 了 ### [Dingo 站立](https://youtube.com/shorts/Xw4FGWJ9rDc?si=3RcolFRUmxZS1-21) ### 操作的方式不如預期 - 要使用keyboard listener 補缺少的py套件`pynput` ### 組裝穩定度不夠 - 腳的穩定度不太夠:3D列印新的零件 - 使用螺絲膠 ### 其他 - 鏡頭決定使用D455,目前正在詢問店家 ## 5/4 1. 電量問題:BOM表上面的電阻錯誤! 電路圖上面為22k電阻,但實際購買的是47k電阻,應購買22k才是正確的! 2. Bambu A1設定: Leg Offset Mod 設定列印到一半卡住,把培林放進去(Layer43設定Pause) ABS列印參數,可以把Wall loop設定成3,減少裂開的情況發生 3. 新的路由完成了 ## 5/20 :::spoiler Todo - [x] 把樹莓派的網路改成創課網路 - [ ] 電量問題 - [ ] IMU數據 - [ ] Isa - [ ] Docker看來是要學一下了 - [x] 訂完相機 ::: ### Docker 方便使用VSCode快速Debug 目前還不太會使用,學習中 相關資料:[VSCode容器文件](https://learn.microsoft.com/zh-tw/visualstudio/docker/tutorials/docker-tutorial) ### 排查電量問題 電量會一直顯示100% 依序檢查每個節點的output 電壓電阻分配正常,而程式碼在經過測試後要吃到2.1-1.9V電壓才會改變,但PCB分壓結果為4.5-3V,後續應該會採用更改程式碼,修正成4.5-3V range,並再次測試 - 快速測試方式: 將 battery line 接到直流供電器直接改變電壓來看液晶螢幕上面的值有沒有變 :::warning 更改程式碼前記得先整理好github ::: ### IMU :::spoiler rosmsg show sensor_msgs/Imu std_msgs/Header header uint32 seq time stamp string frame_id geometry_msgs/Quaternion orientation float64 x float64 y float64 z float64 w float64[9] orientation_covariance geometry_msgs/Vector3 angular_velocity float64 x float64 y float64 z float64[9] angular_velocity_covariance geometry_msgs/Vector3 linear_acceleration float64 x float64 y float64 z float64[9] linear_acceleration_covariance ::: https://wiki.ros.org/ros_imu_bno055 https://www.ncnynl.com/archives/202203/5075.html :::spoiler IMU校正 校正步驟 加速度計 (Accel) 校正 動作:保持感測器水平,輕輕且緩慢地把它翻到各個面(上下、左側、右側、前後),每個面停留一點時間。 目標:accel 由 0 → 3。 陀螺儀 (Gyro) 校正 動作:把感測器保持平穩,持續以固定角速度繞各軸旋轉,並且中間停頓歸零。 目標:gyro 由 0 → 3。 磁力計 (Mag) 校正 動作:以「8」字形在空中揮動感測器,確保所有方向都被掃過。 目標:mag 由 0 → 3。 系統 (System) 校正 只要以上三個都校到 3,system 也會自動到 3。 ::: 完成校正後,就可以在 RViz/rqt_plot 或其他 downstream node 看到穩定、正確的姿態、加速度與方向資訊了! ## 5/23 IMU沒有 - 發現IMU沒有寫frame_id,沒有在package裡執行關於IMU的程式,rosnode沒有關於IMU的相關節點資訊,rviz自然就不能透過訂閱取得IMU的data ==解決方法:在package.launch新增IMU節點== - 建立坐標系廣播(TF) ==CMakelists.txt變更== - find_package、catkin_package、catkin_install_python 對應的package.xml 查找ros msg and topic - 開rviz檢查是否有IMU相關節點資料 ## 5/25 建立IMU node - 在`dingo_peripheral_interfacing/scripts`建立`imu_publisher.py` 並在.py裡設置frame_id(imu_link)、topic(imu/data_row),加入imu = IMU()以抓取IMU.py的數據,並透過covarience校正誤差 - package中新增 ```cmake <build>sensor_msgs</build> <exec_depend>sensor_msgs</exec_depend> <build>tf</build> <exec_depend>tf</exec_depend> ``` - dingo_launch中新增IMU的節點資訊 ```cmake <node pkg="dingo_peripheral_interfacing" type="imu_publisher.py" name="imu_publisher" output="screen" if="$(eval arg('use_imu') == '1')"> <!-- 你可以把 topic、frame_id 等參數放在這裡 --> <param name="frame_id" value="imu_link"/> <param name="rate" value="50"/> ``` ::: spoiler Cmakelist 加入 snesor_msg&tf,安裝IMU.py的函式庫 ```diff @@ -find_package(catkin REQUIRED COMPONENTS - rospy message_generation std_msgs +# ─── 新增 sensor_msgs / geometry_msgs / tf ─── +find_package(catkin REQUIRED COMPONENTS + rospy + std_msgs + sensor_msgs + tf + message_generation ) @@ -catkin_package( -# INCLUDE_DIRS include -# LIBRARIES dingo_nano_interfacing - CATKIN_DEPENDS rospy message_runtime -# DEPENDS system_lib -) +# ─── 把新依賴放進 CATKIN_DEPENDS ─── +catkin_package( + CATKIN_DEPENDS + rospy + std_msgs + sensor_msgs + tf + message_runtime # 你已有 ElectricalMeasurements.msg,所以保留 +) @@ -## Mark executable scripts (Python etc.) for installation -## in contrast to setup.py, you can choose the destination -catkin_install_python(PROGRAMS - scripts/battery_voltage_checking.py - DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}) +## ---------- 安裝 Python 腳本 ---------- +catkin_install_python( + PROGRAMS + scripts/battery_voltage_checking.py + scripts/imu_publisher.py # ★ 把新節點列進來 + DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +) + +## ---------- 安裝 Python 函式庫 (IMU.py) ---------- +# 這一步會把整個目錄複製到 /opt/ros/…/site-packages, +# 任何節點都可以 `import dingo_peripheral_interfacing.IMU` +install( + DIRECTORY src/dingo_peripheral_interfacing + DESTINATION ${CATKIN_PACKAGE_PYTHON_DESTINATION} +) ``` ::: 以上做完後需要重新編譯 ``` catkin_make source devel/setup.bash ``` ## 5/22 釀梅子 ## 5/23 - Docker建好了,但還不太會用 - [ROS教學-鐵人賽](https://ithelp.ithome.com.tw/users/20112348/ironman/1965) ## 5/24 - 鐵人賽看到Day20: 學了Node, Topic, publisher, subscriber ## 5/25 > 學會走路的那天 ### [ROS進階-鐵人賽](https://ithelp.ithome.com.tw/users/20112348/ironman/3378) - 短期先不考慮轉到ROS2,如果要轉可以用[ROS Bridge](https://github.com/ros2/ros1_bridge) - 簡易的subscriber callback(多參數版) ```python #input 一個參數時: def callback(data, arg): rospy.loginfo(data, arg) sub = rospy.Subscriber("topic", message_type, callback, arg) #input 兩個以上參數時: def callback(data, args): arg1 = args[0] arg2 = args[1] sub = rospy.Subscriber("topic_name", String, callback, (arg1, arg2)) ``` - 如果沒有jeston nano,導致效能不足 可以參考[這個](https://ithelp.ithome.com.tw/articles/10244398), 把master設定在主機上面 --- ### 移動控制問題 1. 修改部分 `InputInterface.py` 中xbox對應ps4按鈕的問題,現在可以[踏步](https://youtube.com/shorts/Xw4FGWJ9rDc?si=j0AFEoZbxDPZq5Tc)了 2. 了解整個控制流程,之後debug應該可以更順利([chatgpt對話紀錄](https://chatgpt.com/share/68333422-5700-8001-a54b-cc01d654d2e6)) 3. 接下來要解決前進的問題 4. 也發現沒辦法支撐自己 -> 新的腳掌還沒實裝 5. E-stop會一直被按下 :::spoiler ps4搖桿 | PS4 手把 | `/joy.axes[idx] / buttons[idx]` | 對應 `Command` 欄位 | 說明 | | -------------- | ------------------------------- | ------------------------ | --------- | | 左搖桿 **Y** | `axes[1]`(向前 = −1) | `horizontal_velocity[0]` | 前進 / 後退 | | 左搖桿 **X** | `axes[0]`(右 = +1) | `horizontal_velocity[1]` | 右移 / 左移 | | 右搖桿 **X** | `axes[2]` 或 `axes[3]`¹ | `yaw_rate` | 原地順 / 逆時針 | | 右搖桿 **Y** | `axes[5]` 或 `axes[4]`¹ | `pitch` | 機身俯仰 | | **▢ (Square)** | `buttons[3]` | `trot_event` | 開 / 關 小跑步 | | **○ (Circle)** | `buttons[2]` | `hop_event` | 跳躍(瞬時) | | **OPTIONS** | `buttons[9]` | `joystick_control_event` | 進入 / 離開遙控 | ::: --- ### Reference [Intel D455 to ROS CSDN](https://blog.csdn.net/weixin_51157015/article/details/127747882) [intel d455 ros github](https://github.com/IntelRealSense/realsense-ros/tree/ros1-legacy) [Realsense d455 SLAM using Octomap in ROS1](https://hackmd.io/@aQPXIDmWRSCq4QfY42mKhA/ByTmSAIC3) [IMU bno055](https://wiki.ros.org/ros_imu_bno055) ## 6/10 ### 行走的控制已經完成 修改ps4搖桿對照到xbox搖桿 走路方式:先按下y進入指令模式,接下來按下x開啟走路模式,在走路模式下就可以使用左蘑菇前進後退 ### 問題:沒辦法承受負載 正常行走後,把狗放在地上卻沒辦法如預期移動 1. 檢查機構是否有正常安裝 在檢查過後發現,螺桿的長度有一隻特別長,沒有鎖到底 2. 測試馬達力量是否足夠 3. 嘗試使用巧拼作為增加地面摩擦力的方式 4. 調整PID參數, ### 鏡頭架 設計完成,使用M4-10mm螺絲固定相機 (相機背部6mm,底座厚度3mm) ![image](https://hackmd.io/_uploads/ByFJ4kLmgx.png) ### IMU節點 ### 6/17 - [x] Issac gym 訓練完的模型要怎麼接進ROS2 [solution](https://chatgpt.com/share/685117ab-6c28-8001-b162-991da3c3dcfd) - [x] 樹莓派到底怎樣 是不是在搞,備份了 dingo_backup.img [ Backup file Reference](https://blog.cavedu.com/2018/03/22/raspberry-pi-sd-card/) `sudo dd if=/dev/sdb of=/media/esmaker/SanDick/dingo_backup.img bs=4M status=progress | zip Dingo_20250617.zip -` - [ ] IMS節點打開 ### 7/8 ros1 轉到 ros2 [遷移方式](https://blog.csdn.net/qq_16539009/article/details/124043163) [example](https://blog.csdn.net/qq_16539009/article/details/124060944) 可使用 ros bridge 進行兩邊的溝通 小範圍遷移:先挑一兩個核心節點測試,確定 Publisher/Subscriber 正常。 [gpt](https://chatgpt.com/g/g-p-686c9cc98de88191b4f39af7972ef0cd-rosqiao-qian-pai-dui/project) [ros官網](https://docs.ros.org/en/humble/How-To-Guides/Migrating-from-ROS1.html#migrating-from-ros-1-to-ros-2) ### IMU [imu catkin](https://automaticaddison.com/how-to-publish-imu-data-using-ros-and-the-bno055-imu-sensor/)