update documentation and accept 3-value VicCAN messages

This commit is contained in:
ryleu
2026-04-02 19:41:05 -05:00
parent 4ef226c094
commit 89b3194914
3 changed files with 9 additions and 2 deletions

View File

@@ -42,6 +42,9 @@ class Anchor(Node):
- Core, Arm, and Bio publish VicCAN messages to this topic to send to the MCU - Core, Arm, and Bio publish VicCAN messages to this topic to send to the MCU
* /anchor/to_vic/relay_string * /anchor/to_vic/relay_string
- Send raw strings to connectors. Does not work for connectors that require conversion (like CANConnector) - Send raw strings to connectors. Does not work for connectors that require conversion (like CANConnector)
* /anchor/relay
- Legacy method for talking to connectors. Takes String as input, but does not send the raw strings to connectors.
Instead, it converts them to VicCAN messages first.
""" """
connector: Connector connector: Connector
@@ -203,7 +206,7 @@ class Anchor(Node):
self.connector.write(msg) self.connector.write(msg)
self.tovic_debug_pub_.publish(msg) self.tovic_debug_pub_.publish(msg)
@deprecated("Use /anchor/to_vic/relay instead of /anchor/relay") @deprecated("Use /anchor/to_vic/relay or /anchor/to_vic/relay_string instead of /anchor/relay")
def write_connector_legacy(self, msg: String): def write_connector_legacy(self, msg: String):
"""Write to the connector by first attempting to convert String to VicCAN""" """Write to the connector by first attempting to convert String to VicCAN"""
# please do not reference this code. ~riley # please do not reference this code. ~riley

View File

@@ -372,8 +372,10 @@ class CANConnector(Connector):
case 2: case 2:
data_type = 1 data_type = 1
data = struct.pack(">ff", *msg.data) data = struct.pack(">ff", *msg.data)
case 4: case 3 | 4: # 3 gets padded and is treated as 4
data_type = 2 data_type = 2
# pad till we have 4 otherwise struct.pack will freak out
msg.data = (msg.data + [0])[:4]
data = struct.pack(">hhhh", *[int(x) for x in msg.data]) data = struct.pack(">hhhh", *[int(x) for x in msg.data])
case _: case _:
self.logger.error( self.logger.error(

View File

@@ -57,6 +57,8 @@ def string_to_viccan(
def viccan_to_string(viccan: VicCAN) -> str: def viccan_to_string(viccan: VicCAN) -> str:
"""Converts a ROS2 VicCAN message to the serial string VicCAN format.""" """Converts a ROS2 VicCAN message to the serial string VicCAN format."""
# make sure we accept 3 digits and treat it as 4
if len(viccan.data) == 3: viccan.data.append("0")
# go from [ w, x, y, z ] -> ",w,x,y,z" & round to 7 digits max # go from [ w, x, y, z ] -> ",w,x,y,z" & round to 7 digits max
data = "".join([f",{round(val,7)}" for val in viccan.data]) data = "".join([f",{round(val,7)}" for val in viccan.data])
return f"can_relay_tovic,{viccan.mcu_name},{viccan.command_id}{data}\n" return f"can_relay_tovic,{viccan.mcu_name},{viccan.command_id}{data}\n"