ros2_canopen icon indicating copy to clipboard operation
ros2_canopen copied to clipboard

rpdo can not be control

Open Mark9999999 opened this issue 1 year ago • 1 comments

Describe the bug I want to use ros2_canopen to maxon motor, when I set a rpdo mapping to index:6040 subindex:00 and set a value 0xF, It is not 0xF , but is 0x21BF in my motor drive.

cia402_setup.launch.py


import os
from ament_index_python import get_package_share_directory
from launch import LaunchDescription
import launch
from launch.actions import IncludeLaunchDescription
from launch.launch_description_sources import PythonLaunchDescriptionSource


def generate_launch_description():
    ld = LaunchDescription()
    slave_eds_path = os.path.join(
        get_package_share_directory("canopen_tests"), "config", "cia402", "cia402_slave.eds"
    )

    slave_node_1 = IncludeLaunchDescription(
        PythonLaunchDescriptionSource(
            [
                os.path.join(get_package_share_directory("canopen_fake_slaves"), "launch"),
                "/cia402_slave.launch.py",
            ]
        ),
        launch_arguments={
            "node_id": "1",
            "node_name": "cia402_node_1",
            "slave_config": slave_eds_path,
        }.items(),
    )
    master_bin_path = os.path.join(
        get_package_share_directory("canopen_tests"),
        "config",
        "cia402_lifecycle",
        "master.bin",
    )
    if not os.path.exists(master_bin_path):
        master_bin_path = ""
    device_container = IncludeLaunchDescription(
        PythonLaunchDescriptionSource(
            [
                os.path.join(get_package_share_directory("canopen_core"), "launch"),
                "/canopen.launch.py",
            ]
        ),
        launch_arguments={
            "master_config": os.path.join(
                get_package_share_directory("canopen_tests"),
                "config",
                "cia402",
                "master.dcf",
            ),
            "master_bin": master_bin_path,
            "bus_config": os.path.join(
                get_package_share_directory("canopen_tests"),
                "config",
                "cia402",
                "bus.yml",
            ),
            "can_interface_name": "can0",
        }.items(),
    )

    ld.add_action(device_container)
    #ld.add_action(slave_node_1)
    return ld

bus.yml

options: dcf_path: "@BUS_CONFIG_PATH@"

master:
  node_id: 2
  driver: "ros2_canopen::MasterDriver"
  package: "canopen_master_driver"
  sync_period: 20000 #us

defaults:
  dcf: "cia402_slave.eds"
  driver: "ros2_canopen::Cia402Driver"
  package: "canopen_402_driver"
  period: 20
  polling: false
  heartbeat_producer: 1000 # Heartbeat every 1000 ms控制701报文间隔
  sdo:
    - {index: 0x6060, sub_index: 0, value: 1} 
    - {index: 0x6040, sub_index: 0, value: 6} 
    - {index: 0x6040, sub_index: 0, value: 7}
    - {index: 0x6081, sub_index: 0, value: 1000}
    - {index: 0x6083, sub_index: 0, value: 5000}
    - {index: 0x6084, sub_index: 0, value: 10000}
    - {index: 0x6085, sub_index: 0, value: 10000}
    - {index: 0x6085, sub_index: 0, value: 10000}
    - {index: 0x6040, sub_index: 0, value: 15}
    - {index: 0x607a, sub_index: 0, value: 10000}
    #- {index: 0x6040, sub_index: 0, value: 95}
    #- {index: 0x6040, sub_index: 0, value: 15}
    #- {index: 0x6040, sub_index: 0, value: 95}
  tpdo:
    1:
      enabled: false
    2:
      enabled: false
    3:
      enabled: false
    4:
      enabled: false
  rpdo: 
    1:
      enabled: true
      cob_id: "auto"
      mapping:
      - {index: 0x6040, sub_index: 0, value: 15}
    2:
      enabled: false
    3:
      enabled: false
    4:
      enabled: false
     
nodes:
  cia402_device_1:
    node_id: 1

sub1600 of rpdo1 in eds


[1600sub0]
ParameterName=Number of mapped objects in RxPDO 1
ObjectType=0x7
DataType=0x5
AccessType=rw
DefaultValue=1
LowLimit=0
HighLimit=12
PDOMapping=0
ObjFlags=0

[1600sub1]
ParameterName=1st mapped object in RxPDO 1
ObjectType=0x7
DataType=0x7
AccessType=rw
DefaultValue=0x60400010
PDOMapping=0
ObjFlags=0

Mark9999999 avatar Oct 12 '23 02:10 Mark9999999

@Mark9999999 the driver will deal with 6040 on its own. You do not need to set it. Otherwise if you want to set it use the proxy driver.

hellantos avatar Oct 13 '23 17:10 hellantos