# Omniverse usage
Record about the problem i met and how to solve
## Open Problem
if you can't open it directly with double click or it continued circling
### 1. use terminal to open it, it can see bug message if exist
### 2. open cmd type in
```
./omniverse-launcher-linux.AppImage
```
if don't know dir
```
sudo find / -type f -name "omniverse-launcher-linux.AppImage" 2>/dev/null
cd the/path/you/found
```
### 3. checkout problem
```
create mount dir error: No space left on device
```
this problem due to default tmp file is full
### 4. solve
give/make another file dir for tmp record
```
TMPDIR=/path/to/tmp ./omniverse-launcher-linux.AppImage
```
then the window will come out to log in.
### ex: other's similar problem and solve
https://blog.csdn.net/zkf0100007/article/details/143645806
## localhost(NUCLEUS) service is not accessible.

### 1. Remove some setup of Omniverse
***Please make sure the acount for administrator first***
```
rm -rf ~/.nvidia-omniverse
rm -rf ~/.config/omniverse-launcher
rm -rf ~/.cache/omniverse
rm -rf ~/.cache/ov
rm -rf /tmp/.mount_omnive*
```
1. ~/.nvidia-omniverse
這是 NVIDIA Omniverse 的配置目錄。刪除這個資料夾會移除 Omniverse 相關的所有本地設定,包括用戶配置和一些本地伺服器的設定。
可能丟失的配置:本地伺服器(Nucleus)配置。用戶資料和偏好設定。本地安裝的插件和模組。
2. ~/.config/omniverse-launcher
這是 Omniverse Launcher 的配置目錄。刪除此資料夾會清除 Omniverse Launcher 的設定,包括其啟動配置和用戶資料。
可能丟失的配置:Launcher 的啟動設置和偏好。註冊的伺服器信息(如本地伺服器地址)。登錄帳號資訊和授權資料。
3. ~/.cache/omniverse
這是 Omniverse 的快取資料夾,包含了系統運行過程中的暫存數據,例如已下載的資源、場景預覽、緩存文件等。
可能丟失的數據:下載的資源、模組、場景文件的快取。圖形和其他媒體資源的臨時文件。
4. ~/.cache/ov
這是 Omniverse 相關的快取資料夾,包含了其他暫時性和運行時數據。
可能丟失的數據:Omniverse 客戶端和其他資源的緩存文件。
5. /tmp/.mount_omnive
這是 Omniverse AppImage 安裝後創建的暫存資料夾,通常會包含啟動過程中的臨時掛載資料。這些資料夾的刪除不會對配置或數據造成永久性損失,但如果有掛載過程中的資料,會導致未能正確啟動應用。
可能丟失的數據: 當前正在運行或掛載的應用臨時資料
### 2. follow the instruction to setup the path and administration.
### 3. connect to local host
defalt username/pssword : admin/admin
# Spot routing usage
the Instruction of Isaac sim usage base on IsaacSim_Routing
from : https://github.com/BruceLin90620/IsaacSim_Routing
## Spot_routing download
### 1. following the readme set up the environment and git
```
git clone https://github.com/BruceLin90620/IsaacSim_Routing.git
```
advice:
use
```
conda create --name myenv python=3.10
```
### 2. the path change
I installed in filename : isaac_routing/src
1. Launch Isaac Sim Spot Navigation
```
cd /home/bruce/.local/share/ov/pkg/isaac-sim-4.2.0
./python.sh standalone_examples/api/omni.isaac.quadruped/spot_nav_standalone.py --env lab
```
->
```
cd /home/user/isaac_routing/src/standalone
python3 spot_nav_standalone.py --env lab
```
2.Launch ROS 2 Navigation
remember to
```
colcon build
source install/setup.bash
```
and path chage for last steps
```
cd /home/bruce/IsaacSim/IsaacSim-ros_workspaces/humble_ws
```
->
```
cd /home/user/isaac_routing/src
```
3. follow steps, open 3 terminal and run one by one.
```
ros2 launch spot_config navigate.launch.py rviz:=true
```
```
ros2 launch routing_agent RunServer.launch.py
```
```
ros2 run spot_routing_nav waypoint_nav
```
## Open .usd
```
~/IsaacLab_new/IsaacLab$ ./isaaclab.sh -s
```
# Change the map
變更或擴增地圖及機器人得初始位置定位
位置接須以手動來進行校正才能獲得
地圖需有 .usd 和 .yaml 檔
## 加入地圖製程式中 (舊)
### 1. spot_nav_standalone.py


