diff --git a/auto_start/auto_start_anchor.sh b/auto_start/auto_start_anchor.sh
index 724062c..0d7e9c2 100755
--- a/auto_start/auto_start_anchor.sh
+++ b/auto_start/auto_start_anchor.sh
@@ -21,4 +21,4 @@ source /home/clucky/rover-ros2/install/setup.bash
cd /home/clucky/rover-ros2/
# Launch the ROS 2 node with the desired mode
-ros2 launch rover_launch.py mode:=anchor
+ros2 launch anchor_pkg rover.launch.py mode:=anchor
diff --git a/flake.nix b/flake.nix
index c468e6b..8e7b60f 100644
--- a/flake.nix
+++ b/flake.nix
@@ -31,6 +31,7 @@
pygame
scipy
crccheck
+ black
]
))
(
diff --git a/src/anchor_pkg/anchor_pkg/anchor_node.py b/src/anchor_pkg/anchor_pkg/anchor_node.py
index bba092f..e4d1ff5 100644
--- a/src/anchor_pkg/anchor_pkg/anchor_node.py
+++ b/src/anchor_pkg/anchor_pkg/anchor_node.py
@@ -43,27 +43,6 @@ class SerialRelay(Node):
# Initalize node with name
super().__init__("anchor_node")#previously 'serial_publisher'
- # New pub/sub with VicCAN
- self.fromvic_debug_pub_ = self.create_publisher(String, '/anchor/from_vic/debug', 20)
- self.fromvic_core_pub_ = self.create_publisher(VicCAN, '/anchor/from_vic/core', 20)
- self.fromvic_arm_pub_ = self.create_publisher(VicCAN, '/anchor/from_vic/arm', 20)
- self.fromvic_bio_pub_ = self.create_publisher(VicCAN, '/anchor/from_vic/bio', 20)
-
- self.mock_mcu_sub_ = self.create_subscription(String, '/anchor/from_vic/mock_mcu', self.on_mock_fromvic, 20)
- self.tovic_sub_ = self.create_subscription(VicCAN, '/anchor/to_vic/relay', self.on_relay_tovic_viccan, 20)
- self.tovic_debug_sub_ = self.create_subscription(String, '/anchor/to_vic/relay_string', self.on_relay_tovic_string, 20)
-
-
- # Create publishers
- self.arm_pub = self.create_publisher(String, '/anchor/arm/feedback', 10)
- self.core_pub = self.create_publisher(String, '/anchor/core/feedback', 10)
- self.bio_pub = self.create_publisher(String, '/anchor/bio/feedback', 10)
-
- self.debug_pub = self.create_publisher(String, '/anchor/debug', 10)
-
- # Create a subscriber
- self.relay_sub = self.create_subscription(String, '/anchor/relay', self.on_relay_tovic_string, 10)
-
# Loop through all serial devices on the computer to check for the MCU
self.port = None
if port_override := os.getenv("PORT_OVERRIDE"):
@@ -98,6 +77,27 @@ class SerialRelay(Node):
self.ser.write(b"can_relay_mode,on\n")
atexit.register(self.cleanup)
+ # New pub/sub with VicCAN
+ self.fromvic_debug_pub_ = self.create_publisher(String, '/anchor/from_vic/debug', 20)
+ self.fromvic_core_pub_ = self.create_publisher(VicCAN, '/anchor/from_vic/core', 20)
+ self.fromvic_arm_pub_ = self.create_publisher(VicCAN, '/anchor/from_vic/arm', 20)
+ self.fromvic_bio_pub_ = self.create_publisher(VicCAN, '/anchor/from_vic/bio', 20)
+
+ self.mock_mcu_sub_ = self.create_subscription(String, '/anchor/from_vic/mock_mcu', self.on_mock_fromvic, 20)
+ self.tovic_sub_ = self.create_subscription(VicCAN, '/anchor/to_vic/relay', self.on_relay_tovic_viccan, 20)
+ self.tovic_debug_sub_ = self.create_subscription(String, '/anchor/to_vic/relay_string', self.on_relay_tovic_string, 20)
+
+
+ # Create publishers
+ self.arm_pub = self.create_publisher(String, '/anchor/arm/feedback', 10)
+ self.core_pub = self.create_publisher(String, '/anchor/core/feedback', 10)
+ self.bio_pub = self.create_publisher(String, '/anchor/bio/feedback', 10)
+
+ self.debug_pub = self.create_publisher(String, '/anchor/debug', 10)
+
+ # Create a subscriber
+ self.relay_sub = self.create_subscription(String, '/anchor/relay', self.on_relay_tovic_string, 10)
+
def run(self):
# This thread makes all the update processes run in the background
diff --git a/rover_launch.py b/src/anchor_pkg/launch/rover.launch.py
similarity index 100%
rename from rover_launch.py
rename to src/anchor_pkg/launch/rover.launch.py
diff --git a/src/anchor_pkg/package.xml b/src/anchor_pkg/package.xml
index 60964eb..4903787 100644
--- a/src/anchor_pkg/package.xml
+++ b/src/anchor_pkg/package.xml
@@ -11,6 +11,8 @@
common_interfaces
python3-serial
+ black
+
ament_copyright
ament_flake8
ament_pep257
diff --git a/src/anchor_pkg/setup.py b/src/anchor_pkg/setup.py
index e2844e7..f29392e 100644
--- a/src/anchor_pkg/setup.py
+++ b/src/anchor_pkg/setup.py
@@ -1,4 +1,6 @@
from setuptools import find_packages, setup
+from os import path
+from glob import glob
package_name = 'anchor_pkg'
@@ -9,7 +11,8 @@ setup(
data_files=[
('share/ament_index/resource_index/packages',
['resource/' + package_name]),
- ('share/' + package_name, ['package.xml']),
+ (path.join("share", package_name), ['package.xml']),
+ (path.join("share", package_name, "launch"), glob("launch/*"))
],
install_requires=['setuptools'],
zip_safe=True,
diff --git a/src/core_pkg/core_pkg/core_node.py b/src/core_pkg/core_pkg/core_node.py
index ae9b173..42c692d 100644
--- a/src/core_pkg/core_pkg/core_node.py
+++ b/src/core_pkg/core_pkg/core_node.py
@@ -426,6 +426,9 @@ class SerialRelay(Node):
motor = self.feedback_new_state.fr_motor
case 4:
motor = self.feedback_new_state.br_motor
+ case _:
+ self.get_logger().warning(f"Ignoring REV motor feedback 53 with invalid motorId {motorId}")
+ return
if motor:
motor.temperature = temp
@@ -471,6 +474,9 @@ class SerialRelay(Node):
case 4:
motor = self.feedback_new_state.br_motor
joint_state_msg.name = ["br_motor_joint"]
+ case _:
+ self.get_logger().warning(f"Ignoring REV motor feedback 58 with invalid motorId {motorId}")
+ return
joint_state_msg.header.stamp = msg.header.stamp
self.joint_state_pub_.publish(joint_state_msg)
diff --git a/src/headless_pkg/src/headless_node.py b/src/headless_pkg/src/headless_node.py
index d8df59d..fa5e3ff 100755
--- a/src/headless_pkg/src/headless_node.py
+++ b/src/headless_pkg/src/headless_node.py
@@ -48,6 +48,14 @@ class Headless(Node):
# Initialize pygame first
pygame.init()
pygame.joystick.init()
+ super().__init__("headless")
+
+ # Wait for anchor to start
+ pub_info = self.get_publishers_info_by_topic('/anchor/from_vic/debug')
+ while len(pub_info) == 0:
+ self.get_logger().info("Waiting for anchor to start...")
+ time.sleep(1.0)
+ pub_info = self.get_publishers_info_by_topic('/anchor/from_vic/debug')
# Wait for a gamepad to be connected
print("Waiting for gamepad connection...")
@@ -65,8 +73,6 @@ class Headless(Node):
self.gamepad.init()
print(f'Gamepad Found: {self.gamepad.get_name()}')
- # Now initialize the ROS2 node
- super().__init__("headless")
self.create_timer(0.15, self.send_controls)
self.core_publisher = self.create_publisher(CoreControl, '/core/control', 2)