# 工作日誌
## 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)

### 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/)