將路徑加入並寫入判別式和 add_argument 的 choice 內, position、orientation 在啟動程式後於 isaac Sim 中 確認位置再進行修改
```
python3 spot_nav_standalone.py --env lab
```
調整 --env 後的地圖代號即可, 有時燈源會有誤,記得開啟燈源(Defalt 即可)

### 2.navigate.launch. py
```
ros2 launch spot_config navigate.launch.py rviz:=true map:=/home/csl/isaac_routing/src/champ/spot_config/maps/tsmc_1f.yaml
```
將要使用的 地圖 .yaml 路徑置於 map: 後,即可啟動對應路徑的 rviz
### 3.設定初始位置
依過去順序啟動修改過地圖的 isaac sim 和 rviz 後,透過 rviz 上列的 2D Pose Estimate 可以調整 spot 於 rviz 中的位置,再透過讓 lidar 對齊地圖環境的方式獲得較正確的 rviz 內定位,透過
```
ros2 topic echo /amcl_pose
```
取得座標
### 4.navigation.yaml
在內部輸入剛剛獲得的 intial pose,並 colcon build

記得
```
colcon build
```
### 5.變更 waypoint 和 task

至此檔案中變更
```
loadGraphArg=ExecuteProcess(cmd=[['ros2 run routing_agent loadGraph /home/csl/isaac_routing/src/routing_engine/graph_collector_and_visualization/map.json']],shell=True)
loadTaskAndVehicleArg=ExecuteProcess(cmd=[['ros2 run routing_agent routingClient /home/csl/isaac_routing/src/routing_engine/graph_collector_and_visualization/task_data_empty.json src/routing_engine/test_run/sample_data/vehicle_data.json']],shell=True)
```
若 waypoint 數量與 task 數量不相符將會報錯
記得
```
colcon build
```
## 加入地圖製程式中 (新)
### 使用 env_setup.py
可以免去啟動程式時的後綴及繁雜的修改手續
( spot_config navigate.launch 中可將 default 的 rviz 改為 true)
檔案暫定路徑為
```
/home/csl/isaac_routing2_v2/src/user_tools/env_setup.py
```
依照格式加入地圖資訊

* arg.env 為地圖名稱
* ENV_USD_PATH 為 isaac sim 建模位置
* spot_init_pose 為isaac sim 中機器人初始位置
* spot_init_orientation 為isaac sim 中機器人初始角度
* rviz_initial_pose 為 rviz 中機器人初始位置
* rviz_map 地圖的 yaml 檔位置
* waypoint_graph 地圖的 waypoint 位置
完成設定後可於 cmd 中使用

可至
```
/home/csl/isaac_routing2_v2/src/env_config.json
```
中確認修改後的地圖狀態
# Waypoint Generate
from: https://github.com/BruceLin90620/Spot_Switch_Map_System
## 點位標記(舊)
### 1. Download
為了避免路徑錯誤需要 git 至 /src 資料夾內
```
mkdir spot_map_switching_ws/src
cd spot_map_switching_ws/src
git clone https://github.com/BruceLin90620/Spot_Switch_Map_System.git
```
### 2.build pkg
```
cd spot_map_switching_ws/
colcon build
source install/setup.bash
```
### 3. Run in different terminal
若不使用 lidar 可跳過 1, 2 步至第 4 步的直接使用 rviz2
#### 1. 讀取所有實機 spot 掃描出的 lidar 地圖
檔案須至實機調取,github 不提供
```
ros2 run switch_pcd_map switch_pcd_map_node
```
#### 2. 地圖選取
更改 mapid: 後的數字切換當前地圖
```
ros2 service call /switch_map switch_map_interfaces/srv/SingleMap "mapid: 0"
```
#### 3. 輸出資料至 rviz2
in /isaac_routing/src/routing_engine/graph_collector_and_visualization/
```
python3 graph_visualizer.py
```
spot_config/config/autonomy/graph_visualizer.py 中可修改
```
def load_waypoints(self):
with open('/home/csl/isaac_routing/src/routing_engine/graph_collector_and_visualization/waypointgraph_000_20250411_162756.json', 'r') as f:
return json.load(f)
```
變更於 rviz2 中顯示的 waypoint ,但顯示點不影響紀錄點, 可自行新增並輸入 .json 檔用於標記機器人的初始位置和重要路徑

#### 4. 啟動 rviz2 (直接使用 map)
```
rviz2
```
點選 Rviz 視窗左下角的 Add 後加入 By topic 中的 /waypoint_markers 和 PointCloud
視窗上列的 2D Pose Estimate 可直接在點選處加入 waypoint
##### 直接使用 2d 地圖進行標點 (偷懶作法)
由於 spot 回收的 pcd 檔位置和於 isaac sim 中使用的 map 有差異,因此改為直接使用 isaac sim 中的地圖做編輯
啟動 rviz 後,Add Map 並於 topic 輸入 /map,此時會顯示 error

開新的 terminal 並 launch routing system 中用來可視化並 Nav 導航的程式,因為不需要其可視化功能 rviz:=false
```
cd ~/isaac_routing
```
隨後在 rviz 視窗中便會出現原本地圖,navigate.launch.p y 便可關閉了
```
ros2 launch spot_config navigate.launch.py rviz:=false map:=<yaml檔路徑>
```
便可順利載入,此 map 上拉出的 waypoints 會貼合 isaac sim 中的設定
#### 5. 蒐集 waypoints
in /isaac_routing/src/routing_engine/graph_collector_and_visualization/cd
```
python3 pose_collector_vis.py 0
```
直接結束程式或於另一個視窗輸入即可儲存當前 waypoints 成以時間為檔名之 .json 檔
```
ros2 service call /save_waypoints std_srvs/srv/Trigger
```
#### 6. 更改routing system 使用之 waypointgraph
預設 waypointgraph.json 檔可依下列路徑找到

修改 routing system 所使用之 RunServer.launch. py 中 generate_launch_description() 的 loadGraphArg, 變更為所希望使用之路徑即可


## 點位標記(新)
舊版只允許範圍的十字內的連線,且容易有誤判導致連線穿牆或重複連線的問題,新版增加使用者操作空間,更為便捷
### 1.啟動 rivz 作為繪製空間
可以依照先前教學變更地圖
```
ros2 launch spot_config navigate.launch.py
```
### 2.啟動繪製紀錄程式
需安裝 pynput
```
cd isaac_routing2_v2/src/routing_engine/graph_collector_and_visualization/
python3 pose_collector_v2.py
```
### 3.開始繪製
記得變更 rviz topic 名稱

#### 1.繪點
點選

後於地圖上點擊左鍵便可完成點標注
在重複一次此步驟便可完成第二點標注,且不限距離、角度自動連線

若要與已經存在的點連線,在點擊 2D Pose Estimate 後點擊已經存在點便可與已存在點連線
按下鍵盤上的 q 鍵即可停止自動連線,重複先前步驟便可繪製新的線段,也可照步驟進行連線

#### 2.修改已存在點
重複點選 2D Pose Estimate 並點擊已存在點兩次
依序會在 cmd 中出現

看見最後一則訊息時便可再點選 2D Pose Estimate 並點擊想更改該點至何處


#### 3.移除點
* 若尚未按下 q 停止連線,按下鍵盤上的 d 便可移除最後添加的點
* 點選 2D Pose Estimate 並點擊已存在點,按下鍵盤上的 d 便可移除

#### 4.儲存
關閉程式即可自動儲存至同路徑下,並以時間命名
# To Do
## 1. Adding tasks in waypoints (DONE)
### 1. task asign
```
class MapManager(Node):
def __init__(self):
.
.
.
with open('/home/csl/issac_routing/src/spot_routing_nav/spot_routing_nav/task_dict.json', 'r') as file:
self.task_dict = json.load(file)
```
```
def waypoint_task(self, waypoint_id, arrived_waypoint):
if waypoint_id in self.task_dict:
match self.task_dict[waypoint_id]:
case "rotate_in_place":
self.rotate_in_place(arrived_waypoint=arrived_waypoint)
case "wave_head":
self.wave_head(arrived_waypoint=arrived_waypoint,range_deg=60)
else:
self.get_logger().info(f'No task at {waypoint_id}')
```


use waypoint_task to get the dictionary from task_dict.json and use match case to define the operation.
lab map infomation can be found in
*routing_engine/test_run/sample_data/waypointgraph.json*
### 2. Tasks so far
#### rotate in place
```
def rotate_in_place(self, arrived_waypoint,angle_deg=360, steps=4):
self.get_logger().info(f'Rotating in place: {angle_deg} degrees')
self.get_logger().info(f'{arrived_waypoint.pose.orientation.z}')
initial_yaw = asin(arrived_waypoint.pose.orientation.z)*2
# 計算每一步旋轉角度
step_angle = angle_deg / steps
for i in range(steps):
yaw = (step_angle * (i + 1)) * (3.141592 / 180.0) # 轉換為弧度
q = quaternion_from_euler(0, 0, yaw + initial_yaw)
pose = arrived_waypoint
pose.header.frame_id = 'map'
pose.header.stamp = self.navigator.get_clock().now().to_msg()
pose.pose.orientation.x = q[0]
pose.pose.orientation.y = q[1]
pose.pose.orientation.z = q[2]
pose.pose.orientation.w = q[3]
self.navigator.goToPose(pose)
self.get_logger().info(f'{pose.pose.orientation.z}')
while not self.navigator.isTaskComplete():
rclpy.spin_once(self, timeout_sec=0.1)
self.get_logger().info(f'Step {i+1}/{steps} completed')
self.get_logger().info('Rotation complete!')
```
use *arrived_waypoint* to record the arrived point information (x,y,quat), calculate the initial yaw to make sure the spot can back to initial pose.
#### wave head
```
def wave_head(self, arrived_waypoint,range_deg=60):
self.get_logger().info(f'Waving head range: {range_deg} degrees')
initial_yaw = asin(arrived_waypoint.pose.orientation.z)*2
waving_range = [range_deg, -1*range_deg, 0]
log_word = ["Looking left", "Looking right", "Finish looking"]
for i in range(len(waving_range)):
self.get_logger().info(log_word[i])
yaw = waving_range[i] * (3.141592 / 180.0) # 轉換為弧度
q = quaternion_from_euler(0, 0, yaw + initial_yaw)
pose = arrived_waypoint
pose.header.frame_id = 'map'
pose.header.stamp = self.navigator.get_clock().now().to_msg()
pose.pose.orientation.x = q[0]
pose.pose.orientation.y = q[1]
pose.pose.orientation.z = q[2]
pose.pose.orientation.w = q[3]
self.navigator.goToPose(pose)
self.get_logger().info(f'{pose.pose.orientation.z}')
while not self.navigator.isTaskComplete():
rclpy.spin_once(self, timeout_sec=0.1)
```
base on *rotate in place*, and also make sure it can turn back to initial pose.
## 2. Muti-robot
```
import argparse
from isaacsim import SimulationApp
simulation_app = SimulationApp({"renderer": "RayTracedLighting", "headless": False})
import omni
import carb
import numpy as np
import sys
from omni.isaac.core import World
from omni.isaac.core.utils.prims import define_prim, get_prim_at_path
from omni.isaac.nucleus import get_assets_root_path
from omni.isaac.quadruped.robots import SpotFlatTerrainPolicy
from omni.isaac.core.objects import VisualCuboid
from omni.isaac.core.utils.extensions import enable_extension
# enable ROS2 bridge extension
enable_extension("omni.isaac.ros2_bridge")
simulation_app.update()
import time
# Note that this is not the system level rclpy, but one compiled for omniverse
import numpy as np
import rclpy
from rclpy.node import Node
from geometry_msgs.msg import Twist
from dataclasses import dataclass
@dataclass
class Pose:
position = np.zeros(3)
orientation = np.array([1.0, 0.0, 0.0, 0.0])
class SpotNav(Node):
def __init__(self, env_usd_path, spot_poses: list):
super().__init__("Spot_Nav")
# 設定環境
self.loadEnv(env_usd_path)
self.first_step = True
self.reset_needed = False
self.cmd_scale = 1
self.cmds = [np.zeros(3) for _ in range(len(spot_poses))] # 為每台 Spot 建立獨立的控制指令
self.spots = []
self.initSpots(spot_poses)
# 設定 ROS2 訂閱,為每台 Spot 設定不同的 cmd_vel topic
self.ros_subs = []
for i in range(len(spot_poses)):
topic_name = f"cmd_vel_{i}" # 例如 "cmd_vel_0", "cmd_vel_1"
sub = self.create_subscription(Twist, topic_name, lambda msg, i=i: self.spotCmdCallback(msg, i), 1)
self.ros_subs.append(sub)
self.world.reset()
def spotCmdCallback(self, msg: Twist, spot_index: int):
"""接收不同機器人的 cmd_vel 指令"""
if self.world.is_playing():
self.cmds[spot_index][0] = msg.linear.x * self.cmd_scale
self.cmds[spot_index][2] = msg.angular.z * self.cmd_scale
def initSpots(self, spot_poses: list):
"""初始化多台 Spot"""
for i, pose in enumerate(spot_poses):
spot = SpotFlatTerrainPolicy(
prim_path=f"/World/Spot_{i}", # 每台 Spot 使用不同的路徑
name=f"Spot_{i}",
usd_path="omniverse://localhost/Library/spot.usd",
position=pose.position,
orientation=pose.orientation
)
self.spots.append(spot)
# 註冊 physics callback
self.world.add_physics_callback("physics_step", callback_fn=self.onPhysicStep)
self.world.reset()
def onPhysicStep(self, step_size):
"""更新每台 Spot 的移動"""
if self.first_step:
for spot in self.spots:
spot.initialize()
self.first_step = False
elif self.reset_needed:
self.world.reset(True)
self.reset_needed = False
self.first_step = True
else:
for i, spot in enumerate(self.spots):
spot.advance(step_size, self.cmds[i])
def run_simulation(self):
self.reset_needed = False
while simulation_app.is_running():
self.world.step(render=True)
rclpy.spin_once(self, timeout_sec=0.0)
if self.world.is_stopped():
self.reset_needed = True
# Cleanup
self.destroy_node()
simulation_app.close()
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument(
"--env",
type=str,
choices=["lobby", "b1", "lab"],
default="b1",
help="Choice of navigation environment.",
)
parser.add_argument(
"--num_spots",
type=int,
default=2, # 預設 2 台 Spot
help="Number of Spot robots in the simulation.",
)
args, _ = parser.parse_known_args()
B1_USD_PATH = "omniverse://localhost/Library/tsmc_b1_map.usd"
LOBBY_USD_PATH = "omniverse://localhost/Library/tsmc_1f_map.usd"
LAB_USD_PATH = "omniverse://localhost/Library/MIT_LAB/MIT_LAB.usd"
spot_poses = []
if args.env == "b1":
ENV_USD_PATH = B1_USD_PATH
for i in range(args.num_spots):
spot_poses.append(Pose(position=np.array([6.65 + i, -66.1, 0.8]))) # 設定不同初始位置
elif args.env == "lobby":
ENV_USD_PATH = LOBBY_USD_PATH
for i in range(args.num_spots):
spot_poses.append(Pose(position=np.array([214 + i, -257.46, 0.8]), orientation=np.array([0.707, 0, 0, 0.707])))
elif args.env == "lab":
ENV_USD_PATH = LAB_USD_PATH
for i in range(args.num_spots):
spot_poses.append(Pose(position=np.array([12.58 + i, 15.89, 0.87]), orientation=np.array([0, 0, 0, np.pi])))
rclpy.init()
subscriber = SpotNav(ENV_USD_PATH, spot_poses)
subscriber.run_simulation()
```
## 2.1 Camera follow
## 3. Free Define tasks on waypoints in certain distance during routing
### knowlage point:Nav2、routing engine
---
# Error msg
## Error msg (fixed)
若遇上 rviz2 無法啟動或 isaac sim 回報
```
[RTPS_TRANSPORT_SHM Error] Failed init_port fastrtps_port7411: open_and_lock_file failed -> Function open_port_internal
```
代表在 ros2 的通訊中有 node 或 topic 阻塞問題,頻繁關閉程式或無預警的程式關閉可能導致此問題,透過下行指令可清空當前存在的 ros2 內容,對一般程式、電腦、未運行程式無影響,但運行中 ros2 程式會造成不可預測影響,須先關閉
```
rm -f /dev/shm/fastrtps_* /dev/shm/sem.fastrtps_*
```
## Error msg
#### ros2 launch routing_agent RunServer.launch.py
```
[ros2 run routing_agent server-1] Traceback (most recent call last):
[ros2 run routing_agent server-1] File "/home/csl/issac_routing/install/routing_agent/lib/routing_agent/server", line 33, in <module>
[ros2 run routing_agent server-1] sys.exit(load_entry_point('routing-agent==1.1.0', 'console_scripts', 'server')())
[ros2 run routing_agent server-1] File "/home/csl/issac_routing/install/routing_agent/lib/python3.10/site-packages/routing_agent/RoutingServer.py", line 112, in main
[ros2 run routing_agent server-1] rclpy.spin(routing_server)
[ros2 run routing_agent server-1] File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/__init__.py", line 226, in spin
[ros2 run routing_agent server-1] executor.spin_once()
[ros2 run routing_agent server-1] File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/executors.py", line 739, in spin_once
[ros2 run routing_agent server-1] self._spin_once_impl(timeout_sec)
[ros2 run routing_agent server-1] File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/executors.py", line 736, in _spin_once_impl
[ros2 run routing_agent server-1] raise handler.exception()
[ros2 run routing_agent server-1] File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/task.py", line 239, in __call__
[ros2 run routing_agent server-1] self._handler.send(None)
[ros2 run routing_agent server-1] File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/executors.py", line 437, in handler
[ros2 run routing_agent server-1] await call_coroutine(entity, arg)
[ros2 run routing_agent server-1] File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/executors.py", line 391, in _execute_service
[ros2 run routing_agent server-1] response = await await_or_execute(srv.callback, request, srv.srv_type.Response())
[ros2 run routing_agent server-1] File "/opt/ros/humble/local/lib/python3.10/dist-packages/rclpy/executors.py", line 107, in await_or_execute
[ros2 run routing_agent server-1] return callback(*args)
[ros2 run routing_agent server-1] File "/home/csl/issac_routing/install/routing_agent/lib/python3.10/site-packages/routing_agent/RoutingServer.py", line 88, in NavServiceCallBack
[ros2 run routing_agent server-1] self.routingEngine.update(request.i_am_at)
[ros2 run routing_agent server-1] File "/home/csl/issac_routing/install/routing_agent/lib/routing_agent/RoutingEngine.py", line 137, in update
[ros2 run routing_agent server-1] raise KeyError("You derail from the path!")
[ros2 run routing_agent server-1] KeyError: 'You derail from the path!'
[ERROR] [ros2 run routing_agent server-1]: process has died [pid 1453440, exit code 1, cmd 'ros2 run routing_agent server'].
```
#### ros2 launch spot_config navigate.launch.py rviz:=true
```
[rviz2-2] [INFO] [1742280158.825562243] [rviz2]: Message Filter dropping message: frame 'odom' at time 76.000 for reason 'discarding message because the queue is full'
```
#### ros2 run spot_routing_nav waypoint_nav
```
[WARN] [1742279974.169974686] [map_manager]: Navigation failed with result: TaskResult.FAILED
```
## Error msg 2
git 內的 spot.usd 無法正常使用,使用 omniversse 上的 spot.usd 可正常運行但疑似材料包丟失,出現訊息於啟動 omniverse,目前 spot 呈白色
```
2025-04-07 01:32:08 [9,849ms] [Error] [omni.hydra] [UsdToMdl] Prim '/__Prototype_4/Looks/material_Material_001/Shader' parameter 'diffuse_texture': References an asset that can not be found: './materials/body_others.png'
```
## Error msg 3
版本問題不影響使用
```
Summary: 19 packages finished [2min 5s]
2 packages had stderr output: ndt_omp_ros2 pcl_localization_ros2
```
## Error msg 4
numpy 版本不符合,須使用 numpy 1.2.0前
```
(isaaclab) csl@csl-B550M-AORUS-PRO-P:~/isaac_routing$ ros2 run spot_routing_nav waypoint_nav
Traceback (most recent call last):
File "/home/csl/isaac_routing/install/spot_routing_nav/lib/spot_routing_nav/waypoint_nav", line 33, in <module>
sys.exit(load_entry_point('spot-routing-nav==0.0.0', 'console_scripts', 'waypoint_nav')())
File "/home/csl/isaac_routing/install/spot_routing_nav/lib/spot_routing_nav/waypoint_nav", line 25, in importlib_load_entry_point
return next(matches).load()
File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 171, in load
module = import_module(match.group('module'))
File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "/home/csl/isaac_routing/install/spot_routing_nav/lib/python3.10/site-packages/spot_routing_nav/waypoint_nav.py", line 5, in <module>
from tf_transformations import quaternion_from_euler
File "/opt/ros/humble/lib/python3.10/site-packages/tf_transformations/__init__.py", line 46, in <module>
import transforms3d
File "/usr/lib/python3/dist-packages/transforms3d/__init__.py", line 10, in <module>
from . import quaternions
File "/usr/lib/python3/dist-packages/transforms3d/quaternions.py", line 26, in <module>
_MAX_FLOAT = np.maximum_sctype(np.float)
File "/home/csl/.local/lib/python3.10/site-packages/numpy/__init__.py", line 324, in __getattr__
raise AttributeError(__former_attrs__[attr])
AttributeError: module 'numpy' has no attribute 'float'.
`np.float` was a deprecated alias for the builtin `float`. To avoid this error in existing code, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.
The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at:
https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations. Did you mean: 'cfloat'?
[ros2run]: Process exited with failure 1
```
## Error msg 5
啟動
```
ros2 run spot_routing_nav waypoint_nav
```
會產生停滯,沒有反應 -> 重新執行