diff --git a/.clang-format b/.clang-format
new file mode 100644
index 00000000..8d8dc719
--- /dev/null
+++ b/.clang-format
@@ -0,0 +1,9 @@
+BasedOnStyle: LLVM
+IndentWidth: 4
+AccessModifierOffset: -4
+CommentPragmas: 'NOLINT'
+PackConstructorInitializers: CurrentLine
+AlignOperands: AlignAfterOperator
+AlignTrailingComments: true
+ColumnLimit: 0
+SeparateDefinitionBlocks: Always
\ No newline at end of file
diff --git a/.clang-tidy b/.clang-tidy
new file mode 100644
index 00000000..e9f4e763
--- /dev/null
+++ b/.clang-tidy
@@ -0,0 +1,10 @@
+Checks: "bugprone-*,performance-*,readability-*,modernize-*,hicpp-*,cppcoreguidelines-*,clang-analyzer-*,-readability-braces-around-statements,-hicpp-braces-around-statements,-cppcoreguidelines-non-private-member-variables-in-classes"
+WarningsAsErrors: ''
+HeaderFilterRegex: ''
+CheckOptions:
+ - key: readability-magic-numbers.IgnoredIntegerValues
+ value: '1;'
+ - key: hicpp-signed-bitwise.IgnorePositiveIntegerLiterals
+ value: 'true'
+ - key: readability-function-cognitive-complexity.IgnoreMacros
+ value: 'true'
\ No newline at end of file
diff --git a/.clangd b/.clangd
new file mode 100644
index 00000000..538f880e
--- /dev/null
+++ b/.clangd
@@ -0,0 +1,2 @@
+Diagnostics:
+ UnusedIncludes: Strict
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index b26d66fe..76a69cc1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,6 +9,7 @@ devel/
/.vscode/*
# except recommended extensions
!/.vscode/extensions.json
+!/.vscode/settings.json
# fetched external libs
# NOTE: these may be removed in the future, tbd
@@ -20,6 +21,11 @@ src/wroboclaw
src/wrosout
src/wresponsecontrol
+# external lib destination dirs
+src/drive/lib
+src/manager/lib
+src/science/lib
+
*.pyc
src/arm/lib
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 00000000..772e1688
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,93 @@
+{
+ "clang-tidy.checks": [
+ "bugprone-*",
+ "performance-*",
+ "readability-*",
+ "modernize-*",
+ "hicpp-*",
+ "cppcoreguidelines-*",
+ "clang-analyzer-*",
+ "-readability-braces-around-statements",
+ "-hicpp-braces-around-statements",
+ "-cppcoreguidelines-non-private-member-variables-in-classes"
+ ],
+ "files.associations": {
+ "cctype": "cpp",
+ "clocale": "cpp",
+ "cmath": "cpp",
+ "csignal": "cpp",
+ "cstdarg": "cpp",
+ "cstddef": "cpp",
+ "cstdio": "cpp",
+ "cstdlib": "cpp",
+ "cstring": "cpp",
+ "ctime": "cpp",
+ "cwchar": "cpp",
+ "cwctype": "cpp",
+ "array": "cpp",
+ "atomic": "cpp",
+ "strstream": "cpp",
+ "bit": "cpp",
+ "*.tcc": "cpp",
+ "bitset": "cpp",
+ "chrono": "cpp",
+ "complex": "cpp",
+ "condition_variable": "cpp",
+ "cstdint": "cpp",
+ "deque": "cpp",
+ "forward_list": "cpp",
+ "list": "cpp",
+ "map": "cpp",
+ "set": "cpp",
+ "unordered_map": "cpp",
+ "unordered_set": "cpp",
+ "vector": "cpp",
+ "exception": "cpp",
+ "algorithm": "cpp",
+ "functional": "cpp",
+ "iterator": "cpp",
+ "memory": "cpp",
+ "memory_resource": "cpp",
+ "numeric": "cpp",
+ "optional": "cpp",
+ "random": "cpp",
+ "ratio": "cpp",
+ "string": "cpp",
+ "string_view": "cpp",
+ "system_error": "cpp",
+ "tuple": "cpp",
+ "type_traits": "cpp",
+ "utility": "cpp",
+ "hash_map": "cpp",
+ "hash_set": "cpp",
+ "fstream": "cpp",
+ "initializer_list": "cpp",
+ "iomanip": "cpp",
+ "iosfwd": "cpp",
+ "iostream": "cpp",
+ "istream": "cpp",
+ "limits": "cpp",
+ "mutex": "cpp",
+ "new": "cpp",
+ "ostream": "cpp",
+ "shared_mutex": "cpp",
+ "sstream": "cpp",
+ "stdexcept": "cpp",
+ "streambuf": "cpp",
+ "thread": "cpp",
+ "cfenv": "cpp",
+ "cinttypes": "cpp",
+ "typeindex": "cpp",
+ "typeinfo": "cpp",
+ "variant": "cpp"
+ },
+ "python.autoComplete.extraPaths": [
+ "/home/nomorenickels/Documents/WRover_Software/devel/lib/python3/dist-packages",
+ "/opt/ros/noetic/lib/python3/dist-packages"
+ ],
+ "python.analysis.extraPaths": [
+ "/home/nomorenickels/Documents/WRover_Software/devel/lib/python3/dist-packages",
+ "/opt/ros/noetic/lib/python3/dist-packages"
+ ],
+ "cmake.sourceDirectory": "${workspaceFolder}/src"
+}
\ No newline at end of file
diff --git a/assemble.py b/assemble.py
index 3ae45fe1..744ca328 100755
--- a/assemble.py
+++ b/assemble.py
@@ -165,7 +165,7 @@ def __init__(self, pkg_name):
self.pkg_name = pkg_name
def execute(self, root_dir: str, dep_dir: str, args: List[str]):
- if not BuildApt.install_list:
+ if not hasattr(BuildApt,'install_list'):
print_subsec('Caching dpkg install list...')
BuildApt.install_list = set()
with open('/var/lib/dpkg/status') as dpkg_status:
diff --git a/project.json b/project.json
index cdc081da..0bbb2578 100644
--- a/project.json
+++ b/project.json
@@ -27,6 +27,20 @@
"build": {
"provider": "noop"
}
+ },
+ {
+ "name": "moveit",
+ "build": {
+ "package": "ros-noetic-moveit",
+ "provider": "apt"
+ }
+ },
+ {
+ "name": "moveit-visual-tools",
+ "build": {
+ "package": "ros-noetic-moveit-visual-tools",
+ "provider": "apt"
+ }
}
]
}
diff --git a/reconfig_arm_urdf.sh b/reconfig_arm_urdf.sh
new file mode 100755
index 00000000..1ab412c9
--- /dev/null
+++ b/reconfig_arm_urdf.sh
@@ -0,0 +1,2 @@
+#!/bin/bash
+gnome-terminal -- roslaunch wroboarm_21 demo_test.launch
\ No newline at end of file
diff --git a/setup.zsh b/setup.zsh
new file mode 100755
index 00000000..fba8c5a9
--- /dev/null
+++ b/setup.zsh
@@ -0,0 +1,3 @@
+ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+. $ROOT_DIR/venv/bin/activate
+. $ROOT_DIR/devel/setup.zsh
diff --git a/src/wr_control_drive_arm/CMakeLists.txt b/src/wr_control_drive_arm/CMakeLists.txt
new file mode 100644
index 00000000..a122dafe
--- /dev/null
+++ b/src/wr_control_drive_arm/CMakeLists.txt
@@ -0,0 +1,227 @@
+cmake_minimum_required(VERSION 3.8)
+project(wr_control_drive_arm)
+
+# # Compile as C++11, supported in ROS Kinetic and newer
+add_compile_options(-std=c++17)
+
+# # Find catkin macros and libraries
+# # if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
+# # is used, also find other catkin packages
+find_package(catkin REQUIRED COMPONENTS
+ roscpp
+ rospy
+ actionlib
+ actionlib_msgs
+ sensor_msgs
+)
+
+# # System dependencies are found with CMake's conventions
+# find_package(Boost REQUIRED COMPONENTS system)
+
+# # Uncomment this if the package has a setup.py. This macro ensures
+# # modules and global scripts declared therein get installed
+# # See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html
+# catkin_python_setup()
+
+# ###############################################
+# # Declare ROS messages, services and actions ##
+# ###############################################
+
+# # To declare and build messages, services or actions from within this
+# # package, follow these steps:
+# # * Let MSG_DEP_SET be the set of packages whose message types you use in
+# # your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...).
+# # * In the file package.xml:
+# # * add a build_depend tag for "message_generation"
+# # * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET
+# # * If MSG_DEP_SET isn't empty the following dependency has been pulled in
+# # but can be declared for certainty nonetheless:
+# # * add a exec_depend tag for "message_runtime"
+# # * In this file (CMakeLists.txt):
+# # * add "message_generation" and every package in MSG_DEP_SET to
+# # find_package(catkin REQUIRED COMPONENTS ...)
+# # * add "message_runtime" and every package in MSG_DEP_SET to
+# # catkin_package(CATKIN_DEPENDS ...)
+# # * uncomment the add_*_files sections below as needed
+# # and list every .msg/.srv/.action file to be processed
+# # * uncomment the generate_messages entry below
+# # * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...)
+
+# # Generate messages in the 'msg' folder
+# add_message_files(
+# FILES
+# Message1.msg
+# Message2.msg
+# )
+
+# # Generate services in the 'srv' folder
+# add_service_files(
+# FILES
+# Service1.srv
+# Service2.srv
+# )
+
+# # Generate actions in the 'action' folder
+# add_action_files(
+# FILES
+# Action1.action
+# Action2.action
+# )
+
+# # Generate added messages and services with any dependencies listed here
+# generate_messages(
+# DEPENDENCIES
+# std_msgs # Or other packages containing msgs
+# )
+
+# ###############################################
+# # Declare ROS dynamic reconfigure parameters ##
+# ###############################################
+
+# # To declare and build dynamic reconfigure parameters within this
+# # package, follow these steps:
+# # * In the file package.xml:
+# # * add a build_depend and a exec_depend tag for "dynamic_reconfigure"
+# # * In this file (CMakeLists.txt):
+# # * add "dynamic_reconfigure" to
+# # find_package(catkin REQUIRED COMPONENTS ...)
+# # * uncomment the "generate_dynamic_reconfigure_options" section below
+# # and list every .cfg file to be processed
+
+# # Generate dynamic reconfigure parameters in the 'cfg' folder
+# generate_dynamic_reconfigure_options(
+# cfg/DynReconf1.cfg
+# cfg/DynReconf2.cfg
+# )
+
+# ##################################
+# # catkin specific configuration ##
+# ##################################
+# # The catkin_package macro generates cmake config files for your package
+# # Declare things to be passed to dependent projects
+# # INCLUDE_DIRS: uncomment this if your package contains header files
+# # LIBRARIES: libraries you create in this project that dependent projects also need
+# # CATKIN_DEPENDS: catkin_packages dependent projects also need
+# # DEPENDS: system dependencies of this project that dependent projects also need
+catkin_package(
+
+ # INCLUDE_DIRS include
+ # LIBRARIES wr_control_drive_science
+ # CATKIN_DEPENDS roscpp rospy
+ # DEPENDS system_lib
+)
+
+# ##########
+# # Build ##
+# ##########
+
+# # Specify additional locations of header files
+# # Your package locations should be listed before other locations
+include_directories(
+
+ # include
+ ${catkin_INCLUDE_DIRS}
+)
+
+# # Declare a C++ library
+add_library(${PROJECT_NAME}
+ src/DifferentialJointToMotorSpeedConverter.cpp
+ src/DirectJointToMotorSpeedConverter.cpp
+ src/Joint.cpp
+ src/MathUtil.cpp
+ src/Motor.cpp
+ src/SingleEncoderJointPositionMonitor.cpp
+)
+
+# # Add cmake target dependencies of the library
+# # as an example, code may need to be generated before libraries
+# # either from message generation or dynamic reconfigure
+# add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
+
+# # Declare a C++ executable
+# # With catkin_make all packages are built within a single CMake context
+# # The recommended prefix ensures that target names across packages don't collide
+# add_executable(${PROJECT_NAME}_node src/wr_control_drive_arm_node.cpp)
+add_executable(ArmControlActionServer src/ArmControlActionServer.cpp)
+target_link_libraries(ArmControlActionServer ${catkin_LIBRARIES} ${PROJECT_NAME})
+add_executable(JointStatePublisher src/JointStatePublisher.cpp)
+target_link_libraries(JointStatePublisher ${catkin_LIBRARIES} ${PROJECT_NAME})
+add_executable(testDifferential src/testDifferential.cpp)
+target_link_libraries(testDifferential ${catkin_LIBRARIES} ${PROJECT_NAME})
+
+set_property(TARGET ArmControlActionServer PROPERTY CXX_STANDARD 17)
+set_property(TARGET JointStatePublisher PROPERTY CXX_STANDARD 17)
+set_property(TARGET ArmControlActionServer PROPERTY CXX_STANDARD_REQUIRED true)
+set_property(TARGET JointStatePublisher PROPERTY CXX_STANDARD_REQUIRED true)
+set_property(TARGET testDifferential PROPERTY CXX_STANDARD 17)
+set_property(TARGET testDifferential PROPERTY CXX_STANDARD_REQUIRED true)
+
+# # Rename C++ executable without prefix
+# # The above recommended prefix causes long target names, the following renames the
+# # target back to the shorter version for ease of user use
+# # e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
+# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")
+
+# # Add cmake target dependencies of the executable
+# # same as for the library above
+# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
+
+# # Specify libraries to link a library or executable target against
+# target_link_libraries(${PROJECT_NAME}_node
+# ${catkin_LIBRARIES}
+# )
+
+# ############
+# # Install ##
+# ############
+
+# all install targets should use catkin DESTINATION variables
+# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html
+
+# # Mark executable scripts (Python etc.) for installation
+# # in contrast to setup.py, you can choose the destination
+# catkin_install_python(PROGRAMS
+# scripts/my_python_script
+# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
+# )
+
+# # Mark executables for installation
+# # See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_executables.html
+# install(TARGETS ${PROJECT_NAME}_node
+# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
+# )
+
+# # Mark libraries for installation
+# # See http://docs.ros.org/melodic/api/catkin/html/howto/format1/building_libraries.html
+# install(TARGETS ${PROJECT_NAME}
+# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
+# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
+# RUNTIME DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION}
+# )
+
+# # Mark cpp header files for installation
+# install(DIRECTORY include/${PROJECT_NAME}/
+# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}
+# FILES_MATCHING PATTERN "*.h"
+# PATTERN ".svn" EXCLUDE
+# )
+
+# # Mark other files for installation (e.g. launch and bag files, etc.)
+# install(FILES
+# # myfile1
+# # myfile2
+# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
+# )
+
+# ############
+# # Testing ##
+# ############
+
+# # Add gtest based cpp test target and link libraries
+# catkin_add_gtest(${PROJECT_NAME}-test test/test_wr_control_drive_science.cpp)
+# if(TARGET ${PROJECT_NAME}-test)
+# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME})
+# endif()
+
+# # Add folders to be run by python nosetests
+# catkin_add_nosetests(test)
diff --git a/src/wr_control_drive_arm/config/arm_motor_PID_mock.yaml b/src/wr_control_drive_arm/config/arm_motor_PID_mock.yaml
new file mode 100644
index 00000000..e59fd363
--- /dev/null
+++ b/src/wr_control_drive_arm/config/arm_motor_PID_mock.yaml
@@ -0,0 +1,55 @@
+rate: 50
+controllers:
+ - setpointTopic: "/control/arm/pid/turntable/setpoint"
+ feedbackTopic: "/control/arm/pid/turntable/feedback"
+ outputTopic: "/control/arm/pid/turntable/output"
+ P: 5
+ I: 0.5
+ D: 0
+ min: -1
+ max: 1
+
+ - setpointTopic: "/control/arm/pid/shoulder/setpoint"
+ feedbackTopic: "/control/arm/pid/shoulder/feedback"
+ outputTopic: "/control/arm/pid/shoulder/output"
+ P: 5
+ I: 0.5
+ D: 0
+ min: -1
+ max: 1
+
+ - setpointTopic: "/control/arm/pid/elbow/setpoint"
+ feedbackTopic: "/control/arm/pid/elbow/feedback"
+ outputTopic: "/control/arm/pid/elbow/output"
+ P: 5
+ I: 0.5
+ D: 0
+ min: -1
+ max: 1
+
+ - setpointTopic: "/control/arm/pid/forearmRoll/setpoint"
+ feedbackTopic: "/control/arm/pid/forearmRoll/feedback"
+ outputTopic: "/control/arm/pid/forearmRoll/output"
+ P: 5
+ I: 0.5
+ D: 0
+ min: -1
+ max: 1
+
+ - setpointTopic: "/control/arm/pid/wristPitch/setpoint"
+ feedbackTopic: "/control/arm/pid/wristPitch/feedback"
+ outputTopic: "/control/arm/pid/wristPitch/output"
+ P: 5
+ I: 0.5
+ D: 0
+ min: -1
+ max: 1
+
+ - setpointTopic: "/control/arm/pid/wristRoll/setpoint"
+ feedbackTopic: "/control/arm/pid/wristRoll/feedback"
+ outputTopic: "/control/arm/pid/wristRoll/output"
+ P: 5
+ I: 0.5
+ D: 0
+ min: -1
+ max: 1
diff --git a/src/wr_control_drive_arm/config/arm_motor_PID_real.yaml b/src/wr_control_drive_arm/config/arm_motor_PID_real.yaml
new file mode 100644
index 00000000..a0da7801
--- /dev/null
+++ b/src/wr_control_drive_arm/config/arm_motor_PID_real.yaml
@@ -0,0 +1,55 @@
+rate: 50
+controllers:
+ - setpointTopic: "/control/arm/pid/turntable/setpoint"
+ feedbackTopic: "/control/arm/pid/turntable/feedback"
+ outputTopic: "/control/arm/pid/turntable/output"
+ P: 10
+ I: 0
+ D: 0
+ min: -1
+ max: 1
+
+ - setpointTopic: "/control/arm/pid/shoulder/setpoint"
+ feedbackTopic: "/control/arm/pid/shoulder/feedback"
+ outputTopic: "/control/arm/pid/shoulder/output"
+ P: 10
+ I: 0
+ D: 0
+ min: -1
+ max: 1
+
+ - setpointTopic: "/control/arm/pid/elbow/setpoint"
+ feedbackTopic: "/control/arm/pid/elbow/feedback"
+ outputTopic: "/control/arm/pid/elbow/output"
+ P: 10
+ I: 0
+ D: 0
+ min: -1
+ max: 1
+
+ - setpointTopic: "/control/arm/pid/forearmRoll/setpoint"
+ feedbackTopic: "/control/arm/pid/forearmRoll/feedback"
+ outputTopic: "/control/arm/pid/forearmRoll/output"
+ P: 10
+ I: 0
+ D: 0
+ min: -1
+ max: 1
+
+ - setpointTopic: "/control/arm/pid/wristPitch/setpoint"
+ feedbackTopic: "/control/arm/pid/wristPitch/feedback"
+ outputTopic: "/control/arm/pid/wristPitch/output"
+ P: 10
+ I: 0
+ D: 0
+ min: -1
+ max: 1
+
+ - setpointTopic: "/control/arm/pid/wristRoll/setpoint"
+ feedbackTopic: "/control/arm/pid/wristRoll/feedback"
+ outputTopic: "/control/arm/pid/wristRoll/output"
+ P: 10
+ I: 0
+ D: 0
+ min: -1
+ max: 1
diff --git a/src/wr_control_drive_arm/config/arm_parameters_mock.yaml b/src/wr_control_drive_arm/config/arm_parameters_mock.yaml
new file mode 100644
index 00000000..a8b1e10d
--- /dev/null
+++ b/src/wr_control_drive_arm/config/arm_parameters_mock.yaml
@@ -0,0 +1,37 @@
+arm_parameters:
+ elbow:
+ encoder_parameters:
+ counts_per_rotation: 1000
+ offset: 500
+ motor_parameters:
+ gear_ratio: 1
+ forearmRoll:
+ encoder_parameters:
+ counts_per_rotation: 1000
+ offset: 500
+ motor_parameters:
+ gear_ratio: 1
+ shoulder:
+ encoder_parameters:
+ counts_per_rotation: 1000
+ offset: 500
+ motor_parameters:
+ gear_ratio: 1
+ turntable:
+ encoder_parameters:
+ counts_per_rotation: 1000
+ offset: 500
+ motor_parameters:
+ gear_ratio: 1
+ wristPitch:
+ encoder_parameters:
+ counts_per_rotation: 1000
+ offset: 500
+ motor_parameters:
+ gear_ratio: 1
+ wristRoll:
+ encoder_parameters:
+ counts_per_rotation: 1000
+ offset: 500
+ motor_parameters:
+ gear_ratio: 1
diff --git a/src/wr_control_drive_arm/config/arm_parameters_real.yaml b/src/wr_control_drive_arm/config/arm_parameters_real.yaml
new file mode 100644
index 00000000..511c0c23
--- /dev/null
+++ b/src/wr_control_drive_arm/config/arm_parameters_real.yaml
@@ -0,0 +1,37 @@
+arm_parameters:
+ elbow:
+ encoder_parameters:
+ counts_per_rotation: 1850
+ offset: 546
+ motor_parameters:
+ gear_ratio: 3
+ forearmRoll:
+ encoder_parameters:
+ counts_per_rotation: -1850
+ offset: 576
+ motor_parameters:
+ gear_ratio: 3
+ shoulder:
+ encoder_parameters:
+ counts_per_rotation: 5550
+ offset: 1281
+ motor_parameters:
+ gear_ratio: 9
+ turntable:
+ encoder_parameters:
+ counts_per_rotation: 6900 #7200
+ offset: 90
+ motor_parameters:
+ gear_ratio: 3
+ wristPitch:
+ encoder_parameters:
+ counts_per_rotation: -1850
+ offset: 886
+ motor_parameters:
+ gear_ratio: 4.875
+ wristRoll:
+ encoder_parameters:
+ counts_per_rotation: -1850
+ offset: 981
+ motor_parameters:
+ gear_ratio: 4.875
diff --git a/src/wr_control_drive_arm/launch/actionserver.launch b/src/wr_control_drive_arm/launch/actionserver.launch
new file mode 100644
index 00000000..a1c5c9e0
--- /dev/null
+++ b/src/wr_control_drive_arm/launch/actionserver.launch
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/wr_control_drive_arm/launch/jointstatepublisher.launch b/src/wr_control_drive_arm/launch/jointstatepublisher.launch
new file mode 100644
index 00000000..9b662856
--- /dev/null
+++ b/src/wr_control_drive_arm/launch/jointstatepublisher.launch
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/wr_control_drive_arm/launch/std.launch b/src/wr_control_drive_arm/launch/std.launch
new file mode 100644
index 00000000..96c2e726
--- /dev/null
+++ b/src/wr_control_drive_arm/launch/std.launch
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/src/wr_control_drive_arm/launch/testDifferential.launch b/src/wr_control_drive_arm/launch/testDifferential.launch
new file mode 100644
index 00000000..b6632b1a
--- /dev/null
+++ b/src/wr_control_drive_arm/launch/testDifferential.launch
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/src/wr_control_drive_arm/package.xml b/src/wr_control_drive_arm/package.xml
new file mode 100644
index 00000000..9b0ad0c8
--- /dev/null
+++ b/src/wr_control_drive_arm/package.xml
@@ -0,0 +1,67 @@
+
+
+ wr_control_drive_arm
+ 0.0.0
+ Control systems subsystem package that drives the arm subsystem.
+
+
+
+
+ E. Geng
+
+
+
+
+
+ TODO
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ message_runtime
+
+
+
+
+ catkin
+ roscpp
+ rospy
+ roscpp
+ rospy
+ roscpp
+ rospy
+ actionlib
+ actionlib_msgs
+ sensor_msgs
+
+
+
+
+
+
+
diff --git a/src/wr_control_drive_arm/src/ArmControlActionServer.cpp b/src/wr_control_drive_arm/src/ArmControlActionServer.cpp
new file mode 100644
index 00000000..7b3f6ae9
--- /dev/null
+++ b/src/wr_control_drive_arm/src/ArmControlActionServer.cpp
@@ -0,0 +1,361 @@
+/**
+ * @file ArmControlActionServer.cpp
+ * @author Ben Nowotny
+ * @brief The exeutable file to run the Arm Control Action Server
+ * @date 2022-12-05
+ */
+#include "DifferentialJointToMotorSpeedConverter.hpp"
+#include "DirectJointToMotorSpeedConverter.hpp"
+#include "Joint.hpp"
+#include "Motor.hpp"
+#include "RoboclawChannel.hpp"
+#include "SingleEncoderJointPositionMonitor.hpp"
+#include "XmlRpcValue.h"
+#include "ros/init.h"
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+using XmlRpc::XmlRpcValue;
+
+/**
+ * @brief Refresh rate of ros::Rate
+ */
+constexpr float CLOCK_RATE{50};
+
+constexpr double IK_WARN_RATE{1.0 / 2};
+
+constexpr double JOINT_SAFETY_MAX_SPEED{0.5};
+constexpr double JOINT_SAFETY_HOLD_SPEED{0.3};
+
+/**
+ * @brief Nessage cache size of publisher
+ */
+constexpr std::uint32_t MESSAGE_CACHE_SIZE{10};
+
+/**
+ * @brief Period between timer callback
+ */
+constexpr float TIMER_CALLBACK_DURATION{1.0 / 50.0};
+
+/**
+ * @brief Defines space for all Joint references
+ */
+std::unordered_map> namedJointMap;
+
+/**
+ * @brief Defines space for all joint position monitor references
+ */
+std::unordered_map> namedPositionMonitors;
+
+/**
+ * @brief Simplify the SimpleActionServer reference name
+ */
+using Server = actionlib::SimpleActionServer;
+
+/**
+ * @brief The service server for enabling IK
+ */
+ros::ServiceServer enableServiceServer;
+/**
+ * @brief The status of IK program
+ */
+std::atomic_bool IKEnabled{true};
+/**
+ * @brief The service client for disabling IK
+ */
+ros::ServiceClient enableServiceClient;
+
+/**
+ * @brief Perform the given action as interpreted as moving the arm joints to
+ * specified positions
+ *
+ * @param goal The goal state given
+ * @param as The Action Server this is occuring on
+ */
+void execute(const control_msgs::FollowJointTrajectoryGoalConstPtr &goal,
+ Server *server) {
+ if (!IKEnabled) {
+ server->setAborted();
+ ROS_WARN_THROTTLE( // NOLINT(hicpp-no-array-decay,hicpp,hicpp-vararg,cppcoreguidelines-pro-bounds-array-to-pointer-decay, cppcoreguidelines-pro-type-vararg)
+ IK_WARN_RATE,
+ "IK is disabled");
+ return;
+ }
+
+ for (const auto &jointName : goal->trajectory.joint_names) {
+ std::cout << jointName << "\t";
+ }
+ std::cout << std::endl;
+ for (const auto &waypoint : goal->trajectory.points) {
+ for (const auto &jointVal : waypoint.positions) {
+ std::cout << jointVal << "\t";
+ }
+ std::cout << std::endl;
+ }
+
+ for (const auto &currTargetPosition : goal->trajectory.points) {
+
+ if (!IKEnabled) {
+ server->setAborted();
+ std::cout << "Over current fault!" << std::endl;
+ return;
+ }
+
+ // Copy of the velocities received from MoveIt
+ std::vector velocityCopies{currTargetPosition.velocities};
+
+ for (uint32_t i = 0; i < goal->trajectory.joint_names.size(); ++i) {
+
+ // The joint that is currently being scaled
+ auto currJoint = goal->trajectory.joint_names.at(i);
+
+ // The position monitor whose velocity is currently being scaled
+ auto& currPosMtr = *namedPositionMonitors.at(currJoint);
+
+ // Scale by counts per rotation and gear ratio
+ velocityCopies.at(i) *= abs(currPosMtr.getCountsPerRotation()*currPosMtr.getGearRatio());
+ }
+
+ // Get the maximum velocity assigned to any joint
+ const double VELOCITY_MAX = abs(*std::max_element(
+ velocityCopies.begin(),
+ velocityCopies.end(),
+ [](double lhs, double rhs) -> bool { return abs(lhs) < abs(rhs); }));
+
+ for (uint32_t i = 0; i < goal->trajectory.joint_names.size(); ++i) {
+ // Set joint to hold speed in case the greatest velocity comes through as 0
+ auto jointVelocity{JOINT_SAFETY_HOLD_SPEED};
+
+ // Scale all velocities by the safety max speed with respect to the maximum velocity given by MoveIt
+ if (VELOCITY_MAX != 0)
+ jointVelocity = velocityCopies.at(i) / VELOCITY_MAX * JOINT_SAFETY_MAX_SPEED;
+
+ // Set the joint's velocity
+ namedJointMap.at(goal->trajectory.joint_names.at(i))->setTarget(currTargetPosition.positions.at(i), jointVelocity);
+ }
+ }
+
+ auto waypointComplete{false};
+ ros::Rate updateRate{CLOCK_RATE};
+
+ while (!waypointComplete && ros::ok() && !server->isNewGoalAvailable()) {
+
+ if (!IKEnabled) {
+ server->setAborted();
+ std::cout << "Over current fault!" << std::endl;
+ return;
+ }
+
+ waypointComplete = true;
+ for (const auto &[_, joint] : namedJointMap) {
+ waypointComplete &= joint->hasReachedTarget();
+ }
+ updateRate.sleep();
+ }
+
+ // Report preemption if it occurred
+ if (server->isNewGoalAvailable())
+ server->setPreempted();
+ // When all positions have been reached, set the current task as succeeded
+ else
+ server->setSucceeded();
+ std::cout << "Action Complete!" << std::endl;
+}
+
+auto getEncoderConfigFromParams(const XmlRpcValue ¶ms, const std::string &jointName) -> EncoderConfiguration {
+ return {.countsPerRotation = static_cast(params[jointName]["encoder_parameters"]["counts_per_rotation"]),
+ .offset = static_cast(params[jointName]["encoder_parameters"]["offset"])};
+}
+
+auto getMotorConfigFromParams(const XmlRpcValue ¶ms, const std::string &jointName) -> MotorConfiguration {
+ return {.gearRatio = static_cast(params[jointName]["motor_configurations"]["gear_ratio"])};
+}
+
+void checkOverCurrentFaults(const std::vector> &motors){
+ for(const auto& motor : motors){
+ if (motor->isOverCurrent()) {
+ IKEnabled = false;
+ std::cout << "Over current fault!" << std::endl;
+
+ for (const auto& joint : namedJointMap) {
+ joint.second->stop();
+ }
+ }
+ // TODO: arbitrate control to old arm driver
+ }
+}
+
+/**
+ * @brief The main executable method of the node. Starts the ROS node and the
+ * Action Server for processing Arm Control commands
+ *
+ * @param argc The number of program arguments
+ * @param argv The given program arguments
+ * @return int The status code on exiting the program
+ */
+auto main(int argc, char **argv) -> int {
+ std::cout << "start main" << std::endl;
+ // Initialize the current node as ArmControlSystem
+ ros::init(argc, argv, "ArmControlActionServer");
+ // Create the NodeHandle to the current ROS node
+ ros::NodeHandle n;
+ ros::NodeHandle pn{"~"};
+
+ XmlRpcValue armParams;
+ pn.getParam("arm_parameters", armParams);
+
+ // Initialize all motors with their MoveIt name, WRoboclaw initialization,
+ // and reference to the current node
+ std::cout << "init motors" << std::endl;
+
+ /**
+ * @brief The list of motors
+ */
+ std::vector> motors{};
+
+ using std::literals::string_literals::operator""s;
+
+ const auto turntableMotor{std::make_shared("aux0"s, RoboclawChannel::A, n)};
+ const auto shoulderMotor{std::make_shared("aux0"s, RoboclawChannel::B, n)};
+ const auto elbowMotor{std::make_shared("aux1"s, RoboclawChannel::A, n)};
+ const auto forearmRollMotor{std::make_shared("aux1"s, RoboclawChannel::B, n)};
+ const auto wristLeftMotor{std::make_shared("aux2"s, RoboclawChannel::A, n)};
+ const auto wristRightMotor{std::make_shared("aux2"s, RoboclawChannel::B, n)};
+
+ motors.push_back(turntableMotor);
+ motors.push_back(shoulderMotor);
+ motors.push_back(elbowMotor);
+ motors.push_back(forearmRollMotor);
+ motors.push_back(wristLeftMotor);
+ motors.push_back(wristRightMotor);
+
+ namedPositionMonitors.insert({"turntable_joint", std::make_shared(
+ "aux0"s,
+ RoboclawChannel::A,
+ getEncoderConfigFromParams(armParams, "turntable"),
+ getMotorConfigFromParams(armParams, "turntable"),
+ n)});
+
+ namedPositionMonitors.insert({"shoulder_joint", std::make_shared(
+ "aux0"s,
+ RoboclawChannel::B,
+ getEncoderConfigFromParams(armParams, "shoulder"),
+ getMotorConfigFromParams(armParams, "shoulder"),
+ n)});
+
+ namedPositionMonitors.insert({"elbowPitch_joint", std::make_shared(
+ "aux1"s,
+ RoboclawChannel::A,
+ getEncoderConfigFromParams(armParams, "elbow"),
+ getMotorConfigFromParams(armParams, "elbow"),
+ n)});
+
+ namedPositionMonitors.insert({"elbowRoll_joint", std::make_shared(
+ "aux1"s,
+ RoboclawChannel::B,
+ getEncoderConfigFromParams(armParams, "forearmRoll"),
+ getMotorConfigFromParams(armParams, "forearmRoll"),
+ n)});
+
+ namedPositionMonitors.insert({"wristPitch_joint", std::make_shared(
+ "aux2"s,
+ RoboclawChannel::A,
+ getEncoderConfigFromParams(armParams, "wristPitch"),
+ getMotorConfigFromParams(armParams, "wristPitch"),
+ n)});
+
+ namedPositionMonitors.insert({"wristRoll_link", std::make_shared(
+ "aux2"s,
+ RoboclawChannel::B,
+ getEncoderConfigFromParams(armParams, "wristRoll"),
+ getMotorConfigFromParams(armParams, "wristRoll"),
+ n)});
+
+ const auto turntableSpeedConverter{std::make_shared(turntableMotor, MotorSpeedDirection::REVERSE)};
+ const auto shoulderSpeedConverter{std::make_shared(shoulderMotor, MotorSpeedDirection::REVERSE)};
+ const auto elbowSpeedConverter{std::make_shared(elbowMotor, MotorSpeedDirection::REVERSE)};
+ const auto forearmRollSpeedConverter{std::make_shared(forearmRollMotor, MotorSpeedDirection::REVERSE)};
+ const auto differentialSpeedConverter{std::make_shared(wristLeftMotor, wristRightMotor)};
+
+ // Initialize all Joints
+
+ std::cout << "init joints" << std::endl;
+
+ namedJointMap.insert({"turntable_joint", std::make_unique(
+ "turntable"s,
+ [turntablePositionMonitor=namedPositionMonitors.at("turntable_joint")]() -> double { return (*turntablePositionMonitor)(); },
+ [turntableSpeedConverter](double speed) { (*turntableSpeedConverter)(speed); },
+ n)});
+ namedJointMap.insert({"shoulder_joint", std::make_unique(
+ "shoulder",
+ [shoulderPositionMonitor=namedPositionMonitors.at("shoulder_joint")]() -> double { return (*shoulderPositionMonitor)(); },
+ [shoulderSpeedConverter](double speed) { (*shoulderSpeedConverter)(speed); },
+ n)});
+ namedJointMap.insert({"elbowPitch_joint", std::make_unique(
+ "elbow",
+ [elbowPositionMonitor=namedPositionMonitors.at("elbowPitch_joint")]() -> double { return (*elbowPositionMonitor)(); },
+ [elbowSpeedConverter](double speed) { (*elbowSpeedConverter)(speed); },
+ n)});
+ namedJointMap.insert({"elbowRoll_joint", std::make_unique(
+ "forearmRoll",
+ [forearmRollPositionMonitor=namedPositionMonitors.at("elbowRoll_joint")]() -> double { return (*forearmRollPositionMonitor)(); },
+ [forearmRollSpeedConverter](double speed) { (*forearmRollSpeedConverter)(speed); },
+ n)});
+ namedJointMap.insert({"wristPitch_joint", std::make_unique(
+ "wristPitch",
+ [wristPitchPositionMonitor=namedPositionMonitors.at("wristPitch_joint")]() -> double { return (*wristPitchPositionMonitor)(); },
+ [converter = differentialSpeedConverter](double speed) { converter->setPitchSpeed(speed); },
+ n)});
+ namedJointMap.insert({"wristRoll_link", std::make_unique(
+ "wristRoll",
+ [wristRollPositionMonitor=namedPositionMonitors.at("wristRoll_link")]() -> double { return (*wristRollPositionMonitor)(); },
+ [converter = differentialSpeedConverter](double speed) { converter->setRollSpeed(speed); },
+ n)});
+
+ // Initialize the Action Server
+ Server server(
+ n, "/arm_controller/follow_joint_trajectory",
+ [&server](auto goal) { execute(goal, &server); }, false);
+ // Start the Action Server
+ server.start();
+ std::cout << "server started" << std::endl;
+
+ enableServiceServer = n.advertiseService(
+ "start_IK",
+ static_cast>(
+ [](std_srvs::Trigger::Request &req,
+ std_srvs::Trigger::Response &res) -> bool {
+ IKEnabled = true;
+ res.message = "Arm IK Enabled";
+ res.success = static_cast(true);
+ return true;
+ }));
+
+ enableServiceClient =
+ n.serviceClient("PLACEHOLDER_NAME");
+
+ ros::Timer currentTimer = n.createTimer(ros::Duration{TIMER_CALLBACK_DURATION}, [&motors](const ros::TimerEvent& event) { checkOverCurrentFaults(motors); });
+
+ std::cout << "entering ROS spin..." << std::endl;
+ // ROS spin for communication with other nodes
+ ros::spin();
+ // Return 0 on exit (successful exit)
+ return 0;
+}
diff --git a/src/wr_control_drive_arm/src/DifferentialJointToMotorSpeedConverter.cpp b/src/wr_control_drive_arm/src/DifferentialJointToMotorSpeedConverter.cpp
new file mode 100644
index 00000000..dfe28450
--- /dev/null
+++ b/src/wr_control_drive_arm/src/DifferentialJointToMotorSpeedConverter.cpp
@@ -0,0 +1,43 @@
+#include "DifferentialJointToMotorSpeedConverter.hpp"
+#include
+
+DifferentialJointToMotorSpeedConverter::DifferentialJointToMotorSpeedConverter(
+ std::shared_ptr leftMotor,
+ std::shared_ptr rightMotor)
+ : cachedPitchSpeed{0},
+ cachedRollSpeed{0},
+ leftMotor{std::move(leftMotor)},
+ rightMotor{std::move(rightMotor)} {}
+
+DifferentialJointToMotorSpeedConverter::DifferentialJointToMotorSpeedConverter(
+ const DifferentialJointToMotorSpeedConverter &other)
+ : cachedPitchSpeed{other.cachedPitchSpeed.load()},
+ cachedRollSpeed{other.cachedRollSpeed.load()},
+ leftMotor{other.leftMotor},
+ rightMotor{other.rightMotor} {}
+
+DifferentialJointToMotorSpeedConverter::DifferentialJointToMotorSpeedConverter(
+ DifferentialJointToMotorSpeedConverter &&other) noexcept
+ : cachedPitchSpeed{other.cachedPitchSpeed.load()},
+ cachedRollSpeed{other.cachedRollSpeed.load()},
+ leftMotor{other.leftMotor},
+ rightMotor{other.rightMotor} {}
+
+void DifferentialJointToMotorSpeedConverter::setPitchSpeed(double speed) {
+ cachedPitchSpeed = speed;
+ dispatchDifferentialSpeed();
+}
+
+void DifferentialJointToMotorSpeedConverter::setRollSpeed(double speed) {
+ cachedRollSpeed = speed;
+ dispatchDifferentialSpeed();
+}
+
+void DifferentialJointToMotorSpeedConverter::dispatchDifferentialSpeed() {
+ // const std::lock_guard guard{mutex};
+ auto m1Speed{-cachedPitchSpeed + (cachedRollSpeed * AVERAGE_SCALING_FACTOR)};
+ auto m2Speed{-cachedPitchSpeed - (cachedRollSpeed * AVERAGE_SCALING_FACTOR)};
+ leftMotor->setSpeed(m1Speed);
+ rightMotor->setSpeed(m2Speed);
+ // std::cout << "ptch: " << cachedPitchSpeed.load() << "\troll: " << cachedRollSpeed.load() << "\tlspd: " << m1Speed << "\trspd: " << m2Speed << std::endl;
+}
\ No newline at end of file
diff --git a/src/wr_control_drive_arm/src/DifferentialJointToMotorSpeedConverter.hpp b/src/wr_control_drive_arm/src/DifferentialJointToMotorSpeedConverter.hpp
new file mode 100644
index 00000000..5d096add
--- /dev/null
+++ b/src/wr_control_drive_arm/src/DifferentialJointToMotorSpeedConverter.hpp
@@ -0,0 +1,31 @@
+#ifndef DIFFERENTIAL_JOINT_TO_MOTOR_SPEED_CONVERTER_H
+#define DIFFERENTIAL_JOINT_TO_MOTOR_SPEED_CONVERTER_H
+
+#include "Motor.hpp"
+
+class DifferentialJointToMotorSpeedConverter {
+public:
+ DifferentialJointToMotorSpeedConverter(std::shared_ptr leftMotor, std::shared_ptr rightMotor);
+ void setPitchSpeed(double speed);
+ void setRollSpeed(double speed);
+
+ DifferentialJointToMotorSpeedConverter(const DifferentialJointToMotorSpeedConverter &);
+ auto operator=(const DifferentialJointToMotorSpeedConverter &) -> DifferentialJointToMotorSpeedConverter & = delete;
+ DifferentialJointToMotorSpeedConverter(DifferentialJointToMotorSpeedConverter &&) noexcept;
+ auto operator=(DifferentialJointToMotorSpeedConverter &&) -> DifferentialJointToMotorSpeedConverter & = delete;
+ ~DifferentialJointToMotorSpeedConverter() = default;
+
+private:
+ std::atomic cachedPitchSpeed;
+ std::atomic cachedRollSpeed;
+ std::recursive_mutex mutex;
+
+ const std::shared_ptr leftMotor;
+ const std::shared_ptr rightMotor;
+
+ static constexpr double AVERAGE_SCALING_FACTOR{1};
+
+ void dispatchDifferentialSpeed();
+};
+
+#endif
\ No newline at end of file
diff --git a/src/wr_control_drive_arm/src/DirectJointToMotorSpeedConverter.cpp b/src/wr_control_drive_arm/src/DirectJointToMotorSpeedConverter.cpp
new file mode 100644
index 00000000..67fd0568
--- /dev/null
+++ b/src/wr_control_drive_arm/src/DirectJointToMotorSpeedConverter.cpp
@@ -0,0 +1,18 @@
+#include "DirectJointToMotorSpeedConverter.hpp"
+
+DirectJointToMotorSpeedConverter::DirectJointToMotorSpeedConverter(std::shared_ptr outputMotor, MotorSpeedDirection direction)
+ : outputMotor{std::move(outputMotor)},
+ direction{direction} {}
+
+void DirectJointToMotorSpeedConverter::operator()(double speed) {
+ double actualSpeed{0}; // In event of enum error, stop the motor
+ switch (direction) {
+ case MotorSpeedDirection::FORWARD:
+ actualSpeed = speed;
+ break;
+ case MotorSpeedDirection::REVERSE:
+ actualSpeed = -speed;
+ break;
+ }
+ outputMotor->setSpeed(actualSpeed);
+}
diff --git a/src/wr_control_drive_arm/src/DirectJointToMotorSpeedConverter.hpp b/src/wr_control_drive_arm/src/DirectJointToMotorSpeedConverter.hpp
new file mode 100644
index 00000000..6a117435
--- /dev/null
+++ b/src/wr_control_drive_arm/src/DirectJointToMotorSpeedConverter.hpp
@@ -0,0 +1,28 @@
+#ifndef DIRECT_JOINT_TO_MOTOR_SPEED_CONVERTER_H
+#define DIRECT_JOINT_TO_MOTOR_SPEED_CONVERTER_H
+
+#include "Motor.hpp"
+#include
+
+enum class MotorSpeedDirection {
+ FORWARD,
+ REVERSE
+};
+
+class DirectJointToMotorSpeedConverter {
+public:
+ DirectJointToMotorSpeedConverter(std::shared_ptr outputMotor, MotorSpeedDirection direction);
+ void operator()(double speed);
+
+ DirectJointToMotorSpeedConverter(const DirectJointToMotorSpeedConverter &) = default;
+ auto operator=(const DirectJointToMotorSpeedConverter &) -> DirectJointToMotorSpeedConverter & = delete;
+ DirectJointToMotorSpeedConverter(DirectJointToMotorSpeedConverter &&) = default;
+ auto operator=(DirectJointToMotorSpeedConverter &&) -> DirectJointToMotorSpeedConverter & = delete;
+ ~DirectJointToMotorSpeedConverter() = default;
+
+private:
+ const MotorSpeedDirection direction;
+ const std::shared_ptr outputMotor;
+};
+
+#endif
\ No newline at end of file
diff --git a/src/wr_control_drive_arm/src/Joint.cpp b/src/wr_control_drive_arm/src/Joint.cpp
new file mode 100644
index 00000000..08b7c8a3
--- /dev/null
+++ b/src/wr_control_drive_arm/src/Joint.cpp
@@ -0,0 +1,72 @@
+#include "Joint.hpp"
+#include "MathUtil.hpp"
+#include
+#include
+
+using std::literals::string_literals::operator""s;
+using MathUtil::RADIANS_PER_ROTATION;
+
+Joint::Joint(std::string name,
+ std::function positionMonitor,
+ std::function motorSpeedDispatcher,
+ ros::NodeHandle node)
+ : name{std::move(name)},
+ positionMonitor{std::move(positionMonitor)},
+ motorSpeedDispatcher{std::move(motorSpeedDispatcher)},
+ executeMotion{false},
+ controlLoopUpdateTimer{node.createTimer(ros::Rate{FEEDBACK_UPDATE_FREQUENCY_HZ}, &Joint::onFeedbackUpdateEvent, this, false, false)},
+ controlLoopOutputSubscriber{node.subscribe("/control/arm/pid/"s + this->name + "/output", 1, &Joint::onControlLoopOutput, this)},
+ controlLoopSetpointPublisher{node.advertise("/control/arm/pid/"s + this->name + "/setpoint", 1)},
+ controlLoopFeedbackPublisher{node.advertise("/control/arm/pid/"s + this->name + "/feedback", 1)} {}
+
+void Joint::setTarget(double target, double maxSpeed) {
+ this->target = target;
+ this->maxSpeed = maxSpeed;
+ executeMotion = true;
+ controlLoopUpdateTimer.start();
+}
+
+auto Joint::hasReachedTarget() const -> bool {
+ // Copy-on-read to avoid inconsistencies on asynchronous change
+ auto currentTarget = target.load();
+
+ // Compute the upper and lower bounds in the finite encoder space
+ auto lBound = MathUtil::corrMod(currentTarget - JOINT_TOLERANCE_RADIANS, RADIANS_PER_ROTATION);
+ auto uBound = MathUtil::corrMod(currentTarget + JOINT_TOLERANCE_RADIANS, RADIANS_PER_ROTATION);
+ auto position = MathUtil::corrMod(positionMonitor(), RADIANS_PER_ROTATION);
+ // If the computed lower bound is lower than the upper bound, perform the computation normally
+ if (lBound < uBound)
+ return position <= uBound && position >= lBound;
+ // Otherwise, check if the value is outside either bound and negate the response
+ return position <= uBound || position >= lBound;
+}
+
+auto Joint::getName() const -> std::string {
+ return name;
+}
+
+void Joint::stop() {
+ executeMotion = false;
+ controlLoopUpdateTimer.stop();
+ motorSpeedDispatcher(0);
+}
+
+void Joint::onControlLoopOutput(const std_msgs::Float64::ConstPtr &msg) {
+ auto cappedPowerUnsigned{std::min(std::abs(msg->data), std::abs(maxSpeed))};
+ double cappedPower{0};
+ if (msg->data != 0)
+ cappedPower = (std::abs(msg->data) / msg->data) * cappedPowerUnsigned;
+ motorSpeedDispatcher(executeMotion ? cappedPower : 0);
+}
+
+void Joint::onFeedbackUpdateEvent(const ros::TimerEvent &event) {
+ // Setpoint
+ std_msgs::Float64 setpointMsg;
+ setpointMsg.data = target;
+ controlLoopSetpointPublisher.publish(setpointMsg);
+
+ // Feedback
+ std_msgs::Float64 feedbackMsg;
+ feedbackMsg.data = positionMonitor();
+ controlLoopFeedbackPublisher.publish(feedbackMsg);
+}
\ No newline at end of file
diff --git a/src/wr_control_drive_arm/src/Joint.hpp b/src/wr_control_drive_arm/src/Joint.hpp
new file mode 100644
index 00000000..659a4f98
--- /dev/null
+++ b/src/wr_control_drive_arm/src/Joint.hpp
@@ -0,0 +1,39 @@
+#ifndef JOINT_H
+#define JOINT_H
+
+#include "ros/publisher.h"
+#include "ros/subscriber.h"
+#include "ros/timer.h"
+#include "std_msgs/Float64.h"
+#include
+#include
+
+class Joint {
+public:
+ explicit Joint(std::string name, std::function positionMonitor, std::function motorSpeedDispatcher, ros::NodeHandle node);
+ void setTarget(double target, double maxSpeed);
+ [[nodiscard]] auto hasReachedTarget() const -> bool;
+ [[nodiscard]] auto getName() const -> std::string;
+ void stop();
+
+private:
+ static constexpr double FEEDBACK_UPDATE_FREQUENCY_HZ{50};
+ static constexpr double JOINT_TOLERANCE_RADIANS{3 * M_PI / 180};
+
+ const std::string name;
+ const std::function positionMonitor;
+ const std::function motorSpeedDispatcher;
+
+ void onControlLoopOutput(const std_msgs::Float64::ConstPtr &msg);
+ void onFeedbackUpdateEvent(const ros::TimerEvent &event);
+
+ std::atomic target;
+ std::atomic maxSpeed;
+ std::atomic executeMotion;
+ ros::Timer controlLoopUpdateTimer;
+ ros::Subscriber controlLoopOutputSubscriber;
+ ros::Publisher controlLoopSetpointPublisher;
+ ros::Publisher controlLoopFeedbackPublisher;
+};
+
+#endif
\ No newline at end of file
diff --git a/src/wr_control_drive_arm/src/JointStatePublisher.cpp b/src/wr_control_drive_arm/src/JointStatePublisher.cpp
new file mode 100644
index 00000000..3a602563
--- /dev/null
+++ b/src/wr_control_drive_arm/src/JointStatePublisher.cpp
@@ -0,0 +1,140 @@
+/**
+ * @file JointStatePublisher.cpp
+ * @author Ben Nowotny
+ * @author Jack Zautner
+ * @brief The executable file to run the joint state publisher
+ * @date 2022-12-05
+ */
+
+#include "SingleEncoderJointPositionMonitor.hpp"
+#include "XmlRpcValue.h"
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+using XmlRpc::XmlRpcValue;
+
+/**
+ * @brief Nessage cache size of publisher
+ */
+constexpr std::uint32_t MESSAGE_CACHE_SIZE = 1;
+
+/**
+ * @brief Period between timer callback
+ */
+constexpr float TIMER_CALLBACK_DURATION = 1.0 / 50.0;
+
+/**
+ * @brief The joint state publisher for MoveIt
+ */
+ros::Publisher jointStatePublisher;
+
+std::map namedJointPositionMonitors;
+
+void publishJointStates(const ros::TimerEvent &event) {
+ std::vector names;
+ std::vector positions;
+ sensor_msgs::JointState js_msg;
+
+ for (auto &[name, monitor] : namedJointPositionMonitors) {
+ names.push_back(name);
+ positions.push_back(monitor());
+ }
+
+ js_msg.name = names;
+ js_msg.position = positions;
+ js_msg.header.stamp = ros::Time::now();
+ // Publish the Joint State message
+ jointStatePublisher.publish(js_msg);
+}
+
+auto getEncoderConfigFromParams(const XmlRpcValue ¶ms, const std::string &jointName) -> EncoderConfiguration {
+ return {.countsPerRotation = static_cast(params[jointName]["encoder_parameters"]["counts_per_rotation"]),
+ .offset = static_cast(params[jointName]["encoder_parameters"]["offset"])};
+}
+
+auto getMotorConfigFromParams(const XmlRpcValue ¶ms, const std::string &jointName) -> MotorConfiguration {
+ return {.gearRatio = static_cast(params[jointName]["motor_configurations"]["gear_ratio"])};
+}
+
+/**
+ * @brief The main executable method of the node. Starts the ROS node
+ *
+ * @param argc The number of program arguments
+ * @param argv The given program arguments
+ * @return int The status code on exiting the program
+ */
+auto main(int argc, char **argv) -> int {
+
+ std::cout << "start main" << std::endl;
+ // // Initialize the current node as JointStatePublisherApplication
+ ros::init(argc, argv, "JointStatePublisher");
+ // // Create the NodeHandle to the current ROS node
+ ros::NodeHandle n;
+ ros::NodeHandle pn{"~"};
+
+ XmlRpcValue armParams;
+ pn.getParam("arm_parameters", armParams);
+
+ namedJointPositionMonitors.try_emplace("elbowPitch_joint",
+
+ "aux1",
+ RoboclawChannel::A,
+ getEncoderConfigFromParams(armParams, "elbow"),
+ getMotorConfigFromParams(armParams, "elbow"),
+ n);
+ namedJointPositionMonitors.try_emplace("elbowRoll_joint",
+
+ "aux1",
+ RoboclawChannel::B,
+ getEncoderConfigFromParams(armParams, "forearmRoll"),
+ getMotorConfigFromParams(armParams, "forearmRoll"),
+ n);
+ namedJointPositionMonitors.try_emplace("shoulder_joint",
+
+ "aux0",
+ RoboclawChannel::B,
+ getEncoderConfigFromParams(armParams, "shoulder"),
+ getMotorConfigFromParams(armParams, "shoulder"),
+ n);
+ namedJointPositionMonitors.try_emplace("turntable_joint",
+
+ "aux0",
+ RoboclawChannel::A,
+ getEncoderConfigFromParams(armParams, "turntable"),
+ getMotorConfigFromParams(armParams, "turntable"),
+ n);
+ namedJointPositionMonitors.try_emplace("wristPitch_joint",
+
+ "aux2",
+ RoboclawChannel::A,
+ getEncoderConfigFromParams(armParams, "wristPitch"),
+ getMotorConfigFromParams(armParams, "wristPitch"),
+ n);
+ namedJointPositionMonitors.try_emplace("wristRoll_link",
+ "aux2",
+ RoboclawChannel::B,
+ getEncoderConfigFromParams(armParams, "wristRoll"),
+ getMotorConfigFromParams(armParams, "wristRoll"),
+ n);
+
+ // Initialize the Joint State Data Publisher
+ jointStatePublisher = n.advertise("/joint_states", MESSAGE_CACHE_SIZE);
+
+ // Timer that will call publishJointStates periodically
+ ros::Timer timer = n.createTimer(ros::Duration(TIMER_CALLBACK_DURATION), publishJointStates);
+
+ // Enter ROS spin
+ ros::spin();
+
+ return 0;
+}
\ No newline at end of file
diff --git a/src/wr_control_drive_arm/src/MathUtil.cpp b/src/wr_control_drive_arm/src/MathUtil.cpp
new file mode 100644
index 00000000..682b0bad
--- /dev/null
+++ b/src/wr_control_drive_arm/src/MathUtil.cpp
@@ -0,0 +1,8 @@
+#include "MathUtil.hpp"
+#include
+
+namespace MathUtil {
+auto corrMod(double dividend, double divisor) -> double {
+ return std::fmod(std::fmod(dividend, divisor) + divisor, std::abs(divisor));
+}
+} // namespace MathUtil
\ No newline at end of file
diff --git a/src/wr_control_drive_arm/src/MathUtil.hpp b/src/wr_control_drive_arm/src/MathUtil.hpp
new file mode 100644
index 00000000..07e7b0d0
--- /dev/null
+++ b/src/wr_control_drive_arm/src/MathUtil.hpp
@@ -0,0 +1,11 @@
+#ifndef MATH_UTIL_H
+#define MATH_UTIL_H
+
+#include
+
+namespace MathUtil {
+auto corrMod(double dividend, double divisor) -> double;
+static constexpr double RADIANS_PER_ROTATION{2 * M_PI};
+} // namespace MathUtil
+
+#endif
\ No newline at end of file
diff --git a/src/wr_control_drive_arm/src/Motor.cpp b/src/wr_control_drive_arm/src/Motor.cpp
new file mode 100644
index 00000000..bc96cd0f
--- /dev/null
+++ b/src/wr_control_drive_arm/src/Motor.cpp
@@ -0,0 +1,45 @@
+#include "Motor.hpp"
+#include "RoboclawChannel.hpp"
+#include "ros/node_handle.h"
+#include "ros/time.h"
+#include "std_msgs/Int16.h"
+#include
+#include
+#include
+#include
+
+using std::literals::string_literals::operator""s;
+
+Motor::Motor(const std::string &controllerName, RoboclawChannel channel, ros::NodeHandle node)
+ : motorSpeedPublisher{
+ node.advertise(
+ "/hsi/roboclaw/"s + controllerName + "/cmd/"s + (channel == RoboclawChannel::A ? "left" : "right"),
+ 1)},
+ currentOverLimitSubscriber{
+ node.subscribe("/hsi/roboclaw/"s + controllerName + "/curr/over_lim/" + (channel == RoboclawChannel::A ? "left" : "right"),
+ OVER_CURRENT_QUEUE_SIZE, &Motor::setCurrentStatus, this)} {}
+
+void Motor::setSpeed(double speed) {
+ if (abs(speed) > 1)
+ throw std::invalid_argument("speed must be between -1 and 1");
+
+ std_msgs::Int16 powerMsg{};
+ powerMsg.data = static_cast(speed * INT16_MAX);
+ motorSpeedPublisher.publish(powerMsg);
+}
+
+void Motor::setCurrentStatus(const std_msgs::Bool::ConstPtr &msg) {
+ bool overCurrent = static_cast(msg->data);
+ if (overCurrent && !this->beginStallTime.has_value()) {
+ this->beginStallTime = ros::Time::now();
+ } else if (!overCurrent && this->beginStallTime.has_value()) {
+ this->beginStallTime = std::nullopt;
+ }
+}
+
+auto Motor::isOverCurrent() const -> bool {
+ if (this->beginStallTime.has_value()) {
+ return static_cast((ros::Time::now() - this->beginStallTime.value()).toSec() >= STALL_THRESHOLD_TIME);
+ }
+ return false;
+}
diff --git a/src/wr_control_drive_arm/src/Motor.hpp b/src/wr_control_drive_arm/src/Motor.hpp
new file mode 100644
index 00000000..ff3a6174
--- /dev/null
+++ b/src/wr_control_drive_arm/src/Motor.hpp
@@ -0,0 +1,30 @@
+#ifndef MOTOR_H
+#define MOTOR_H
+
+#include "RoboclawChannel.hpp"
+#include "ros/publisher.h"
+#include "ros/subscriber.h"
+#include "std_msgs/Bool.h"
+#include
+#include
+
+class Motor {
+public:
+ Motor(const std::string &controllerName, RoboclawChannel channel, ros::NodeHandle node);
+ void setSpeed(double speed);
+ auto isOverCurrent() const -> bool;
+
+private:
+
+ static constexpr float STALL_THRESHOLD_TIME{0.5F};
+ static constexpr int OVER_CURRENT_QUEUE_SIZE{25};
+
+
+ void setCurrentStatus(const std_msgs::Bool::ConstPtr &msg);
+
+ ros::Publisher motorSpeedPublisher;
+ ros::Subscriber currentOverLimitSubscriber;
+ std::optional beginStallTime;
+};
+
+#endif
diff --git a/src/wr_control_drive_arm/src/RoboclawChannel.hpp b/src/wr_control_drive_arm/src/RoboclawChannel.hpp
new file mode 100644
index 00000000..fbf7de00
--- /dev/null
+++ b/src/wr_control_drive_arm/src/RoboclawChannel.hpp
@@ -0,0 +1,6 @@
+#ifndef ROBOCLAW_CHANNEL_H
+#define ROBOCLAW_CHANNEL_H
+
+enum class RoboclawChannel { A, B };
+
+#endif
\ No newline at end of file
diff --git a/src/wr_control_drive_arm/src/SingleEncoderJointPositionMonitor.cpp b/src/wr_control_drive_arm/src/SingleEncoderJointPositionMonitor.cpp
new file mode 100644
index 00000000..d657f1c8
--- /dev/null
+++ b/src/wr_control_drive_arm/src/SingleEncoderJointPositionMonitor.cpp
@@ -0,0 +1,59 @@
+#include "SingleEncoderJointPositionMonitor.hpp"
+#include "MathUtil.hpp"
+#include "RoboclawChannel.hpp"
+#include "ros/node_handle.h"
+#include
+
+using std::literals::string_literals::operator""s;
+using MathUtil::RADIANS_PER_ROTATION;
+
+SingleEncoderJointPositionMonitor::SingleEncoderJointPositionMonitor(
+ const std::string &controllerName,
+ RoboclawChannel channel,
+ EncoderConfiguration eConfig,
+ MotorConfiguration mConfig,
+ ros::NodeHandle node)
+ : countsPerRotation{eConfig.countsPerRotation},
+ offset{eConfig.offset},
+ gearRatio{mConfig.gearRatio},
+ position{0},
+ encoderSubscriber{
+ std::make_shared(node.subscribe(
+ "/hsi/roboclaw/"s + controllerName + "/enc/" + (channel == RoboclawChannel::A ? "left" : "right"),
+ 1,
+ &SingleEncoderJointPositionMonitor::onEncoderReceived,
+ this))} {}
+
+SingleEncoderJointPositionMonitor::SingleEncoderJointPositionMonitor(
+ const SingleEncoderJointPositionMonitor &other)
+ : countsPerRotation(other.countsPerRotation),
+ offset(other.offset),
+ gearRatio{other.getGearRatio()},
+ encoderSubscriber{other.encoderSubscriber},
+ position{other.position.load()} {}
+
+SingleEncoderJointPositionMonitor::SingleEncoderJointPositionMonitor(
+ SingleEncoderJointPositionMonitor &&other) noexcept
+ : countsPerRotation(other.countsPerRotation),
+ offset(other.offset),
+ gearRatio(other.getGearRatio()),
+ encoderSubscriber{std::move(other.encoderSubscriber)},
+ position{other.position.load()} {}
+
+auto SingleEncoderJointPositionMonitor::operator()() -> double {
+ return position;
+}
+
+void SingleEncoderJointPositionMonitor::onEncoderReceived(const std_msgs::UInt32::ConstPtr &msg) {
+ auto enc = static_cast(msg->data);
+ auto rotations = MathUtil::corrMod(enc - offset, countsPerRotation) / countsPerRotation;
+ position = MathUtil::corrMod(rotations * RADIANS_PER_ROTATION + M_PI, RADIANS_PER_ROTATION) - M_PI;
+}
+
+auto SingleEncoderJointPositionMonitor::getCountsPerRotation() const -> int32_t {
+ return this->countsPerRotation;
+}
+
+auto SingleEncoderJointPositionMonitor::getGearRatio() const -> double {
+ return this->gearRatio;
+}
\ No newline at end of file
diff --git a/src/wr_control_drive_arm/src/SingleEncoderJointPositionMonitor.hpp b/src/wr_control_drive_arm/src/SingleEncoderJointPositionMonitor.hpp
new file mode 100644
index 00000000..e57437b1
--- /dev/null
+++ b/src/wr_control_drive_arm/src/SingleEncoderJointPositionMonitor.hpp
@@ -0,0 +1,44 @@
+#ifndef SINGLE_ENCODER_JOINT_POSITION_MONITOR_H
+#define SINGLE_ENCODER_JOINT_POSITION_MONITOR_H
+
+#include "RoboclawChannel.hpp"
+#include
+#include
+#include
+#include
+#include
+
+struct EncoderConfiguration {
+ int32_t countsPerRotation;
+ int32_t offset;
+};
+
+struct MotorConfiguration {
+ double gearRatio;
+};
+
+class SingleEncoderJointPositionMonitor {
+public:
+ SingleEncoderJointPositionMonitor(const std::string &controllerName, RoboclawChannel channel, EncoderConfiguration eConfig, MotorConfiguration mConfig, ros::NodeHandle node);
+ auto operator()() -> double;
+
+ SingleEncoderJointPositionMonitor(const SingleEncoderJointPositionMonitor &);
+ auto operator=(const SingleEncoderJointPositionMonitor &) -> SingleEncoderJointPositionMonitor & = delete;
+ SingleEncoderJointPositionMonitor(SingleEncoderJointPositionMonitor &&) noexcept;
+ auto operator=(SingleEncoderJointPositionMonitor &&) -> SingleEncoderJointPositionMonitor & = delete;
+ ~SingleEncoderJointPositionMonitor() = default;
+
+ [[nodiscard]] auto getCountsPerRotation() const -> int32_t;
+ [[nodiscard]] auto getGearRatio() const -> double;
+
+private:
+ void onEncoderReceived(const std_msgs::UInt32::ConstPtr &msg);
+
+ std::atomic position;
+ std::shared_ptr encoderSubscriber;
+ const int32_t countsPerRotation;
+ const int32_t offset;
+ const double gearRatio;
+};
+
+#endif
\ No newline at end of file
diff --git a/src/wr_control_drive_arm/src/testDifferential.cpp b/src/wr_control_drive_arm/src/testDifferential.cpp
new file mode 100644
index 00000000..5b2d31a6
--- /dev/null
+++ b/src/wr_control_drive_arm/src/testDifferential.cpp
@@ -0,0 +1,26 @@
+#include
+#include "Motor.hpp"
+#include "DifferentialJointToMotorSpeedConverter.hpp"
+#include "ros/init.h"
+#include
+
+auto main(int32_t argc, char** argv) -> int32_t{
+ ros::init(argc, argv, "testNode");
+
+ ros::NodeHandle n{};
+ using std::literals::string_literals::operator""s;
+
+ const auto wristLeftMotor{std::make_shared("aux2"s, RoboclawChannel::A, n)};
+ const auto wristRightMotor{std::make_shared("aux2"s, RoboclawChannel::B, n)};
+
+ const auto differentialSpeedConverter{std::make_shared(wristLeftMotor, wristRightMotor)};
+
+ ros::Rate loopRate{50};
+ while(ros::ok()){
+ differentialSpeedConverter->setPitchSpeed(0.3);
+ differentialSpeedConverter->setRollSpeed(0);
+ loopRate.sleep();
+ }
+
+ return 0;
+}
\ No newline at end of file
diff --git a/src/wr_control_drive_arm/structure.wsd b/src/wr_control_drive_arm/structure.wsd
new file mode 100755
index 00000000..ef4f1a40
--- /dev/null
+++ b/src/wr_control_drive_arm/structure.wsd
@@ -0,0 +1,99 @@
+@startuml Structure
+enum RoboclawChannel{
+ + A
+ + B
+}
+
+note right of RoboclawChannel::A
+ Analogous to 'LEFT'
+end note
+
+note right of RoboclawChannel::B
+ Analogous to 'RIGHT'
+end note
+
+class Motor{
+ - powerPublisher : ros::Publisher
+
+ + Motor(string controllerName, RoboclawChannel channel)
+ + void setPower(double power)
+ + bool getOverCurrentStatus()
+}
+
+Motor --> RoboclawChannel
+
+class EncoderJointPositionMonitor {
+ - encoderSubscriber : ros::Subscriber
+ - countsPerRotation : const int
+ - offset : const int
+
+ + EncoderJointPositionMonitor(string controllerName, RoboclawChannel channel, int countsPerRotation, int offset)
+ - void encoderCallback(std_msgs::Int32)
+}
+
+EncoderJointPositionMonitor --> RoboclawChannel
+
+class DirectJointToMotorSpeedConverter {
+ + DirectJointToMotorSpeedConverter(Motor motor)
+ + void operator()(double)
+}
+
+DirectJointToMotorSpeedConverter "1" --> "1" Motor
+
+class DifferentialJointToMotorSpeedConverter {
+ + void setPitchSpeed(double)
+ + void setRollSpeed(double)
+}
+
+DifferentialJointToMotorSpeedConverter "1" --> "2" Motor
+
+class Joint{
+ + Joint(String name)
+ + void setTarget(double target)
+ + bool hasReachedTarget()
+ + void stop()
+}
+
+Joint --> EncoderJointPositionMonitor : via function parameter
+<> speedConversion
+Joint --> speedConversion : via function parameter
+speedConversion --> DirectJointToMotorSpeedConverter : as functor
+speedConversion --> DifferentialJointToMotorSpeedConverter::setPitchSpeed : as function pointer
+speedConversion --> DifferentialJointToMotorSpeedConverter::setRollSpeed : as function pointer
+
+@enduml
+
+@startuml seq
+ participant ROS
+ MoveIt -> ActionServer : Sends a motion path
+ loop For each waypoint in the motion
+ loop For each joint in the arm
+ ActionServer -> Joint : Set the next setpoint per joint
+ Joint -> Joint : Start the execution loop
+ end
+ loop While some joint has not reached its setpoint
+ note over ActionServer : Wait
+ ROS -> Joint : Kicks off Timer Event
+ activate Joint
+ Joint -> "PID Loop" : Feed the setpoint
+ Joint -> JointPositionMonitor : Ask for the joint position
+ activate JointPositionMonitor
+ JointPositionMonitor --> Joint : Sends back joint position
+ deactivate JointPositionMonitor
+ Joint -> "PID Loop" : Feed the feedback
+ deactivate Joint
+
+ note left of Joint : Happens asynchonously
+ "PID Loop" -> Joint : New output available
+ activate Joint
+ Joint -> JointToMotorSpeedConverter : Dispatch new speed
+ activate JointToMotorSpeedConverter
+ JointToMotorSpeedConverter -> JointToMotorSpeedConverter : Determine hardware speeds
+ JointToMotorSpeedConverter -> "Motor(s)" : Dispatch hardware speeds
+ deactivate JointToMotorSpeedConverter
+ deactivate Joint
+ end
+ end
+ ActionServer -> MoveIt : Report motion as complete
+
+@enduml
diff --git a/src/wr_control_drive_science/CMakeLists.txt b/src/wr_control_drive_science/CMakeLists.txt
index 29768673..529f3eab 100644
--- a/src/wr_control_drive_science/CMakeLists.txt
+++ b/src/wr_control_drive_science/CMakeLists.txt
@@ -13,6 +13,10 @@ find_package(catkin REQUIRED COMPONENTS
rospy
)
+
+find_package(Boost REQUIRED COMPONENTS python)
+find_package(PythonLibs 2.7 REQUIRED)
+
## System dependencies are found with CMake's conventions
# find_package(Boost REQUIRED COMPONENTS system)
@@ -118,6 +122,8 @@ catkin_package(
include_directories(
# include
${catkin_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIRS}
+ ${PYTHON_INCLUDE_DIRS}
)
## Declare a C++ library
@@ -125,6 +131,17 @@ include_directories(
# src/${PROJECT_NAME}/wr_control_drive_science.cpp
# )
+# add_library(testModule
+# main.cpp
+# )
+
+# target_link_libraries(testModule ${catkin_LIBRARIES} ${Boost_LIBRARIES})
+
+# set_target_properties(testModule PROPERTIES
+# PREFIX ""
+# LIBRARY_OUTPUT_DIRECTORY ${CATKIN_DEVEL_PREFIX}/${CATKIN_PACKAGE_PYTHON_DESTINATION}
+# )
+
## Add cmake target dependencies of the library
## as an example, code may need to be generated before libraries
## either from message generation or dynamic reconfigure
diff --git a/src/wr_control_drive_science/package.xml b/src/wr_control_drive_science/package.xml
index de1573a2..f2d77f2c 100644
--- a/src/wr_control_drive_science/package.xml
+++ b/src/wr_control_drive_science/package.xml
@@ -43,7 +43,7 @@
-
+ message_runtime
diff --git a/src/wr_entry_point/launch/comp/comp_arm.launch b/src/wr_entry_point/launch/comp/comp_arm.launch
index 8f356b47..1d537d63 100644
--- a/src/wr_entry_point/launch/comp/comp_arm.launch
+++ b/src/wr_entry_point/launch/comp/comp_arm.launch
@@ -3,7 +3,7 @@
-
+
diff --git a/src/wr_entry_point/launch/comp/comp_init.launch b/src/wr_entry_point/launch/comp/comp_init.launch
index ea3bb01d..36f80295 100644
--- a/src/wr_entry_point/launch/comp/comp_init.launch
+++ b/src/wr_entry_point/launch/comp/comp_init.launch
@@ -4,9 +4,9 @@
-
+
-
+
diff --git a/src/wr_entry_point/launch/test/mock_arm.launch b/src/wr_entry_point/launch/test/mock_arm.launch
new file mode 100644
index 00000000..6dfbb8b1
--- /dev/null
+++ b/src/wr_entry_point/launch/test/mock_arm.launch
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/wr_entry_point/launch/test/test_arm.launch b/src/wr_entry_point/launch/test/test_arm.launch
index d834e3de..26e9a216 100644
--- a/src/wr_entry_point/launch/test/test_arm.launch
+++ b/src/wr_entry_point/launch/test/test_arm.launch
@@ -1,6 +1,8 @@
+
+
@@ -10,5 +12,9 @@
-
+
+
+
+
+
diff --git a/src/wr_entry_point/launch/test/test_controller.launch b/src/wr_entry_point/launch/test/test_controller.launch
new file mode 100644
index 00000000..281ea3cf
--- /dev/null
+++ b/src/wr_entry_point/launch/test/test_controller.launch
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/wr_entry_point/launch/test/vis_arm.launch b/src/wr_entry_point/launch/test/vis_arm.launch
new file mode 100644
index 00000000..abc1bf63
--- /dev/null
+++ b/src/wr_entry_point/launch/test/vis_arm.launch
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/wr_entry_point/launch/test_arm_OLD.launch b/src/wr_entry_point/launch/test_arm_OLD.launch
new file mode 100644
index 00000000..7ae0bf5c
--- /dev/null
+++ b/src/wr_entry_point/launch/test_arm_OLD.launch
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/wr_hsi_roboclaw/config/roboclaw_enc.yaml b/src/wr_hsi_roboclaw/config/roboclaw_enc.yaml
index 11268a6f..03b11c22 100644
--- a/src/wr_hsi_roboclaw/config/roboclaw_enc.yaml
+++ b/src/wr_hsi_roboclaw/config/roboclaw_enc.yaml
@@ -6,37 +6,45 @@ claws:
address: 0x80
enc_left:
enabled: true
- max_speed: 300000000 # TODO probably don't actually need all these encoders
+ max_speed: 100 # TODO probably don't actually need all these encoders
+ offset: 500
enc_right:
enabled: true
- max_speed: 300000000
+ max_speed: 100
+ offset: 500
aux1: # arm elbow/forearm, science ?
topic: '/hsi/roboclaw/aux1'
address: 0x81
enc_left:
enabled: true
- max_speed: 300000000
+ max_speed: 100
+ offset: 500
enc_right:
enabled: true
- max_speed: 300000000
+ max_speed: 100
+ offset: 500
aux2: # arm wrist, science ?
topic: '/hsi/roboclaw/aux2'
address: 0x82
enc_left:
enabled: true
- max_speed: 300000000
+ max_speed: 100
+ offset: 500
enc_right:
enabled: true
- max_speed: 300000000
+ max_speed: 100
+ offset: 500
aux3: # arm manip, science ?
topic: '/hsi/roboclaw/aux3'
address: 0x83
enc_left:
enabled: true
- max_speed: 300000000
+ max_speed: 100
+ offset: 500
enc_right:
enabled: true
- max_speed: 300000000
+ max_speed: 100
+ offset: 500
drive: # drive train
topic: '/hsi/roboclaw/drive'
address: 0x84
diff --git a/src/wr_hsi_roboclaw/launch/roboclaw_mock.launch b/src/wr_hsi_roboclaw/launch/roboclaw_mock.launch
index 396b5b53..6fea09ed 100644
--- a/src/wr_hsi_roboclaw/launch/roboclaw_mock.launch
+++ b/src/wr_hsi_roboclaw/launch/roboclaw_mock.launch
@@ -1,6 +1,6 @@
-
+
diff --git a/src/wr_logic_teleop_arm/CMakeLists.txt b/src/wr_logic_teleop_arm/CMakeLists.txt
index c061b7c5..746f428e 100644
--- a/src/wr_logic_teleop_arm/CMakeLists.txt
+++ b/src/wr_logic_teleop_arm/CMakeLists.txt
@@ -10,6 +10,10 @@ project(wr_logic_teleop_arm)
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
+ moveit_core
+ moveit_ros_planning_interface
+ moveit_msgs
+ moveit_visual_tools
)
## System dependencies are found with CMake's conventions
@@ -117,6 +121,7 @@ catkin_package(
include_directories(
# include
${catkin_INCLUDE_DIRS}
+ ${Boost_INCLUDE_DIR}
)
## Declare a C++ library
@@ -133,6 +138,8 @@ include_directories(
## With catkin_make all packages are built within a single CMake context
## The recommended prefix ensures that target names across packages don't collide
# add_executable(${PROJECT_NAME}_node src/wr_logic_teleop_arm_node.cpp)
+add_executable(ArmTeleopLogic src/ArmTeleopLogic.cpp)
+target_link_libraries(ArmTeleopLogic ${catkin_LIBRARIES} ${Boost_LIBRARIES})
## Rename C++ executable without prefix
## The above recommended prefix causes long target names, the following renames the
diff --git a/src/wr_logic_teleop_arm/launch/std.launch b/src/wr_logic_teleop_arm/launch/std.launch
new file mode 100644
index 00000000..a5e0beaa
--- /dev/null
+++ b/src/wr_logic_teleop_arm/launch/std.launch
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/src/wr_logic_teleop_arm/package.xml b/src/wr_logic_teleop_arm/package.xml
index c2fc4d95..d8351162 100644
--- a/src/wr_logic_teleop_arm/package.xml
+++ b/src/wr_logic_teleop_arm/package.xml
@@ -55,6 +55,10 @@
rospy
roscpp
rospy
+ moveit_core
+ moveit_ros_planning_interface
+ moveit_msgs
+ moveit_visual_tools
diff --git a/src/wr_logic_teleop_arm/src/ArmTeleopLogic.cpp b/src/wr_logic_teleop_arm/src/ArmTeleopLogic.cpp
new file mode 100644
index 00000000..f3a31eae
--- /dev/null
+++ b/src/wr_logic_teleop_arm/src/ArmTeleopLogic.cpp
@@ -0,0 +1,233 @@
+#include "boost/function.hpp"
+#include "geometry_msgs/PoseStamped.h"
+#include "geometry_msgs/Quaternion.h"
+#include "moveit_msgs/RobotTrajectory.h"
+#include "ros/rate.h"
+#include "ros/subscriber.h"
+#include "std_msgs/Bool.h"
+#include "std_msgs/Float32.h"
+#include "tf2/LinearMath/Quaternion.h"
+#include "tf2/LinearMath/Vector3.h"
+#include "tf2_geometry_msgs/tf2_geometry_msgs.h"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+using Std_Bool = const std_msgs::BoolConstPtr &;
+using Std_Float32 = const std_msgs::Float32ConstPtr &;
+
+std::atomic_bool isNewPath{true};
+const tf2::Quaternion WORLD_OFFSET{0, sin(M_PI / 2), 0, cos(M_PI / 2)};
+
+auto updateTarget(float x_pos, float y_pos, float z_pos, tf2::Quaternion orientation, ros::Publisher &pub) -> void {
+ geometry_msgs::PoseStamped p{};
+ p.pose.position.x = x_pos;
+ p.pose.position.y = y_pos;
+ p.pose.position.z = z_pos;
+ auto outOrientation = /* tf2::Quaternion(0,sin(M_PI/4), 0, cos(M_PI/4)) * */ orientation;
+ p.pose.orientation = tf2::toMsg(outOrientation);
+ p.header.frame_id = "base_link";
+ pub.publish(p);
+}
+
+auto main(int argc, char **argv) -> int {
+ ros::init(argc, argv, "ArmTeleopLogic");
+ ros::AsyncSpinner spin(1);
+ spin.start();
+ ros::NodeHandle np("~");
+
+ constexpr float PLANNING_TIME = 0.05;
+ constexpr float CLOCK_RATE = 2;
+ constexpr uint32_t MESSAGE_QUEUE_LENGTH = 1000;
+ constexpr float TRIGGER_PRESSED = 0.5;
+ constexpr float JOYSTICK_DEADBAND = 0.1;
+ constexpr float MINIMUM_PATH_ACCURACY = 0.0;
+
+ constexpr float STEP_X = 0.003;
+ constexpr float STEP_Y = 0.003;
+ constexpr float STEP_Z = 0.003;
+
+ constexpr float HOME_X = 0.0;
+ constexpr float HOME_Y = -0.7;
+ constexpr float HOME_Z = 0.2;
+
+ float accel = 1.0;
+ float deaccel = 1.0;
+ float step_mult = 1.0;
+ float x_pos = HOME_X;
+ float y_pos = HOME_Y;
+ float z_pos = HOME_Z;
+
+ const tf2::Quaternion homeOrientation{sin(M_PI / 4), 0, 0, cos(-M_PI / 4)};
+ tf2::Quaternion orientation{homeOrientation};
+
+ const tf2::Quaternion SPIN_X{sin(2 * M_PI / 1000), 0, 0, cos(2 * M_PI / 1000)};
+ const tf2::Quaternion SPIN_Y{0, sin(2 * M_PI / 1000), 0, cos(2 * M_PI / 1000)};
+ const tf2::Quaternion SPIN_Z{0, 0, sin(2 * M_PI / 1000), cos(2 * M_PI / 1000)};
+
+ moveit::planning_interface::MoveGroupInterface move("arm");
+ // move.setPlannerId("RRTStar");
+ move.setPlanningTime(PLANNING_TIME);
+ const moveit::core::JointModelGroup *joint_model_group = move.getCurrentState()->getJointModelGroup("arm");
+ robot_state::RobotState start_state(*move.getCurrentState());
+ moveit_visual_tools::MoveItVisualTools visual_tools("arm");
+
+ ros::Rate loop{CLOCK_RATE};
+
+ ros::Publisher nextTarget = np.advertise("/logic/arm_teleop/next_target",
+ MESSAGE_QUEUE_LENGTH);
+
+ ros::Publisher trajectoryPub = np.advertise("/logic/arm_teleop/trajectory",
+ MESSAGE_QUEUE_LENGTH);
+
+ // y axis
+ ros::Subscriber yAxis = np.subscribe("/hci/arm/gamepad/axis/stick_left_y",
+ MESSAGE_QUEUE_LENGTH,
+ static_cast>([&](Std_Float32 msg) -> void {
+ if (abs(msg->data) >= JOYSTICK_DEADBAND) {
+ y_pos += msg->data * STEP_Y;
+ updateTarget(x_pos, y_pos, z_pos, orientation, nextTarget);
+ }
+ }));
+
+ // x axis
+ ros::Subscriber xAxis = np.subscribe("/hci/arm/gamepad/axis/stick_left_x",
+ MESSAGE_QUEUE_LENGTH,
+ static_cast>([&](Std_Float32 msg) -> void {
+ if (abs(msg->data) >= JOYSTICK_DEADBAND) {
+ x_pos += msg->data * STEP_X;
+ updateTarget(x_pos, y_pos, z_pos, orientation, nextTarget);
+ }
+ }));
+
+ // y up
+ ros::Subscriber zUp = np.subscribe("/hci/arm/gamepad/button/trigger_left",
+ MESSAGE_QUEUE_LENGTH,
+ static_cast>([&](Std_Bool msg) -> void {
+ if (msg->data) {
+ z_pos += STEP_Y * step_mult;
+ updateTarget(x_pos, y_pos, z_pos, orientation, nextTarget);
+ }
+ }));
+
+ // y down
+ ros::Subscriber zDown = np.subscribe("/hci/arm/gamepad/button/trigger_right",
+ MESSAGE_QUEUE_LENGTH,
+ static_cast>([&](Std_Bool msg) -> void {
+ if (msg->data) {
+ z_pos -= STEP_Y * step_mult;
+ updateTarget(x_pos, y_pos, z_pos, orientation, nextTarget);
+ }
+ }));
+
+ // roll
+ ros::Subscriber roll = np.subscribe("/hci/arm/gamepad/button/pov_x",
+ MESSAGE_QUEUE_LENGTH,
+ static_cast>([&](Std_Bool msg) -> void {
+ if (msg->data) {
+ orientation *= SPIN_Z * step_mult;
+ updateTarget(x_pos, y_pos, z_pos, orientation, nextTarget);
+ }
+ }));
+
+ // pitch
+ ros::Subscriber pitch = np.subscribe("/hci/arm/gamepad/axis/pov_y",
+ MESSAGE_QUEUE_LENGTH,
+ static_cast>([&](Std_Float32 msg) -> void {
+ if (abs(msg->data) >= 0.5) {
+ orientation *= (msg->data > 0 ? SPIN_Y : SPIN_Y.inverse());
+ updateTarget(x_pos, y_pos, z_pos, orientation, nextTarget);
+ }
+ }));
+
+ // yaw
+ ros::Subscriber yaw = np.subscribe("/hci/arm/gamepad/axis/stick_right_x",
+ MESSAGE_QUEUE_LENGTH,
+ static_cast>([&](Std_Float32 msg) -> void {
+ if (abs(msg->data) >= 0.5) {
+ orientation *= (msg->data > 0 ? SPIN_X : SPIN_X.inverse());
+ updateTarget(x_pos, y_pos, z_pos, orientation, nextTarget);
+ }
+ }));
+
+ // override path execution
+ ros::Subscriber execPath = np.subscribe("/hci/arm/gamepad/button/start",
+ MESSAGE_QUEUE_LENGTH,
+ static_cast>([&](Std_Bool msg) -> void {
+ if (msg->data) {
+ isNewPath.store(true);
+ }
+ }));
+
+ // reset target/cancel path
+ ros::Subscriber resetPose = np.subscribe("/hci/arm/gamepad/button/select",
+ MESSAGE_QUEUE_LENGTH,
+ static_cast>([&](Std_Bool msg) -> void {
+ if (msg->data) {
+ move.stop();
+ }
+ }));
+
+ ros::Subscriber home = np.subscribe("/hci/arm/gamepad/button/mode",
+ MESSAGE_QUEUE_LENGTH,
+ static_cast>([&](Std_Bool msg) -> void {
+ if (msg->data) {
+ x_pos = HOME_X;
+ y_pos = HOME_Y;
+ z_pos = HOME_Z;
+ orientation = homeOrientation;
+ updateTarget(x_pos, y_pos, z_pos, orientation, nextTarget);
+ }
+ }));
+
+ while (ros::ok()) {
+
+ updateTarget(x_pos, y_pos, z_pos, orientation, nextTarget);
+ if (!isNewPath.load()) {
+ loop.sleep();
+ continue;
+ }
+
+ // stop current path
+ isNewPath.store(false);
+ move.stop();
+
+ // configure target pose
+ geometry_msgs::PoseStamped p{};
+ p.pose.position.x = x_pos;
+ p.pose.position.y = y_pos;
+ p.pose.position.z = z_pos;
+ p.pose.orientation = tf2::toMsg(orientation);
+ p.header.frame_id = "world";
+
+ move.setPoseTarget(p);
+ move.setStartStateToCurrentState();
+
+ // plan and execute path
+ move.asyncMove();
+
+ while (ros::ok()) {
+ updateTarget(x_pos, y_pos, z_pos, orientation, nextTarget);
+
+ if (move.getMoveGroupClient().getState().isDone()) {
+ std::cout << "[INFO] [" << ros::Time::now() << "]: path finished: " << move.getMoveGroupClient().getState().getText() << std::endl;
+ break;
+ }
+
+ else if (isNewPath.load()) {
+ std::cout << "[INFO] [" << ros::Time::now() << "]: path overridden" << std::endl;
+ move.stop();
+ break;
+ }
+
+ loop.sleep();
+ }
+ }
+
+ return 0;
+}
\ No newline at end of file
diff --git a/src/wroboarm_23/.setup_assistant b/src/wroboarm_23/.setup_assistant
new file mode 100644
index 00000000..ccd64ddc
--- /dev/null
+++ b/src/wroboarm_23/.setup_assistant
@@ -0,0 +1,11 @@
+moveit_setup_assistant_config:
+ URDF:
+ package: wroboarm_23
+ relative_path: urdf/ArmAssembly.SLDASM.urdf
+ xacro_args: ""
+ SRDF:
+ relative_path: config/wroboarm_23.srdf
+ CONFIG:
+ author_name: Ben Nowotny
+ author_email: bennowotny65535@gmail.com
+ generated_timestamp: 1669082391
\ No newline at end of file
diff --git a/src/wroboarm_23/CMakeLists.txt b/src/wroboarm_23/CMakeLists.txt
new file mode 100644
index 00000000..f1e67c4f
--- /dev/null
+++ b/src/wroboarm_23/CMakeLists.txt
@@ -0,0 +1,10 @@
+cmake_minimum_required(VERSION 3.1.3)
+project(wroboarm_23)
+
+find_package(catkin REQUIRED)
+
+catkin_package()
+
+install(DIRECTORY launch DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
+ PATTERN "setup_assistant.launch" EXCLUDE)
+install(DIRECTORY config DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION})
diff --git a/src/wroboarm_23/config/cartesian_limits.yaml b/src/wroboarm_23/config/cartesian_limits.yaml
new file mode 100644
index 00000000..7df72f69
--- /dev/null
+++ b/src/wroboarm_23/config/cartesian_limits.yaml
@@ -0,0 +1,5 @@
+cartesian_limits:
+ max_trans_vel: 1
+ max_trans_acc: 2.25
+ max_trans_dec: -5
+ max_rot_vel: 1.57
diff --git a/src/wroboarm_23/config/chomp_planning.yaml b/src/wroboarm_23/config/chomp_planning.yaml
new file mode 100644
index 00000000..eb9c9122
--- /dev/null
+++ b/src/wroboarm_23/config/chomp_planning.yaml
@@ -0,0 +1,18 @@
+planning_time_limit: 10.0
+max_iterations: 200
+max_iterations_after_collision_free: 5
+smoothness_cost_weight: 0.1
+obstacle_cost_weight: 1.0
+learning_rate: 0.01
+smoothness_cost_velocity: 0.0
+smoothness_cost_acceleration: 1.0
+smoothness_cost_jerk: 0.0
+ridge_factor: 0.0
+use_pseudo_inverse: false
+pseudo_inverse_ridge_factor: 1e-4
+joint_update_limit: 0.1
+collision_clearance: 0.2
+collision_threshold: 0.07
+use_stochastic_descent: true
+enable_failure_recovery: false
+max_recovery_attempts: 5
diff --git a/src/wroboarm_23/config/fake_controllers.yaml b/src/wroboarm_23/config/fake_controllers.yaml
new file mode 100644
index 00000000..46de675b
--- /dev/null
+++ b/src/wroboarm_23/config/fake_controllers.yaml
@@ -0,0 +1,15 @@
+controller_list:
+ - name: fake_arm_controller
+ type: $(arg fake_execution_type)
+ joints:
+ - turntable_joint
+ - shoulder_joint
+ - elbowPitch_joint
+ - elbowRoll_joint
+ - wristPitch_joint
+ - wristRoll_link
+initial: # Define initial robot poses per group
+# - group: arm
+# pose: home
+
+ []
\ No newline at end of file
diff --git a/src/wroboarm_23/config/gazebo_controllers.yaml b/src/wroboarm_23/config/gazebo_controllers.yaml
new file mode 100644
index 00000000..e4d2eb00
--- /dev/null
+++ b/src/wroboarm_23/config/gazebo_controllers.yaml
@@ -0,0 +1,4 @@
+# Publish joint_states
+joint_state_controller:
+ type: joint_state_controller/JointStateController
+ publish_rate: 50
diff --git a/src/wroboarm_23/config/gazebo_wroboarm_23.urdf b/src/wroboarm_23/config/gazebo_wroboarm_23.urdf
new file mode 100644
index 00000000..e4edc521
--- /dev/null
+++ b/src/wroboarm_23/config/gazebo_wroboarm_23.urdf
@@ -0,0 +1,262 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ transmission_interface/SimpleTransmission
+
+ hardware_interface/EffortJointInterface
+
+
+ hardware_interface/EffortJointInterface
+ 1
+
+
+
+ transmission_interface/SimpleTransmission
+
+ hardware_interface/EffortJointInterface
+
+
+ hardware_interface/EffortJointInterface
+ 1
+
+
+
+ transmission_interface/SimpleTransmission
+
+ hardware_interface/EffortJointInterface
+
+
+ hardware_interface/EffortJointInterface
+ 1
+
+
+
+ transmission_interface/SimpleTransmission
+
+ hardware_interface/EffortJointInterface
+
+
+ hardware_interface/EffortJointInterface
+ 1
+
+
+
+ transmission_interface/SimpleTransmission
+
+ hardware_interface/EffortJointInterface
+
+
+ hardware_interface/EffortJointInterface
+ 1
+
+
+
+ transmission_interface/SimpleTransmission
+
+ hardware_interface/EffortJointInterface
+
+
+ hardware_interface/EffortJointInterface
+ 1
+
+
+
+
+ /
+
+
+
+
diff --git a/src/wroboarm_23/config/joint_limits.yaml b/src/wroboarm_23/config/joint_limits.yaml
new file mode 100644
index 00000000..ae579b8e
--- /dev/null
+++ b/src/wroboarm_23/config/joint_limits.yaml
@@ -0,0 +1,52 @@
+# joint_limits.yaml allows the dynamics properties specified in the URDF to be overwritten or augmented as needed
+
+# For beginners, we downscale velocity and acceleration limits.
+# You can always specify higher scaling factors (<= 1.0) in your motion requests. # Increase the values below to 1.0 to always move at maximum speed.
+default_velocity_scaling_factor: 1.0
+default_acceleration_scaling_factor: 1.0
+
+# Specific joint properties can be changed with the keys [max_position, min_position, max_velocity, max_acceleration]
+# Joint limits can be turned off with [has_velocity_limits, has_acceleration_limits]
+joint_limits:
+ elbowPitch_joint:
+ has_velocity_limits: true
+ max_velocity: 10
+ has_acceleration_limits: true
+ max_acceleration: 10
+ max_position: !radians 2.2
+ min_position: !radians -0.2
+ elbowRoll_joint:
+ has_velocity_limits: true
+ max_velocity: 10
+ has_acceleration_limits: true
+ max_acceleration: 10
+ max_position: !radians 0.7
+ min_position: !radians -0.7
+ shoulder_joint:
+ has_velocity_limits: true
+ max_velocity: 10
+ has_acceleration_limits: true
+ max_acceleration: 10
+ max_position: !radians 0
+ min_position: !radians -1.3
+ turntable_joint:
+ has_velocity_limits: true
+ max_velocity: 10
+ has_acceleration_limits: true
+ max_acceleration: 10
+ max_position: !radians pi / 2
+ min_position: !radians 0
+ wristPitch_joint:
+ has_velocity_limits: true
+ max_velocity: 10
+ has_acceleration_limits: true
+ max_acceleration: 10
+ max_position: !radians 2.5
+ min_position: !radians -2.5
+ wristRoll_link:
+ has_velocity_limits: true
+ max_velocity: 10
+ has_acceleration_limits: true
+ max_acceleration: 10
+ max_position: !radians pi
+ min_position: !radians -pi
\ No newline at end of file
diff --git a/src/wroboarm_23/config/joint_names_ArmAssembly.SLDASM.yaml b/src/wroboarm_23/config/joint_names_ArmAssembly.SLDASM.yaml
new file mode 100644
index 00000000..05cd2083
--- /dev/null
+++ b/src/wroboarm_23/config/joint_names_ArmAssembly.SLDASM.yaml
@@ -0,0 +1 @@
+controller_joint_names: ['', 'turntable_joint', 'shoulder_joint', 'elbowPitch_joint', 'elbowRoll_joint', 'wristPitch_joint', 'wristRoll_link', ]
diff --git a/src/wroboarm_23/config/kinematics.yaml b/src/wroboarm_23/config/kinematics.yaml
new file mode 100644
index 00000000..05573e5c
--- /dev/null
+++ b/src/wroboarm_23/config/kinematics.yaml
@@ -0,0 +1,4 @@
+arm:
+ kinematics_solver: kdl_kinematics_plugin/KDLKinematicsPlugin
+ kinematics_solver_search_resolution: 0.005
+ kinematics_solver_timeout: 0.005
\ No newline at end of file
diff --git a/src/wroboarm_23/config/ompl_planning.yaml b/src/wroboarm_23/config/ompl_planning.yaml
new file mode 100644
index 00000000..5e0528df
--- /dev/null
+++ b/src/wroboarm_23/config/ompl_planning.yaml
@@ -0,0 +1,157 @@
+planner_configs:
+ AnytimePathShortening:
+ type: geometric::AnytimePathShortening
+ shortcut: true # Attempt to shortcut all new solution paths
+ hybridize: true # Compute hybrid solution trajectories
+ max_hybrid_paths: 24 # Number of hybrid paths generated per iteration
+ num_planners: 4 # The number of default planners to use for planning
+ planners: "" # A comma-separated list of planner types (e.g., "PRM,EST,RRTConnect"Optionally, planner parameters can be passed to change the default:"PRM[max_nearest_neighbors=5],EST[goal_bias=.5],RRT[range=10. goal_bias=.1]"
+ SBL:
+ type: geometric::SBL
+ range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup()
+ EST:
+ type: geometric::EST
+ range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0 setup()
+ goal_bias: 0.05 # When close to goal select goal, with this probability. default: 0.05
+ LBKPIECE:
+ type: geometric::LBKPIECE
+ range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup()
+ border_fraction: 0.9 # Fraction of time focused on boarder default: 0.9
+ min_valid_path_fraction: 0.5 # Accept partially valid moves above fraction. default: 0.5
+ BKPIECE:
+ type: geometric::BKPIECE
+ range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup()
+ border_fraction: 0.9 # Fraction of time focused on boarder default: 0.9
+ failed_expansion_score_factor: 0.5 # When extending motion fails, scale score by factor. default: 0.5
+ min_valid_path_fraction: 0.5 # Accept partially valid moves above fraction. default: 0.5
+ KPIECE:
+ type: geometric::KPIECE
+ range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup()
+ goal_bias: 0.05 # When close to goal select goal, with this probability. default: 0.05
+ border_fraction: 0.9 # Fraction of time focused on boarder default: 0.9 (0.0,1.]
+ failed_expansion_score_factor: 0.5 # When extending motion fails, scale score by factor. default: 0.5
+ min_valid_path_fraction: 0.5 # Accept partially valid moves above fraction. default: 0.5
+ RRT:
+ type: geometric::RRT
+ range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup()
+ goal_bias: 0.05 # When close to goal select goal, with this probability? default: 0.05
+ RRTConnect:
+ type: geometric::RRTConnect
+ range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup()
+ RRTstar:
+ type: geometric::RRTstar
+ range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup()
+ goal_bias: 0.05 # When close to goal select goal, with this probability? default: 0.05
+ delay_collision_checking: 1 # Stop collision checking as soon as C-free parent found. default 1
+ TRRT:
+ type: geometric::TRRT
+ range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup()
+ goal_bias: 0.05 # When close to goal select goal, with this probability? default: 0.05
+ max_states_failed: 10 # when to start increasing temp. default: 10
+ temp_change_factor: 2.0 # how much to increase or decrease temp. default: 2.0
+ min_temperature: 10e-10 # lower limit of temp change. default: 10e-10
+ init_temperature: 10e-6 # initial temperature. default: 10e-6
+ frountier_threshold: 0.0 # dist new state to nearest neighbor to disqualify as frontier. default: 0.0 set in setup()
+ frountierNodeRatio: 0.1 # 1/10, or 1 nonfrontier for every 10 frontier. default: 0.1
+ k_constant: 0.0 # value used to normalize expresssion. default: 0.0 set in setup()
+ PRM:
+ type: geometric::PRM
+ max_nearest_neighbors: 10 # use k nearest neighbors. default: 10
+ PRMstar:
+ type: geometric::PRMstar
+ FMT:
+ type: geometric::FMT
+ num_samples: 1000 # number of states that the planner should sample. default: 1000
+ radius_multiplier: 1.1 # multiplier used for the nearest neighbors search radius. default: 1.1
+ nearest_k: 1 # use Knearest strategy. default: 1
+ cache_cc: 1 # use collision checking cache. default: 1
+ heuristics: 0 # activate cost to go heuristics. default: 0
+ extended_fmt: 1 # activate the extended FMT*: adding new samples if planner does not finish successfully. default: 1
+ BFMT:
+ type: geometric::BFMT
+ num_samples: 1000 # number of states that the planner should sample. default: 1000
+ radius_multiplier: 1.0 # multiplier used for the nearest neighbors search radius. default: 1.0
+ nearest_k: 1 # use the Knearest strategy. default: 1
+ balanced: 0 # exploration strategy: balanced true expands one tree every iteration. False will select the tree with lowest maximum cost to go. default: 1
+ optimality: 1 # termination strategy: optimality true finishes when the best possible path is found. Otherwise, the algorithm will finish when the first feasible path is found. default: 1
+ heuristics: 1 # activates cost to go heuristics. default: 1
+ cache_cc: 1 # use the collision checking cache. default: 1
+ extended_fmt: 1 # Activates the extended FMT*: adding new samples if planner does not finish successfully. default: 1
+ PDST:
+ type: geometric::PDST
+ STRIDE:
+ type: geometric::STRIDE
+ range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup()
+ goal_bias: 0.05 # When close to goal select goal, with this probability. default: 0.05
+ use_projected_distance: 0 # whether nearest neighbors are computed based on distances in a projection of the state rather distances in the state space itself. default: 0
+ degree: 16 # desired degree of a node in the Geometric Near-neightbor Access Tree (GNAT). default: 16
+ max_degree: 18 # max degree of a node in the GNAT. default: 12
+ min_degree: 12 # min degree of a node in the GNAT. default: 12
+ max_pts_per_leaf: 6 # max points per leaf in the GNAT. default: 6
+ estimated_dimension: 0.0 # estimated dimension of the free space. default: 0.0
+ min_valid_path_fraction: 0.2 # Accept partially valid moves above fraction. default: 0.2
+ BiTRRT:
+ type: geometric::BiTRRT
+ range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup()
+ temp_change_factor: 0.1 # how much to increase or decrease temp. default: 0.1
+ init_temperature: 100 # initial temperature. default: 100
+ frountier_threshold: 0.0 # dist new state to nearest neighbor to disqualify as frontier. default: 0.0 set in setup()
+ frountier_node_ratio: 0.1 # 1/10, or 1 nonfrontier for every 10 frontier. default: 0.1
+ cost_threshold: 1e300 # the cost threshold. Any motion cost that is not better will not be expanded. default: inf
+ LBTRRT:
+ type: geometric::LBTRRT
+ range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup()
+ goal_bias: 0.05 # When close to goal select goal, with this probability. default: 0.05
+ epsilon: 0.4 # optimality approximation factor. default: 0.4
+ BiEST:
+ type: geometric::BiEST
+ range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup()
+ ProjEST:
+ type: geometric::ProjEST
+ range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup()
+ goal_bias: 0.05 # When close to goal select goal, with this probability. default: 0.05
+ LazyPRM:
+ type: geometric::LazyPRM
+ range: 0.0 # Max motion added to tree. ==> maxDistance_ default: 0.0, if 0.0, set on setup()
+ LazyPRMstar:
+ type: geometric::LazyPRMstar
+ SPARS:
+ type: geometric::SPARS
+ stretch_factor: 3.0 # roadmap spanner stretch factor. multiplicative upper bound on path quality. It does not make sense to make this parameter more than 3. default: 3.0
+ sparse_delta_fraction: 0.25 # delta fraction for connection distance. This value represents the visibility range of sparse samples. default: 0.25
+ dense_delta_fraction: 0.001 # delta fraction for interface detection. default: 0.001
+ max_failures: 1000 # maximum consecutive failure limit. default: 1000
+ SPARStwo:
+ type: geometric::SPARStwo
+ stretch_factor: 3.0 # roadmap spanner stretch factor. multiplicative upper bound on path quality. It does not make sense to make this parameter more than 3. default: 3.0
+ sparse_delta_fraction: 0.25 # delta fraction for connection distance. This value represents the visibility range of sparse samples. default: 0.25
+ dense_delta_fraction: 0.001 # delta fraction for interface detection. default: 0.001
+ max_failures: 5000 # maximum consecutive failure limit. default: 5000
+arm:
+ planner_configs:
+ - AnytimePathShortening
+ - SBL
+ - EST
+ - LBKPIECE
+ - BKPIECE
+ - KPIECE
+ - RRT
+ - RRTConnect
+ - RRTstar
+ - TRRT
+ - PRM
+ - PRMstar
+ - FMT
+ - BFMT
+ - PDST
+ - STRIDE
+ - BiTRRT
+ - LBTRRT
+ - BiEST
+ - ProjEST
+ - LazyPRM
+ - LazyPRMstar
+ - SPARS
+ - SPARStwo
+ projection_evaluator: joints(turntable_joint,shoulder_joint)
+ longest_valid_segment_fraction: 0.005
diff --git a/src/wroboarm_23/config/ros_controllers.yaml b/src/wroboarm_23/config/ros_controllers.yaml
new file mode 100644
index 00000000..a79ae41f
--- /dev/null
+++ b/src/wroboarm_23/config/ros_controllers.yaml
@@ -0,0 +1,12 @@
+controller_list:
+ - name: arm_controller
+ action_ns: follow_joint_trajectory
+ type: FollowJointTrajectory
+ default: True
+ joints:
+ - turntable_joint
+ - shoulder_joint
+ - elbowPitch_joint
+ - elbowRoll_joint
+ - wristPitch_joint
+ - wristRoll_link
\ No newline at end of file
diff --git a/src/wroboarm_23/config/sensors_3d.yaml b/src/wroboarm_23/config/sensors_3d.yaml
new file mode 100644
index 00000000..51010a36
--- /dev/null
+++ b/src/wroboarm_23/config/sensors_3d.yaml
@@ -0,0 +1,2 @@
+sensors:
+ []
\ No newline at end of file
diff --git a/src/wroboarm_23/config/simple_moveit_controllers.yaml b/src/wroboarm_23/config/simple_moveit_controllers.yaml
new file mode 100644
index 00000000..a79ae41f
--- /dev/null
+++ b/src/wroboarm_23/config/simple_moveit_controllers.yaml
@@ -0,0 +1,12 @@
+controller_list:
+ - name: arm_controller
+ action_ns: follow_joint_trajectory
+ type: FollowJointTrajectory
+ default: True
+ joints:
+ - turntable_joint
+ - shoulder_joint
+ - elbowPitch_joint
+ - elbowRoll_joint
+ - wristPitch_joint
+ - wristRoll_link
\ No newline at end of file
diff --git a/src/wroboarm_23/config/stomp_planning.yaml b/src/wroboarm_23/config/stomp_planning.yaml
new file mode 100644
index 00000000..ece56380
--- /dev/null
+++ b/src/wroboarm_23/config/stomp_planning.yaml
@@ -0,0 +1,39 @@
+stomp/arm:
+ group_name: arm
+ optimization:
+ num_timesteps: 60
+ num_iterations: 40
+ num_iterations_after_valid: 0
+ num_rollouts: 30
+ max_rollouts: 30
+ initialization_method: 1 # [1 : LINEAR_INTERPOLATION, 2 : CUBIC_POLYNOMIAL, 3 : MININUM_CONTROL_COST]
+ control_cost_weight: 0.0
+ task:
+ noise_generator:
+ - class: stomp_moveit/NormalDistributionSampling
+ stddev: [0.05, 0.05, 0.05, 0.05, 0.05, 0.05]
+ cost_functions:
+ - class: stomp_moveit/CollisionCheck
+ collision_penalty: 1.0
+ cost_weight: 1.0
+ kernel_window_percentage: 0.2
+ longest_valid_joint_move: 0.05
+ noisy_filters:
+ - class: stomp_moveit/JointLimits
+ lock_start: True
+ lock_goal: True
+ - class: stomp_moveit/MultiTrajectoryVisualization
+ line_width: 0.02
+ rgb: [255, 255, 0]
+ marker_array_topic: stomp_trajectories
+ marker_namespace: noisy
+ update_filters:
+ - class: stomp_moveit/PolynomialSmoother
+ poly_order: 6
+ - class: stomp_moveit/TrajectoryVisualization
+ line_width: 0.05
+ rgb: [0, 191, 255]
+ error_rgb: [255, 0, 0]
+ publish_intermediate: True
+ marker_topic: stomp_trajectory
+ marker_namespace: optimized
\ No newline at end of file
diff --git a/src/wroboarm_23/config/wroboarm_23.srdf b/src/wroboarm_23/config/wroboarm_23.srdf
new file mode 100644
index 00000000..f3d67e92
--- /dev/null
+++ b/src/wroboarm_23/config/wroboarm_23.srdf
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/wroboarm_23/export.log b/src/wroboarm_23/export.log
new file mode 100644
index 00000000..f12be56f
--- /dev/null
+++ b/src/wroboarm_23/export.log
@@ -0,0 +1,705 @@
+2022-04-26 21:16:19,486 INFO Logger.cs: 70 -
+--------------------------------------------------------------------------------
+2022-04-26 21:16:19,505 INFO Logger.cs: 71 - Logging commencing for SW2URDF exporter
+2022-04-26 21:16:19,506 INFO Logger.cs: 73 - Commit version 1.6.0-4-g7f85cfe
+2022-04-26 21:16:19,506 INFO Logger.cs: 74 - Build version 1.6.7995.38578
+2022-04-26 21:16:19,508 INFO SwAddin.cs: 192 - Attempting to connect to SW
+2022-04-26 21:16:19,508 INFO SwAddin.cs: 197 - Setting up callbacks
+2022-04-26 21:16:19,509 INFO SwAddin.cs: 201 - Setting up command manager
+2022-04-26 21:16:19,509 INFO SwAddin.cs: 204 - Adding command manager
+2022-04-26 21:16:19,511 INFO SwAddin.cs: 263 - Adding Assembly export to file menu
+2022-04-26 21:16:19,512 INFO SwAddin.cs: 272 - Adding Part export to file menu
+2022-04-26 21:16:19,512 INFO SwAddin.cs: 210 - Adding event handlers
+2022-04-26 21:16:19,514 INFO SwAddin.cs: 217 - Connecting plugin to SolidWorks
+2022-04-26 21:19:01,163 INFO SwAddin.cs: 294 - Assembly export called for file ArmAssembly.SLDASM
+2022-04-26 21:19:03,867 INFO SwAddin.cs: 313 - Saving assembly
+2022-04-26 21:19:05,013 INFO SwAddin.cs: 316 - Opening property manager
+2022-04-26 21:19:05,060 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from ArmAssembly.SLDASM
+2022-04-26 21:19:05,088 INFO ExportHelperExtension.cs: 1136 - Found 47 in ArmAssembly.SLDASM
+2022-04-26 21:19:05,089 INFO ExportHelperExtension.cs: 1145 - Found 1 features of type [CoordSys] in ArmAssembly.SLDASM
+2022-04-26 21:19:05,089 INFO ExportHelperExtension.cs: 1148 - Proceeding through assembly components
+2022-04-26 21:19:05,111 INFO ExportHelperExtension.cs: 1160 - 7 components to check
+2022-04-26 21:19:05,122 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from base-1
+2022-04-26 21:19:05,123 INFO ExportHelperExtension.cs: 1136 - Found 27 in base-1
+2022-04-26 21:19:05,123 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in base-1
+2022-04-26 21:19:05,123 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Shoulder-1
+2022-04-26 21:19:05,124 INFO ExportHelperExtension.cs: 1136 - Found 50 in Shoulder-1
+2022-04-26 21:19:05,124 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Shoulder-1
+2022-04-26 21:19:05,125 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from UpperArm-1
+2022-04-26 21:19:05,125 INFO ExportHelperExtension.cs: 1136 - Found 41 in UpperArm-1
+2022-04-26 21:19:05,125 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in UpperArm-1
+2022-04-26 21:19:05,126 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Forarm-1
+2022-04-26 21:19:05,126 INFO ExportHelperExtension.cs: 1136 - Found 35 in Forarm-1
+2022-04-26 21:19:05,127 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Forarm-1
+2022-04-26 21:19:05,127 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Wrist-1
+2022-04-26 21:19:05,127 INFO ExportHelperExtension.cs: 1136 - Found 30 in Wrist-1
+2022-04-26 21:19:05,128 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Wrist-1
+2022-04-26 21:19:05,128 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from WristStructure-1
+2022-04-26 21:19:05,128 INFO ExportHelperExtension.cs: 1136 - Found 30 in WristStructure-1
+2022-04-26 21:19:05,129 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in WristStructure-1
+2022-04-26 21:19:05,129 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Manipulator-1
+2022-04-26 21:19:05,187 INFO ExportHelperExtension.cs: 1136 - Found 39 in Manipulator-1
+2022-04-26 21:19:05,187 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Manipulator-1
+2022-04-26 21:19:05,188 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from ArmAssembly.SLDASM
+2022-04-26 21:19:05,188 INFO ExportHelperExtension.cs: 1136 - Found 47 in ArmAssembly.SLDASM
+2022-04-26 21:19:05,189 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in ArmAssembly.SLDASM
+2022-04-26 21:19:05,189 INFO ExportHelperExtension.cs: 1148 - Proceeding through assembly components
+2022-04-26 21:19:05,189 INFO ExportHelperExtension.cs: 1160 - 7 components to check
+2022-04-26 21:19:05,190 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from base-1
+2022-04-26 21:19:05,190 INFO ExportHelperExtension.cs: 1136 - Found 27 in base-1
+2022-04-26 21:19:05,190 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in base-1
+2022-04-26 21:19:05,191 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Shoulder-1
+2022-04-26 21:19:05,191 INFO ExportHelperExtension.cs: 1136 - Found 50 in Shoulder-1
+2022-04-26 21:19:05,191 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Shoulder-1
+2022-04-26 21:19:05,192 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from UpperArm-1
+2022-04-26 21:19:05,192 INFO ExportHelperExtension.cs: 1136 - Found 41 in UpperArm-1
+2022-04-26 21:19:05,192 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in UpperArm-1
+2022-04-26 21:19:05,193 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Forarm-1
+2022-04-26 21:19:05,193 INFO ExportHelperExtension.cs: 1136 - Found 35 in Forarm-1
+2022-04-26 21:19:05,193 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Forarm-1
+2022-04-26 21:19:05,194 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Wrist-1
+2022-04-26 21:19:05,194 INFO ExportHelperExtension.cs: 1136 - Found 30 in Wrist-1
+2022-04-26 21:19:05,194 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Wrist-1
+2022-04-26 21:19:05,195 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from WristStructure-1
+2022-04-26 21:19:05,195 INFO ExportHelperExtension.cs: 1136 - Found 30 in WristStructure-1
+2022-04-26 21:19:05,195 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in WristStructure-1
+2022-04-26 21:19:05,196 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Manipulator-1
+2022-04-26 21:19:05,196 INFO ExportHelperExtension.cs: 1136 - Found 39 in Manipulator-1
+2022-04-26 21:19:05,196 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Manipulator-1
+2022-04-26 21:19:05,777 INFO SwAddin.cs: 339 - Loading config tree
+2022-04-26 21:19:05,789 INFO ConfigurationSerialization.cs: 276 - URDF Configuration found
+nametruebase_linkxyztrue9.1830074983591922E-190.0156064900891439551.5715252581589567E-18rpytrue000originfalsefalsevaluetrue0.93972387307473026massfalseixxtrue0.0025142902225504422ixytrue8.02209898558041E-21ixztrue-7.374852413660824E-20iyytrue0.0044229329573873041iyztrue2.2568808327940613E-20izztrue0.0021336882069818023inertiafalseinertialfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruenametruergbatrue0.7921568627450980.819607843137254880.933333333333333351colorfalsefilenametruetexturefalsematerialfalsevisualfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruecollisionfalsenametruetypetruexyztrue000rpytrue000originfalsefalselinktrueparenttruelinktruechildtruexyztrue000axisfalselowerfalseupperfalseefforttruevelocitytruelimitfalserisingfalsefallingfalsecalibrationfalsedampingfalsefrictionfalsedynamicsfalsesoft_upper_limitfalsesoft_lower_limitfalsek_positionfalsek_velocitytruesafety_controllerfalsejointtruemultiplierfalseoffsetfalsemimicfalsejointfalseOrigin_globallinktruefalsesDYAAAUAAAD//v8SYgBhAHMAZQAtADEAQABBAHIAbQBBAHMAcwBlAG0AYgBsAHkABAAAABAAAAABAAAAAQAAABgAAAA=falsefalse
+2022-04-26 21:19:05,911 INFO LinkNode.cs: 35 - Building node base_link
+2022-04-26 21:19:05,914 INFO CommonSwOperations.cs: 221 - Loading SolidWorks components for base_link from E:\Robotics\WR\URDF\ArmAssembly.SLDASM
+2022-04-26 21:19:05,915 INFO CommonSwOperations.cs: 245 - Loading component with PID ?6 ???b a s e - 1 @ A r m A s s e m b l y
+2022-04-26 21:19:05,935 INFO CommonSwOperations.cs: 254 - Successfully loaded component E:\Robotics\WR\URDF\base.SLDPRT
+2022-04-26 21:19:05,935 INFO CommonSwOperations.cs: 230 - Loaded 1 components for link base_link
+2022-04-26 21:19:05,981 INFO SwAddin.cs: 344 - Showing property manager
+2022-04-26 21:19:16,795 INFO ExportPropertyManager.cs: 422 - Configuration saved
+2022-04-26 21:19:16,812 INFO ConfigurationSerialization.cs: 276 - URDF Configuration found
+nametruebase_linkxyztrue9.1830074983591922E-190.0156064900891439551.5715252581589567E-18rpytrue000originfalsefalsevaluetrue0.93972387307473026massfalseixxtrue0.0025142902225504422ixytrue8.02209898558041E-21ixztrue-7.374852413660824E-20iyytrue0.0044229329573873041iyztrue2.2568808327940613E-20izztrue0.0021336882069818023inertiafalseinertialfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruenametruergbatrue0.7921568627450980.819607843137254880.933333333333333351colorfalsefilenametruetexturefalsematerialfalsevisualfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruecollisionfalsenametruetypetruexyztrue000rpytrue000originfalsefalselinktrueparenttruelinktruechildtruexyztrue000axisfalselowerfalseupperfalseefforttruevelocitytruelimitfalserisingfalsefallingfalsecalibrationfalsedampingfalsefrictionfalsedynamicsfalsesoft_upper_limitfalsesoft_lower_limitfalsek_positionfalsek_velocitytruesafety_controllerfalsejointtruemultiplierfalseoffsetfalsemimicfalsejointfalseOrigin_globallinktruefalsesDYAAAUAAAD//v8SYgBhAHMAZQAtADEAQABBAHIAbQBBAHMAcwBlAG0AYgBsAHkABAAAABAAAAABAAAAAQAAABgAAAA=falsefalse
+2022-04-26 21:19:16,903 INFO ExportPropertyManager.cs: 1142 - AfterClose called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:19:54,237 INFO SwAddin.cs: 294 - Assembly export called for file ArmAssembly.SLDASM
+2022-04-26 21:19:55,264 INFO SwAddin.cs: 313 - Saving assembly
+2022-04-26 21:19:55,326 INFO SwAddin.cs: 316 - Opening property manager
+2022-04-26 21:19:55,326 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from ArmAssembly.SLDASM
+2022-04-26 21:19:55,327 INFO ExportHelperExtension.cs: 1136 - Found 47 in ArmAssembly.SLDASM
+2022-04-26 21:19:55,327 INFO ExportHelperExtension.cs: 1145 - Found 1 features of type [CoordSys] in ArmAssembly.SLDASM
+2022-04-26 21:19:55,328 INFO ExportHelperExtension.cs: 1148 - Proceeding through assembly components
+2022-04-26 21:19:55,328 INFO ExportHelperExtension.cs: 1160 - 7 components to check
+2022-04-26 21:19:55,328 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from base-1
+2022-04-26 21:19:55,329 INFO ExportHelperExtension.cs: 1136 - Found 27 in base-1
+2022-04-26 21:19:55,329 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in base-1
+2022-04-26 21:19:55,329 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Shoulder-1
+2022-04-26 21:19:55,330 INFO ExportHelperExtension.cs: 1136 - Found 50 in Shoulder-1
+2022-04-26 21:19:55,330 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Shoulder-1
+2022-04-26 21:19:55,330 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from UpperArm-1
+2022-04-26 21:19:55,331 INFO ExportHelperExtension.cs: 1136 - Found 41 in UpperArm-1
+2022-04-26 21:19:55,331 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in UpperArm-1
+2022-04-26 21:19:55,331 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Forarm-1
+2022-04-26 21:19:55,332 INFO ExportHelperExtension.cs: 1136 - Found 35 in Forarm-1
+2022-04-26 21:19:55,332 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Forarm-1
+2022-04-26 21:19:55,340 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Wrist-1
+2022-04-26 21:19:55,360 INFO ExportHelperExtension.cs: 1136 - Found 30 in Wrist-1
+2022-04-26 21:19:55,360 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Wrist-1
+2022-04-26 21:19:55,361 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from WristStructure-1
+2022-04-26 21:19:55,361 INFO ExportHelperExtension.cs: 1136 - Found 30 in WristStructure-1
+2022-04-26 21:19:55,361 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in WristStructure-1
+2022-04-26 21:19:55,362 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Manipulator-1
+2022-04-26 21:19:55,362 INFO ExportHelperExtension.cs: 1136 - Found 39 in Manipulator-1
+2022-04-26 21:19:55,363 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Manipulator-1
+2022-04-26 21:19:55,363 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from ArmAssembly.SLDASM
+2022-04-26 21:19:55,364 INFO ExportHelperExtension.cs: 1136 - Found 47 in ArmAssembly.SLDASM
+2022-04-26 21:19:55,364 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in ArmAssembly.SLDASM
+2022-04-26 21:19:55,364 INFO ExportHelperExtension.cs: 1148 - Proceeding through assembly components
+2022-04-26 21:19:55,365 INFO ExportHelperExtension.cs: 1160 - 7 components to check
+2022-04-26 21:19:55,365 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from base-1
+2022-04-26 21:19:55,365 INFO ExportHelperExtension.cs: 1136 - Found 27 in base-1
+2022-04-26 21:19:55,366 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in base-1
+2022-04-26 21:19:55,366 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Shoulder-1
+2022-04-26 21:19:55,366 INFO ExportHelperExtension.cs: 1136 - Found 50 in Shoulder-1
+2022-04-26 21:19:55,367 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Shoulder-1
+2022-04-26 21:19:55,367 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from UpperArm-1
+2022-04-26 21:19:55,367 INFO ExportHelperExtension.cs: 1136 - Found 41 in UpperArm-1
+2022-04-26 21:19:55,368 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in UpperArm-1
+2022-04-26 21:19:55,368 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Forarm-1
+2022-04-26 21:19:55,369 INFO ExportHelperExtension.cs: 1136 - Found 35 in Forarm-1
+2022-04-26 21:19:55,369 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Forarm-1
+2022-04-26 21:19:55,369 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Wrist-1
+2022-04-26 21:19:55,370 INFO ExportHelperExtension.cs: 1136 - Found 30 in Wrist-1
+2022-04-26 21:19:55,370 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Wrist-1
+2022-04-26 21:19:55,370 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from WristStructure-1
+2022-04-26 21:19:55,371 INFO ExportHelperExtension.cs: 1136 - Found 30 in WristStructure-1
+2022-04-26 21:19:55,371 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in WristStructure-1
+2022-04-26 21:19:55,371 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Manipulator-1
+2022-04-26 21:19:55,372 INFO ExportHelperExtension.cs: 1136 - Found 39 in Manipulator-1
+2022-04-26 21:19:55,372 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Manipulator-1
+2022-04-26 21:19:55,413 INFO SwAddin.cs: 339 - Loading config tree
+2022-04-26 21:19:55,413 INFO ConfigurationSerialization.cs: 276 - URDF Configuration found
+nametruebase_linkxyztrue9.1830074983591922E-190.0156064900891439551.5715252581589567E-18rpytrue000originfalsefalsevaluetrue0.93972387307473026massfalseixxtrue0.0025142902225504422ixytrue8.02209898558041E-21ixztrue-7.374852413660824E-20iyytrue0.0044229329573873041iyztrue2.2568808327940613E-20izztrue0.0021336882069818023inertiafalseinertialfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruenametruergbatrue0.7921568627450980.819607843137254880.933333333333333351colorfalsefilenametruetexturefalsematerialfalsevisualfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruecollisionfalsenametruetypetruexyztrue000rpytrue000originfalsefalselinktrueparenttruelinktruechildtruexyztrue000axisfalselowerfalseupperfalseefforttruevelocitytruelimitfalserisingfalsefallingfalsecalibrationfalsedampingfalsefrictionfalsedynamicsfalsesoft_upper_limitfalsesoft_lower_limitfalsek_positionfalsek_velocitytruesafety_controllerfalsejointtruemultiplierfalseoffsetfalsemimicfalsejointfalseOrigin_globallinktruefalsesDYAAAUAAAD//v8SYgBhAHMAZQAtADEAQABBAHIAbQBBAHMAcwBlAG0AYgBsAHkABAAAABAAAAABAAAAAQAAABgAAAA=falsefalse
+2022-04-26 21:19:55,414 INFO LinkNode.cs: 35 - Building node base_link
+2022-04-26 21:19:55,414 INFO CommonSwOperations.cs: 221 - Loading SolidWorks components for base_link from E:\Robotics\WR\URDF\ArmAssembly.SLDASM
+2022-04-26 21:19:55,415 INFO CommonSwOperations.cs: 245 - Loading component with PID ?6 ???b a s e - 1 @ A r m A s s e m b l y
+2022-04-26 21:19:55,415 INFO CommonSwOperations.cs: 254 - Successfully loaded component E:\Robotics\WR\URDF\base.SLDPRT
+2022-04-26 21:19:55,415 INFO CommonSwOperations.cs: 230 - Loaded 1 components for link base_link
+2022-04-26 21:19:55,433 INFO SwAddin.cs: 344 - Showing property manager
+2022-04-26 21:20:28,795 INFO ExportPropertyManager.cs: 422 - Configuration saved
+2022-04-26 21:20:28,797 INFO ConfigurationSerialization.cs: 276 - URDF Configuration found
+nametruebase_linkxyztrue9.1830074983591922E-190.0156064900891439551.5715252581589567E-18rpytrue000originfalsefalsevaluetrue0.93972387307473026massfalseixxtrue0.0025142902225504422ixytrue8.02209898558041E-21ixztrue-7.374852413660824E-20iyytrue0.0044229329573873041iyztrue2.2568808327940613E-20izztrue0.0021336882069818023inertiafalseinertialfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruenametruergbatrue0.7921568627450980.819607843137254880.933333333333333351colorfalsefilenametruetexturefalsematerialfalsevisualfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruecollisionfalsenametruetypetruexyztrue000rpytrue000originfalsefalselinktrueparenttruelinktruechildtruexyztrue000axisfalselowerfalseupperfalseefforttruevelocitytruelimitfalserisingfalsefallingfalsecalibrationfalsedampingfalsefrictionfalsedynamicsfalsesoft_upper_limitfalsesoft_lower_limitfalsek_positionfalsek_velocitytruesafety_controllerfalsejointtruemultiplierfalseoffsetfalsemimicfalsejointfalseOrigin_globallinktruefalsesDYAAAUAAAD//v8SYgBhAHMAZQAtADEAQABBAHIAbQBBAHMAcwBlAG0AYgBsAHkABAAAABAAAAABAAAAAQAAABgAAAA=falsefalse
+2022-04-26 21:20:29,098 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from ArmAssembly.SLDASM
+2022-04-26 21:20:29,110 INFO ExportHelperExtension.cs: 1136 - Found 47 in ArmAssembly.SLDASM
+2022-04-26 21:20:29,111 INFO ExportHelperExtension.cs: 1145 - Found 1 features of type [CoordSys] in ArmAssembly.SLDASM
+2022-04-26 21:20:29,111 INFO ExportHelperExtension.cs: 1148 - Proceeding through assembly components
+2022-04-26 21:20:29,112 INFO ExportHelperExtension.cs: 1160 - 7 components to check
+2022-04-26 21:20:29,112 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from base-1
+2022-04-26 21:20:29,112 INFO ExportHelperExtension.cs: 1136 - Found 27 in base-1
+2022-04-26 21:20:29,113 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in base-1
+2022-04-26 21:20:29,113 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Shoulder-1
+2022-04-26 21:20:29,113 INFO ExportHelperExtension.cs: 1136 - Found 50 in Shoulder-1
+2022-04-26 21:20:29,114 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Shoulder-1
+2022-04-26 21:20:29,114 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from UpperArm-1
+2022-04-26 21:20:29,114 INFO ExportHelperExtension.cs: 1136 - Found 41 in UpperArm-1
+2022-04-26 21:20:29,115 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in UpperArm-1
+2022-04-26 21:20:29,115 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Forarm-1
+2022-04-26 21:20:29,115 INFO ExportHelperExtension.cs: 1136 - Found 35 in Forarm-1
+2022-04-26 21:20:29,116 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Forarm-1
+2022-04-26 21:20:29,116 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Wrist-1
+2022-04-26 21:20:29,116 INFO ExportHelperExtension.cs: 1136 - Found 30 in Wrist-1
+2022-04-26 21:20:29,117 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Wrist-1
+2022-04-26 21:20:29,117 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from WristStructure-1
+2022-04-26 21:20:29,117 INFO ExportHelperExtension.cs: 1136 - Found 30 in WristStructure-1
+2022-04-26 21:20:29,118 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in WristStructure-1
+2022-04-26 21:20:29,118 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Manipulator-1
+2022-04-26 21:20:29,118 INFO ExportHelperExtension.cs: 1136 - Found 39 in Manipulator-1
+2022-04-26 21:20:29,119 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Manipulator-1
+2022-04-26 21:20:29,119 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from ArmAssembly.SLDASM
+2022-04-26 21:20:29,120 INFO ExportHelperExtension.cs: 1136 - Found 47 in ArmAssembly.SLDASM
+2022-04-26 21:20:29,120 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in ArmAssembly.SLDASM
+2022-04-26 21:20:29,120 INFO ExportHelperExtension.cs: 1148 - Proceeding through assembly components
+2022-04-26 21:20:29,121 INFO ExportHelperExtension.cs: 1160 - 7 components to check
+2022-04-26 21:20:29,121 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from base-1
+2022-04-26 21:20:29,121 INFO ExportHelperExtension.cs: 1136 - Found 27 in base-1
+2022-04-26 21:20:29,122 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in base-1
+2022-04-26 21:20:29,122 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Shoulder-1
+2022-04-26 21:20:29,122 INFO ExportHelperExtension.cs: 1136 - Found 50 in Shoulder-1
+2022-04-26 21:20:29,123 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Shoulder-1
+2022-04-26 21:20:29,123 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from UpperArm-1
+2022-04-26 21:20:29,138 INFO ExportHelperExtension.cs: 1136 - Found 41 in UpperArm-1
+2022-04-26 21:20:29,139 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in UpperArm-1
+2022-04-26 21:20:29,139 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Forarm-1
+2022-04-26 21:20:29,140 INFO ExportHelperExtension.cs: 1136 - Found 35 in Forarm-1
+2022-04-26 21:20:29,140 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Forarm-1
+2022-04-26 21:20:29,140 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Wrist-1
+2022-04-26 21:20:29,141 INFO ExportHelperExtension.cs: 1136 - Found 30 in Wrist-1
+2022-04-26 21:20:29,141 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Wrist-1
+2022-04-26 21:20:29,141 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from WristStructure-1
+2022-04-26 21:20:29,142 INFO ExportHelperExtension.cs: 1136 - Found 30 in WristStructure-1
+2022-04-26 21:20:29,142 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in WristStructure-1
+2022-04-26 21:20:29,142 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Manipulator-1
+2022-04-26 21:20:29,143 INFO ExportHelperExtension.cs: 1136 - Found 39 in Manipulator-1
+2022-04-26 21:20:29,143 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Manipulator-1
+2022-04-26 21:20:29,182 INFO ExportPropertyManager.cs: 1142 - AfterClose called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:20:45,550 INFO SwAddin.cs: 294 - Assembly export called for file ArmAssembly.SLDASM
+2022-04-26 21:20:45,550 INFO SwAddin.cs: 299 - Save is required
+2022-04-26 21:20:45,551 INFO SwAddin.cs: 313 - Saving assembly
+2022-04-26 21:20:45,614 INFO SwAddin.cs: 316 - Opening property manager
+2022-04-26 21:20:45,615 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from ArmAssembly.SLDASM
+2022-04-26 21:20:45,616 INFO ExportHelperExtension.cs: 1136 - Found 47 in ArmAssembly.SLDASM
+2022-04-26 21:20:45,616 INFO ExportHelperExtension.cs: 1145 - Found 1 features of type [CoordSys] in ArmAssembly.SLDASM
+2022-04-26 21:20:45,616 INFO ExportHelperExtension.cs: 1148 - Proceeding through assembly components
+2022-04-26 21:20:45,617 INFO ExportHelperExtension.cs: 1160 - 7 components to check
+2022-04-26 21:20:45,617 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from base-1
+2022-04-26 21:20:45,617 INFO ExportHelperExtension.cs: 1136 - Found 27 in base-1
+2022-04-26 21:20:45,618 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in base-1
+2022-04-26 21:20:45,618 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Shoulder-1
+2022-04-26 21:20:45,618 INFO ExportHelperExtension.cs: 1136 - Found 50 in Shoulder-1
+2022-04-26 21:20:45,619 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Shoulder-1
+2022-04-26 21:20:45,619 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from UpperArm-1
+2022-04-26 21:20:45,619 INFO ExportHelperExtension.cs: 1136 - Found 41 in UpperArm-1
+2022-04-26 21:20:45,620 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in UpperArm-1
+2022-04-26 21:20:45,620 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Forarm-1
+2022-04-26 21:20:45,620 INFO ExportHelperExtension.cs: 1136 - Found 35 in Forarm-1
+2022-04-26 21:20:45,621 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Forarm-1
+2022-04-26 21:20:45,621 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Wrist-1
+2022-04-26 21:20:45,621 INFO ExportHelperExtension.cs: 1136 - Found 30 in Wrist-1
+2022-04-26 21:20:45,622 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Wrist-1
+2022-04-26 21:20:45,622 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from WristStructure-1
+2022-04-26 21:20:45,623 INFO ExportHelperExtension.cs: 1136 - Found 30 in WristStructure-1
+2022-04-26 21:20:45,623 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in WristStructure-1
+2022-04-26 21:20:45,624 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Manipulator-1
+2022-04-26 21:20:45,624 INFO ExportHelperExtension.cs: 1136 - Found 39 in Manipulator-1
+2022-04-26 21:20:45,625 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Manipulator-1
+2022-04-26 21:20:45,625 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from ArmAssembly.SLDASM
+2022-04-26 21:20:45,625 INFO ExportHelperExtension.cs: 1136 - Found 47 in ArmAssembly.SLDASM
+2022-04-26 21:20:45,626 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in ArmAssembly.SLDASM
+2022-04-26 21:20:45,626 INFO ExportHelperExtension.cs: 1148 - Proceeding through assembly components
+2022-04-26 21:20:45,626 INFO ExportHelperExtension.cs: 1160 - 7 components to check
+2022-04-26 21:20:45,627 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from base-1
+2022-04-26 21:20:45,627 INFO ExportHelperExtension.cs: 1136 - Found 27 in base-1
+2022-04-26 21:20:45,628 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in base-1
+2022-04-26 21:20:45,628 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Shoulder-1
+2022-04-26 21:20:45,629 INFO ExportHelperExtension.cs: 1136 - Found 50 in Shoulder-1
+2022-04-26 21:20:45,629 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Shoulder-1
+2022-04-26 21:20:45,630 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from UpperArm-1
+2022-04-26 21:20:45,630 INFO ExportHelperExtension.cs: 1136 - Found 41 in UpperArm-1
+2022-04-26 21:20:45,630 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in UpperArm-1
+2022-04-26 21:20:45,631 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Forarm-1
+2022-04-26 21:20:45,631 INFO ExportHelperExtension.cs: 1136 - Found 35 in Forarm-1
+2022-04-26 21:20:45,632 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Forarm-1
+2022-04-26 21:20:45,632 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Wrist-1
+2022-04-26 21:20:45,633 INFO ExportHelperExtension.cs: 1136 - Found 30 in Wrist-1
+2022-04-26 21:20:45,633 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Wrist-1
+2022-04-26 21:20:45,633 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from WristStructure-1
+2022-04-26 21:20:45,634 INFO ExportHelperExtension.cs: 1136 - Found 30 in WristStructure-1
+2022-04-26 21:20:45,634 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in WristStructure-1
+2022-04-26 21:20:45,635 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Manipulator-1
+2022-04-26 21:20:45,635 INFO ExportHelperExtension.cs: 1136 - Found 39 in Manipulator-1
+2022-04-26 21:20:45,636 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Manipulator-1
+2022-04-26 21:20:45,732 INFO SwAddin.cs: 339 - Loading config tree
+2022-04-26 21:20:45,733 INFO ConfigurationSerialization.cs: 276 - URDF Configuration found
+nametruebase_linkxyztrue9.1830074983591922E-190.0156064900891439551.5715252581589567E-18rpytrue000originfalsefalsevaluetrue0.93972387307473026massfalseixxtrue0.0025142902225504422ixytrue8.02209898558041E-21ixztrue-7.374852413660824E-20iyytrue0.0044229329573873041iyztrue2.2568808327940613E-20izztrue0.0021336882069818023inertiafalseinertialfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruenametruergbatrue0.7921568627450980.819607843137254880.933333333333333351colorfalsefilenametruetexturefalsematerialfalsevisualfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruecollisionfalsenametruetypetruexyztrue000rpytrue000originfalsefalselinktrueparenttruelinktruechildtruexyztrue000axisfalselowerfalseupperfalseefforttruevelocitytruelimitfalserisingfalsefallingfalsecalibrationfalsedampingfalsefrictionfalsedynamicsfalsesoft_upper_limitfalsesoft_lower_limitfalsek_positionfalsek_velocitytruesafety_controllerfalsejointtruemultiplierfalseoffsetfalsemimicfalsejointfalseOrigin_globallinktruefalsesDYAAAUAAAD//v8SYgBhAHMAZQAtADEAQABBAHIAbQBBAHMAcwBlAG0AYgBsAHkABAAAABAAAAABAAAAAQAAABgAAAA=sDYAAAUAAAD//v8WUwBoAG8AdQBsAGQAZQByAC0AMQBAAEEAcgBtAEEAcwBzAGUAbQBiAGwAeQAEAAAAEAAAAAEAAAABAAAAGQAAAA==sDYAAAUAAAD//v8WVQBwAHAAZQByAEEAcgBtAC0AMQBAAEEAcgBtAEEAcwBzAGUAbQBiAGwAeQAEAAAAEAAAAAEAAAABAAAAGgAAAA==sDYAAAUAAAD//v8URgBvAHIAYQByAG0ALQAxAEAAQQByAG0AQQBzAHMAZQBtAGIAbAB5AAQAAAAQAAAAAQAAAAEAAAAjAAAAsDYAAAUAAAD//v8cVwByAGkAcwB0AFMAdAByAHUAYwB0AHUAcgBlAC0AMQBAAEEAcgBtAEEAcwBzAGUAbQBiAGwAeQAEAAAAEAAAAAEAAAABAAAAKAAAAA==sDYAAAUAAAD//v8TVwByAGkAcwB0AC0AMQBAAEEAcgBtAEEAcwBzAGUAbQBiAGwAeQAEAAAAEAAAAAEAAAABAAAAJwAAAA==sDYAAAUAAAD//v8ZTQBhAG4AaQBwAHUAbABhAHQAbwByAC0AMQBAAEEAcgBtAEEAcwBzAGUAbQBiAGwAeQAEAAAAEAAAAAEAAAABAAAAJAAAAA==falsefalse
+2022-04-26 21:20:45,734 INFO LinkNode.cs: 35 - Building node base_link
+2022-04-26 21:20:45,734 INFO CommonSwOperations.cs: 221 - Loading SolidWorks components for base_link from E:\Robotics\WR\URDF\ArmAssembly.SLDASM
+2022-04-26 21:20:45,734 INFO CommonSwOperations.cs: 245 - Loading component with PID ?6 ???b a s e - 1 @ A r m A s s e m b l y
+2022-04-26 21:20:45,734 INFO CommonSwOperations.cs: 254 - Successfully loaded component E:\Robotics\WR\URDF\base.SLDPRT
+2022-04-26 21:20:45,735 INFO CommonSwOperations.cs: 245 - Loading component with PID ?6 ???S h o u l d e r - 1 @ A r m A s s e m b l y
+2022-04-26 21:20:45,735 INFO CommonSwOperations.cs: 254 - Successfully loaded component E:\Robotics\WR\URDF\Shoulder.SLDPRT
+2022-04-26 21:20:45,735 INFO CommonSwOperations.cs: 245 - Loading component with PID ?6 ???U p p e r A r m - 1 @ A r m A s s e m b l y
+2022-04-26 21:20:45,736 INFO CommonSwOperations.cs: 254 - Successfully loaded component E:\Robotics\WR\URDF\UpperArm.SLDPRT
+2022-04-26 21:20:45,736 INFO CommonSwOperations.cs: 245 - Loading component with PID ?6 ???F o r a r m - 1 @ A r m A s s e m b l y #
+2022-04-26 21:20:45,736 INFO CommonSwOperations.cs: 254 - Successfully loaded component E:\Robotics\WR\URDF\Forarm.SLDPRT
+2022-04-26 21:20:45,737 INFO CommonSwOperations.cs: 245 - Loading component with PID ?6 ???W r i s t S t r u c t u r e - 1 @ A r m A s s e m b l y (
+2022-04-26 21:20:45,737 INFO CommonSwOperations.cs: 254 - Successfully loaded component E:\Robotics\WR\URDF\WristStructure.SLDPRT
+2022-04-26 21:20:45,737 INFO CommonSwOperations.cs: 245 - Loading component with PID ?6 ???W r i s t - 1 @ A r m A s s e m b l y '
+2022-04-26 21:20:45,738 INFO CommonSwOperations.cs: 254 - Successfully loaded component E:\Robotics\WR\URDF\Wrist.SLDPRT
+2022-04-26 21:20:45,738 INFO CommonSwOperations.cs: 245 - Loading component with PID ?6 ???M a n i p u l a t o r - 1 @ A r m A s s e m b l y $
+2022-04-26 21:20:45,739 INFO CommonSwOperations.cs: 254 - Successfully loaded component E:\Robotics\WR\URDF\Manipulator.SLDPRT
+2022-04-26 21:20:45,739 INFO CommonSwOperations.cs: 230 - Loaded 7 components for link base_link
+2022-04-26 21:20:45,909 INFO SwAddin.cs: 344 - Showing property manager
+2022-04-26 21:20:50,182 INFO ExportPropertyManager.cs: 1036 - OnListboxSelectionChanged called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:20:50,491 INFO ExportPropertyManager.cs: 1036 - OnListboxSelectionChanged called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:20:52,134 INFO ExportPropertyManager.cs: 1036 - OnListboxSelectionChanged called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:20:53,289 INFO ExportPropertyManager.cs: 1036 - OnListboxSelectionChanged called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:20:53,987 INFO ExportPropertyManager.cs: 1036 - OnListboxSelectionChanged called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:20:54,678 INFO ExportPropertyManager.cs: 1036 - OnListboxSelectionChanged called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:20:55,176 INFO ExportPropertyManager.cs: 1036 - OnListboxSelectionChanged called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:20:55,830 INFO ExportPropertyManager.cs: 1036 - OnListboxSelectionChanged called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:20:58,315 INFO ExportPropertyManager.cs: 422 - Configuration saved
+2022-04-26 21:20:58,316 INFO ConfigurationSerialization.cs: 276 - URDF Configuration found
+nametruebase_linkxyztrue9.1830074983591922E-190.0156064900891439551.5715252581589567E-18rpytrue000originfalsefalsevaluetrue0.93972387307473026massfalseixxtrue0.0025142902225504422ixytrue8.02209898558041E-21ixztrue-7.374852413660824E-20iyytrue0.0044229329573873041iyztrue2.2568808327940613E-20izztrue0.0021336882069818023inertiafalseinertialfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruenametruergbatrue0.7921568627450980.819607843137254880.933333333333333351colorfalsefilenametruetexturefalsematerialfalsevisualfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruecollisionfalsenametruetypetruexyztrue000rpytrue000originfalsefalselinktrueparenttruelinktruechildtruexyztrue000axisfalselowerfalseupperfalseefforttruevelocitytruelimitfalserisingfalsefallingfalsecalibrationfalsedampingfalsefrictionfalsedynamicsfalsesoft_upper_limitfalsesoft_lower_limitfalsek_positionfalsek_velocitytruesafety_controllerfalsejointtruemultiplierfalseoffsetfalsemimicfalsejointfalseOrigin_globallinktruefalsesDYAAAUAAAD//v8SYgBhAHMAZQAtADEAQABBAHIAbQBBAHMAcwBlAG0AYgBsAHkABAAAABAAAAABAAAAAQAAABgAAAA=sDYAAAUAAAD//v8WUwBoAG8AdQBsAGQAZQByAC0AMQBAAEEAcgBtAEEAcwBzAGUAbQBiAGwAeQAEAAAAEAAAAAEAAAABAAAAGQAAAA==sDYAAAUAAAD//v8WVQBwAHAAZQByAEEAcgBtAC0AMQBAAEEAcgBtAEEAcwBzAGUAbQBiAGwAeQAEAAAAEAAAAAEAAAABAAAAGgAAAA==sDYAAAUAAAD//v8URgBvAHIAYQByAG0ALQAxAEAAQQByAG0AQQBzAHMAZQBtAGIAbAB5AAQAAAAQAAAAAQAAAAEAAAAjAAAAsDYAAAUAAAD//v8cVwByAGkAcwB0AFMAdAByAHUAYwB0AHUAcgBlAC0AMQBAAEEAcgBtAEEAcwBzAGUAbQBiAGwAeQAEAAAAEAAAAAEAAAABAAAAKAAAAA==sDYAAAUAAAD//v8TVwByAGkAcwB0AC0AMQBAAEEAcgBtAEEAcwBzAGUAbQBiAGwAeQAEAAAAEAAAAAEAAAABAAAAJwAAAA==sDYAAAUAAAD//v8ZTQBhAG4AaQBwAHUAbABhAHQAbwByAC0AMQBAAEEAcgBtAEEAcwBzAGUAbQBiAGwAeQAEAAAAEAAAAAEAAAABAAAAJAAAAA==falsefalse
+2022-04-26 21:20:58,417 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from ArmAssembly.SLDASM
+2022-04-26 21:20:58,418 INFO ExportHelperExtension.cs: 1136 - Found 47 in ArmAssembly.SLDASM
+2022-04-26 21:20:58,418 INFO ExportHelperExtension.cs: 1145 - Found 1 features of type [CoordSys] in ArmAssembly.SLDASM
+2022-04-26 21:20:58,418 INFO ExportHelperExtension.cs: 1148 - Proceeding through assembly components
+2022-04-26 21:20:58,419 INFO ExportHelperExtension.cs: 1160 - 7 components to check
+2022-04-26 21:20:58,419 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from base-1
+2022-04-26 21:20:58,419 INFO ExportHelperExtension.cs: 1136 - Found 27 in base-1
+2022-04-26 21:20:58,420 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in base-1
+2022-04-26 21:20:58,430 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Shoulder-1
+2022-04-26 21:20:58,441 INFO ExportHelperExtension.cs: 1136 - Found 50 in Shoulder-1
+2022-04-26 21:20:58,442 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Shoulder-1
+2022-04-26 21:20:58,442 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from UpperArm-1
+2022-04-26 21:20:58,443 INFO ExportHelperExtension.cs: 1136 - Found 41 in UpperArm-1
+2022-04-26 21:20:58,443 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in UpperArm-1
+2022-04-26 21:20:58,443 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Forarm-1
+2022-04-26 21:20:58,444 INFO ExportHelperExtension.cs: 1136 - Found 35 in Forarm-1
+2022-04-26 21:20:58,444 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Forarm-1
+2022-04-26 21:20:58,444 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Wrist-1
+2022-04-26 21:20:58,445 INFO ExportHelperExtension.cs: 1136 - Found 30 in Wrist-1
+2022-04-26 21:20:58,445 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Wrist-1
+2022-04-26 21:20:58,445 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from WristStructure-1
+2022-04-26 21:20:58,446 INFO ExportHelperExtension.cs: 1136 - Found 30 in WristStructure-1
+2022-04-26 21:20:58,446 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in WristStructure-1
+2022-04-26 21:20:58,446 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Manipulator-1
+2022-04-26 21:20:58,447 INFO ExportHelperExtension.cs: 1136 - Found 39 in Manipulator-1
+2022-04-26 21:20:58,447 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Manipulator-1
+2022-04-26 21:20:58,448 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from ArmAssembly.SLDASM
+2022-04-26 21:20:58,448 INFO ExportHelperExtension.cs: 1136 - Found 47 in ArmAssembly.SLDASM
+2022-04-26 21:20:58,448 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in ArmAssembly.SLDASM
+2022-04-26 21:20:58,449 INFO ExportHelperExtension.cs: 1148 - Proceeding through assembly components
+2022-04-26 21:20:58,449 INFO ExportHelperExtension.cs: 1160 - 7 components to check
+2022-04-26 21:20:58,449 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from base-1
+2022-04-26 21:20:58,449 INFO ExportHelperExtension.cs: 1136 - Found 27 in base-1
+2022-04-26 21:20:58,450 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in base-1
+2022-04-26 21:20:58,450 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Shoulder-1
+2022-04-26 21:20:58,450 INFO ExportHelperExtension.cs: 1136 - Found 50 in Shoulder-1
+2022-04-26 21:20:58,451 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Shoulder-1
+2022-04-26 21:20:58,451 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from UpperArm-1
+2022-04-26 21:20:58,451 INFO ExportHelperExtension.cs: 1136 - Found 41 in UpperArm-1
+2022-04-26 21:20:58,452 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in UpperArm-1
+2022-04-26 21:20:58,452 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Forarm-1
+2022-04-26 21:20:58,452 INFO ExportHelperExtension.cs: 1136 - Found 35 in Forarm-1
+2022-04-26 21:20:58,453 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Forarm-1
+2022-04-26 21:20:58,453 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Wrist-1
+2022-04-26 21:20:58,453 INFO ExportHelperExtension.cs: 1136 - Found 30 in Wrist-1
+2022-04-26 21:20:58,454 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Wrist-1
+2022-04-26 21:20:58,454 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from WristStructure-1
+2022-04-26 21:20:58,454 INFO ExportHelperExtension.cs: 1136 - Found 30 in WristStructure-1
+2022-04-26 21:20:58,455 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in WristStructure-1
+2022-04-26 21:20:58,455 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Manipulator-1
+2022-04-26 21:20:58,455 INFO ExportHelperExtension.cs: 1136 - Found 39 in Manipulator-1
+2022-04-26 21:20:58,456 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Manipulator-1
+2022-04-26 21:20:58,496 INFO ExportPropertyManager.cs: 1142 - AfterClose called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:22:40,251 INFO SwAddin.cs: 294 - Assembly export called for file ArmAssembly.SLDASM
+2022-04-26 21:22:40,252 INFO SwAddin.cs: 299 - Save is required
+2022-04-26 21:22:40,252 INFO SwAddin.cs: 313 - Saving assembly
+2022-04-26 21:22:40,312 INFO SwAddin.cs: 316 - Opening property manager
+2022-04-26 21:22:40,312 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from ArmAssembly.SLDASM
+2022-04-26 21:22:40,313 INFO ExportHelperExtension.cs: 1136 - Found 47 in ArmAssembly.SLDASM
+2022-04-26 21:22:40,313 INFO ExportHelperExtension.cs: 1145 - Found 1 features of type [CoordSys] in ArmAssembly.SLDASM
+2022-04-26 21:22:40,313 INFO ExportHelperExtension.cs: 1148 - Proceeding through assembly components
+2022-04-26 21:22:40,314 INFO ExportHelperExtension.cs: 1160 - 7 components to check
+2022-04-26 21:22:40,314 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from base-1
+2022-04-26 21:22:40,314 INFO ExportHelperExtension.cs: 1136 - Found 27 in base-1
+2022-04-26 21:22:40,315 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in base-1
+2022-04-26 21:22:40,315 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Shoulder-1
+2022-04-26 21:22:40,315 INFO ExportHelperExtension.cs: 1136 - Found 50 in Shoulder-1
+2022-04-26 21:22:40,316 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Shoulder-1
+2022-04-26 21:22:40,316 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from UpperArm-1
+2022-04-26 21:22:40,316 INFO ExportHelperExtension.cs: 1136 - Found 41 in UpperArm-1
+2022-04-26 21:22:40,317 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in UpperArm-1
+2022-04-26 21:22:40,317 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Forarm-1
+2022-04-26 21:22:40,318 INFO ExportHelperExtension.cs: 1136 - Found 35 in Forarm-1
+2022-04-26 21:22:40,318 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Forarm-1
+2022-04-26 21:22:40,318 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Wrist-1
+2022-04-26 21:22:40,319 INFO ExportHelperExtension.cs: 1136 - Found 30 in Wrist-1
+2022-04-26 21:22:40,320 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Wrist-1
+2022-04-26 21:22:40,320 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from WristStructure-1
+2022-04-26 21:22:40,320 INFO ExportHelperExtension.cs: 1136 - Found 30 in WristStructure-1
+2022-04-26 21:22:40,321 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in WristStructure-1
+2022-04-26 21:22:40,321 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Manipulator-1
+2022-04-26 21:22:40,321 INFO ExportHelperExtension.cs: 1136 - Found 39 in Manipulator-1
+2022-04-26 21:22:40,322 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Manipulator-1
+2022-04-26 21:22:40,322 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from ArmAssembly.SLDASM
+2022-04-26 21:22:40,322 INFO ExportHelperExtension.cs: 1136 - Found 47 in ArmAssembly.SLDASM
+2022-04-26 21:22:40,323 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in ArmAssembly.SLDASM
+2022-04-26 21:22:40,323 INFO ExportHelperExtension.cs: 1148 - Proceeding through assembly components
+2022-04-26 21:22:40,323 INFO ExportHelperExtension.cs: 1160 - 7 components to check
+2022-04-26 21:22:40,324 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from base-1
+2022-04-26 21:22:40,324 INFO ExportHelperExtension.cs: 1136 - Found 27 in base-1
+2022-04-26 21:22:40,324 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in base-1
+2022-04-26 21:22:40,325 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Shoulder-1
+2022-04-26 21:22:40,325 INFO ExportHelperExtension.cs: 1136 - Found 50 in Shoulder-1
+2022-04-26 21:22:40,325 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Shoulder-1
+2022-04-26 21:22:40,326 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from UpperArm-1
+2022-04-26 21:22:40,326 INFO ExportHelperExtension.cs: 1136 - Found 41 in UpperArm-1
+2022-04-26 21:22:40,326 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in UpperArm-1
+2022-04-26 21:22:40,327 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Forarm-1
+2022-04-26 21:22:40,327 INFO ExportHelperExtension.cs: 1136 - Found 35 in Forarm-1
+2022-04-26 21:22:40,328 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Forarm-1
+2022-04-26 21:22:40,328 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Wrist-1
+2022-04-26 21:22:40,328 INFO ExportHelperExtension.cs: 1136 - Found 30 in Wrist-1
+2022-04-26 21:22:40,329 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Wrist-1
+2022-04-26 21:22:40,329 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from WristStructure-1
+2022-04-26 21:22:40,329 INFO ExportHelperExtension.cs: 1136 - Found 30 in WristStructure-1
+2022-04-26 21:22:40,330 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in WristStructure-1
+2022-04-26 21:22:40,331 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Manipulator-1
+2022-04-26 21:22:40,331 INFO ExportHelperExtension.cs: 1136 - Found 39 in Manipulator-1
+2022-04-26 21:22:40,331 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Manipulator-1
+2022-04-26 21:22:40,462 INFO SwAddin.cs: 339 - Loading config tree
+2022-04-26 21:22:40,463 INFO ConfigurationSerialization.cs: 276 - URDF Configuration found
+nametruebase_linkxyztrue9.1830074983591922E-190.0156064900891439551.5715252581589567E-18rpytrue000originfalsefalsevaluetrue0.93972387307473026massfalseixxtrue0.0025142902225504422ixytrue8.02209898558041E-21ixztrue-7.374852413660824E-20iyytrue0.0044229329573873041iyztrue2.2568808327940613E-20izztrue0.0021336882069818023inertiafalseinertialfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruenametruergbatrue0.7921568627450980.819607843137254880.933333333333333351colorfalsefilenametruetexturefalsematerialfalsevisualfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruecollisionfalsenametruetypetruexyztrue000rpytrue000originfalsefalselinktrueparenttruelinktruechildtruexyztrue000axisfalselowerfalseupperfalseefforttruevelocitytruelimitfalserisingfalsefallingfalsecalibrationfalsedampingfalsefrictionfalsedynamicsfalsesoft_upper_limitfalsesoft_lower_limitfalsek_positionfalsek_velocitytruesafety_controllerfalsejointtruemultiplierfalseoffsetfalsemimicfalsejointfalseOrigin_globallinktruefalsesDYAAAUAAAD//v8SYgBhAHMAZQAtADEAQABBAHIAbQBBAHMAcwBlAG0AYgBsAHkABAAAABAAAAABAAAAAQAAABgAAAA=falsefalse
+2022-04-26 21:22:40,464 INFO LinkNode.cs: 35 - Building node base_link
+2022-04-26 21:22:40,464 INFO CommonSwOperations.cs: 221 - Loading SolidWorks components for base_link from E:\Robotics\WR\URDF\ArmAssembly.SLDASM
+2022-04-26 21:22:40,464 INFO CommonSwOperations.cs: 245 - Loading component with PID ?6 ???b a s e - 1 @ A r m A s s e m b l y
+2022-04-26 21:22:40,464 INFO CommonSwOperations.cs: 254 - Successfully loaded component E:\Robotics\WR\URDF\base.SLDPRT
+2022-04-26 21:22:40,465 INFO CommonSwOperations.cs: 230 - Loaded 1 components for link base_link
+2022-04-26 21:22:40,495 INFO SwAddin.cs: 344 - Showing property manager
+2022-04-26 21:22:43,955 INFO ExportPropertyManager.cs: 1036 - OnListboxSelectionChanged called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:22:44,696 INFO ExportPropertyManager.cs: 1036 - OnListboxSelectionChanged called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:22:46,553 INFO ExportPropertyManager.cs: 1036 - OnListboxSelectionChanged called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:22:49,426 INFO ExportPropertyManager.cs: 1142 - AfterClose called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:25:55,950 INFO SwAddin.cs: 294 - Assembly export called for file ArmAssembly.SLDASM
+2022-04-26 21:25:55,950 INFO SwAddin.cs: 299 - Save is required
+2022-04-26 21:25:55,951 INFO SwAddin.cs: 313 - Saving assembly
+2022-04-26 21:25:56,086 INFO SwAddin.cs: 316 - Opening property manager
+2022-04-26 21:25:56,087 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from ArmAssembly.SLDASM
+2022-04-26 21:25:56,088 INFO ExportHelperExtension.cs: 1136 - Found 53 in ArmAssembly.SLDASM
+2022-04-26 21:25:56,088 INFO ExportHelperExtension.cs: 1145 - Found 1 features of type [CoordSys] in ArmAssembly.SLDASM
+2022-04-26 21:25:56,088 INFO ExportHelperExtension.cs: 1148 - Proceeding through assembly components
+2022-04-26 21:25:56,089 INFO ExportHelperExtension.cs: 1160 - 7 components to check
+2022-04-26 21:25:56,089 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from base-1
+2022-04-26 21:25:56,089 INFO ExportHelperExtension.cs: 1136 - Found 27 in base-1
+2022-04-26 21:25:56,090 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in base-1
+2022-04-26 21:25:56,090 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Shoulder-1
+2022-04-26 21:25:56,090 INFO ExportHelperExtension.cs: 1136 - Found 50 in Shoulder-1
+2022-04-26 21:25:56,091 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Shoulder-1
+2022-04-26 21:25:56,091 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from UpperArm-1
+2022-04-26 21:25:56,091 INFO ExportHelperExtension.cs: 1136 - Found 41 in UpperArm-1
+2022-04-26 21:25:56,092 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in UpperArm-1
+2022-04-26 21:25:56,092 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Forarm-1
+2022-04-26 21:25:56,093 INFO ExportHelperExtension.cs: 1136 - Found 35 in Forarm-1
+2022-04-26 21:25:56,093 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Forarm-1
+2022-04-26 21:25:56,094 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Wrist-1
+2022-04-26 21:25:56,095 INFO ExportHelperExtension.cs: 1136 - Found 30 in Wrist-1
+2022-04-26 21:25:56,096 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Wrist-1
+2022-04-26 21:25:56,096 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from WristStructure-1
+2022-04-26 21:25:56,096 INFO ExportHelperExtension.cs: 1136 - Found 30 in WristStructure-1
+2022-04-26 21:25:56,097 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in WristStructure-1
+2022-04-26 21:25:56,097 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Manipulator-1
+2022-04-26 21:25:56,097 INFO ExportHelperExtension.cs: 1136 - Found 39 in Manipulator-1
+2022-04-26 21:25:56,098 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Manipulator-1
+2022-04-26 21:25:56,098 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from ArmAssembly.SLDASM
+2022-04-26 21:25:56,099 INFO ExportHelperExtension.cs: 1136 - Found 53 in ArmAssembly.SLDASM
+2022-04-26 21:25:56,099 INFO ExportHelperExtension.cs: 1145 - Found 6 features of type [RefAxis] in ArmAssembly.SLDASM
+2022-04-26 21:25:56,099 INFO ExportHelperExtension.cs: 1148 - Proceeding through assembly components
+2022-04-26 21:25:56,100 INFO ExportHelperExtension.cs: 1160 - 7 components to check
+2022-04-26 21:25:56,100 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from base-1
+2022-04-26 21:25:56,100 INFO ExportHelperExtension.cs: 1136 - Found 27 in base-1
+2022-04-26 21:25:56,101 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in base-1
+2022-04-26 21:25:56,101 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Shoulder-1
+2022-04-26 21:25:56,101 INFO ExportHelperExtension.cs: 1136 - Found 50 in Shoulder-1
+2022-04-26 21:25:56,102 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Shoulder-1
+2022-04-26 21:25:56,102 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from UpperArm-1
+2022-04-26 21:25:56,102 INFO ExportHelperExtension.cs: 1136 - Found 41 in UpperArm-1
+2022-04-26 21:25:56,103 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in UpperArm-1
+2022-04-26 21:25:56,103 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Forarm-1
+2022-04-26 21:25:56,103 INFO ExportHelperExtension.cs: 1136 - Found 35 in Forarm-1
+2022-04-26 21:25:56,103 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Forarm-1
+2022-04-26 21:25:56,104 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Wrist-1
+2022-04-26 21:25:56,104 INFO ExportHelperExtension.cs: 1136 - Found 30 in Wrist-1
+2022-04-26 21:25:56,104 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Wrist-1
+2022-04-26 21:25:56,105 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from WristStructure-1
+2022-04-26 21:25:56,105 INFO ExportHelperExtension.cs: 1136 - Found 30 in WristStructure-1
+2022-04-26 21:25:56,105 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in WristStructure-1
+2022-04-26 21:25:56,106 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Manipulator-1
+2022-04-26 21:25:56,106 INFO ExportHelperExtension.cs: 1136 - Found 39 in Manipulator-1
+2022-04-26 21:25:56,106 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Manipulator-1
+2022-04-26 21:25:56,235 INFO SwAddin.cs: 339 - Loading config tree
+2022-04-26 21:25:56,236 INFO ConfigurationSerialization.cs: 276 - URDF Configuration found
+nametruebase_linkxyztrue9.1830074983591922E-190.0156064900891439551.5715252581589567E-18rpytrue000originfalsefalsevaluetrue0.93972387307473026massfalseixxtrue0.0025142902225504422ixytrue8.02209898558041E-21ixztrue-7.374852413660824E-20iyytrue0.0044229329573873041iyztrue2.2568808327940613E-20izztrue0.0021336882069818023inertiafalseinertialfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruenametruergbatrue0.7921568627450980.819607843137254880.933333333333333351colorfalsefilenametruetexturefalsematerialfalsevisualfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruecollisionfalsenametruetypetruexyztrue000rpytrue000originfalsefalselinktrueparenttruelinktruechildtruexyztrue000axisfalselowerfalseupperfalseefforttruevelocitytruelimitfalserisingfalsefallingfalsecalibrationfalsedampingfalsefrictionfalsedynamicsfalsesoft_upper_limitfalsesoft_lower_limitfalsek_positionfalsek_velocitytruesafety_controllerfalsejointtruemultiplierfalseoffsetfalsemimicfalsejointfalseOrigin_globallinktruefalsesDYAAAUAAAD//v8SYgBhAHMAZQAtADEAQABBAHIAbQBBAHMAcwBlAG0AYgBsAHkABAAAABAAAAABAAAAAQAAABgAAAA=falsefalse
+2022-04-26 21:25:56,236 INFO LinkNode.cs: 35 - Building node base_link
+2022-04-26 21:25:56,237 INFO CommonSwOperations.cs: 221 - Loading SolidWorks components for base_link from E:\Robotics\WR\URDF\ArmAssembly.SLDASM
+2022-04-26 21:25:56,237 INFO CommonSwOperations.cs: 245 - Loading component with PID ?6 ???b a s e - 1 @ A r m A s s e m b l y
+2022-04-26 21:25:56,237 INFO CommonSwOperations.cs: 254 - Successfully loaded component E:\Robotics\WR\URDF\base.SLDPRT
+2022-04-26 21:25:56,238 INFO CommonSwOperations.cs: 230 - Loaded 1 components for link base_link
+2022-04-26 21:25:56,271 INFO SwAddin.cs: 344 - Showing property manager
+2022-04-26 21:26:17,760 INFO ExportPropertyManager.cs: 1018 - OnComboboxSelectionChanged called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:26:21,486 INFO ExportPropertyManager.cs: 1018 - OnComboboxSelectionChanged called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:26:29,220 INFO ExportPropertyManager.cs: 1136 - OnNumberBoxTrackingCompleted called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:26:48,883 INFO ExportPropertyManager.cs: 1018 - OnComboboxSelectionChanged called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:27:03,931 INFO ExportPropertyManager.cs: 1136 - OnNumberBoxTrackingCompleted called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:27:16,584 INFO ExportPropertyManager.cs: 1018 - OnComboboxSelectionChanged called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:27:31,267 INFO ExportPropertyManager.cs: 1136 - OnNumberBoxTrackingCompleted called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:27:44,310 INFO ExportPropertyManager.cs: 1018 - OnComboboxSelectionChanged called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:27:51,841 INFO ExportPropertyManager.cs: 1136 - OnNumberBoxTrackingCompleted called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:28:03,077 INFO ExportPropertyManager.cs: 1018 - OnComboboxSelectionChanged called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:28:11,859 INFO ExportPropertyManager.cs: 1136 - OnNumberBoxTrackingCompleted called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:28:24,385 INFO ExportPropertyManager.cs: 1018 - OnComboboxSelectionChanged called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:28:26,812 INFO ExportPropertyManager.cs: 1136 - OnNumberBoxTrackingCompleted called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 21:28:35,610 INFO ExportPropertyManager.cs: 1018 - OnComboboxSelectionChanged called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 22:16:01,745 INFO ExportPropertyManager.cs: 422 - Configuration saved
+2022-04-26 22:16:01,747 INFO ConfigurationSerialization.cs: 276 - URDF Configuration found
+nametruebase_linkxyztrue9.1830074983591922E-190.0156064900891439551.5715252581589567E-18rpytrue000originfalsefalsevaluetrue0.93972387307473026massfalseixxtrue0.0025142902225504422ixytrue8.02209898558041E-21ixztrue-7.374852413660824E-20iyytrue0.0044229329573873041iyztrue2.2568808327940613E-20izztrue0.0021336882069818023inertiafalseinertialfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruenametruergbatrue0.7921568627450980.819607843137254880.933333333333333351colorfalsefilenametruetexturefalsematerialfalsevisualfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruecollisionfalsenametruetypetruexyztrue000rpytrue000originfalsefalselinktrueparenttruelinktruechildtruexyztrue000axisfalselowerfalseupperfalseefforttruevelocitytruelimitfalserisingfalsefallingfalsecalibrationfalsedampingfalsefrictionfalsedynamicsfalsesoft_upper_limitfalsesoft_lower_limitfalsek_positionfalsek_velocitytruesafety_controllerfalsejointtruemultiplierfalseoffsetfalsemimicfalsejointfalseOrigin_globallinktruefalsesDYAAAUAAAD//v8SYgBhAHMAZQAtADEAQABBAHIAbQBBAHMAcwBlAG0AYgBsAHkABAAAABAAAAABAAAAAQAAABgAAAA=falsefalse
+2022-04-26 22:16:01,816 INFO ExportHelperExtension.cs: 347 - Creating joint turntable_link
+2022-04-26 22:16:01,823 INFO ExportHelperExtension.cs: 1397 - Fixing components for base_link
+2022-04-26 22:16:01,824 INFO ExportHelperExtension.cs: 1402 - Fixing 24
+2022-04-26 22:16:01,824 INFO ExportHelperExtension.cs: 1409 - Component 24 is already fixed
+2022-04-26 22:16:02,369 INFO : 0 - R1: 1, System.__ComObject, 1, System.Double[]
+2022-04-26 22:16:02,373 INFO ExportHelperExtension.cs: 841 - R2: 0, 0
+2022-04-26 22:16:02,374 INFO ExportHelperExtension.cs: 849 - L1: 0
+2022-04-26 22:16:02,374 INFO ExportHelperExtension.cs: 857 - L2: 0
+2022-04-26 22:16:04,962 WARN ExportHelperExtension.cs: 351 - Creating joint from parent base_link to child turntable_link failed
+2022-04-26 22:16:04,971 INFO ExportHelperExtension.cs: 347 - Creating joint upperArm_link
+2022-04-26 22:16:04,971 INFO ExportHelperExtension.cs: 1397 - Fixing components for turntable_link
+2022-04-26 22:16:04,972 INFO ExportHelperExtension.cs: 1402 - Fixing 25
+2022-04-26 22:16:04,972 INFO ExportHelperExtension.cs: 1402 - Fixing 24
+2022-04-26 22:16:04,972 INFO ExportHelperExtension.cs: 1409 - Component 24 is already fixed
+2022-04-26 22:16:05,267 INFO ExportHelperExtension.cs: 828 - R1: 1, System.__ComObject, 1, System.Double[]
+2022-04-26 22:16:05,267 INFO ExportHelperExtension.cs: 841 - R2: 0, 0
+2022-04-26 22:16:05,268 INFO ExportHelperExtension.cs: 849 - L1: 0
+2022-04-26 22:16:05,268 INFO ExportHelperExtension.cs: 857 - L2: 0
+2022-04-26 22:16:05,268 INFO ExportHelperExtension.cs: 1352 - Unfixing component 25
+2022-04-26 22:16:06,570 WARN ExportHelperExtension.cs: 351 - Creating joint from parent turntable_link to child upperArm_link failed
+2022-04-26 22:16:06,575 INFO ExportHelperExtension.cs: 347 - Creating joint forearm_link
+2022-04-26 22:16:06,576 INFO ExportHelperExtension.cs: 1397 - Fixing components for upperArm_link
+2022-04-26 22:16:06,576 INFO ExportHelperExtension.cs: 1402 - Fixing 26
+2022-04-26 22:16:06,576 INFO ExportHelperExtension.cs: 1402 - Fixing 25
+2022-04-26 22:16:06,577 INFO ExportHelperExtension.cs: 1402 - Fixing 24
+2022-04-26 22:16:06,577 INFO ExportHelperExtension.cs: 1409 - Component 24 is already fixed
+2022-04-26 22:16:06,893 INFO ExportHelperExtension.cs: 828 - R1: 1, System.__ComObject, 1, System.Double[]
+2022-04-26 22:16:06,893 INFO ExportHelperExtension.cs: 841 - R2: 0, 0
+2022-04-26 22:16:06,893 INFO ExportHelperExtension.cs: 849 - L1: 0
+2022-04-26 22:16:06,894 INFO ExportHelperExtension.cs: 857 - L2: 0
+2022-04-26 22:16:06,894 INFO ExportHelperExtension.cs: 1352 - Unfixing component 26
+2022-04-26 22:16:06,894 INFO ExportHelperExtension.cs: 1352 - Unfixing component 25
+2022-04-26 22:16:08,241 WARN ExportHelperExtension.cs: 351 - Creating joint from parent upperArm_link to child forearm_link failed
+2022-04-26 22:16:08,248 INFO ExportHelperExtension.cs: 347 - Creating joint wrist_link
+2022-04-26 22:16:08,248 INFO ExportHelperExtension.cs: 1397 - Fixing components for forearm_link
+2022-04-26 22:16:08,248 INFO ExportHelperExtension.cs: 1402 - Fixing 35
+2022-04-26 22:16:08,249 INFO ExportHelperExtension.cs: 1402 - Fixing 26
+2022-04-26 22:16:08,249 INFO ExportHelperExtension.cs: 1402 - Fixing 25
+2022-04-26 22:16:08,249 INFO ExportHelperExtension.cs: 1402 - Fixing 24
+2022-04-26 22:16:08,250 INFO ExportHelperExtension.cs: 1409 - Component 24 is already fixed
+2022-04-26 22:16:08,561 INFO ExportHelperExtension.cs: 828 - R1: 1, System.__ComObject, 1, System.Double[]
+2022-04-26 22:16:08,562 INFO ExportHelperExtension.cs: 841 - R2: 0, 0
+2022-04-26 22:16:08,562 INFO ExportHelperExtension.cs: 849 - L1: 0
+2022-04-26 22:16:08,562 INFO ExportHelperExtension.cs: 857 - L2: 0
+2022-04-26 22:16:08,563 INFO ExportHelperExtension.cs: 1352 - Unfixing component 35
+2022-04-26 22:16:08,563 INFO ExportHelperExtension.cs: 1352 - Unfixing component 26
+2022-04-26 22:16:08,563 INFO ExportHelperExtension.cs: 1352 - Unfixing component 25
+2022-04-26 22:16:09,913 WARN ExportHelperExtension.cs: 351 - Creating joint from parent forearm_link to child wrist_link failed
+2022-04-26 22:16:09,916 INFO ExportHelperExtension.cs: 347 - Creating joint carpus_link
+2022-04-26 22:16:09,916 INFO ExportHelperExtension.cs: 1397 - Fixing components for wrist_link
+2022-04-26 22:16:09,916 INFO ExportHelperExtension.cs: 1402 - Fixing 40
+2022-04-26 22:16:09,917 INFO ExportHelperExtension.cs: 1402 - Fixing 35
+2022-04-26 22:16:09,917 INFO ExportHelperExtension.cs: 1402 - Fixing 26
+2022-04-26 22:16:09,917 INFO ExportHelperExtension.cs: 1402 - Fixing 25
+2022-04-26 22:16:09,918 INFO ExportHelperExtension.cs: 1402 - Fixing 24
+2022-04-26 22:16:09,918 INFO ExportHelperExtension.cs: 1409 - Component 24 is already fixed
+2022-04-26 22:16:10,240 INFO ExportHelperExtension.cs: 828 - R1: 1, System.__ComObject, 1, System.Double[]
+2022-04-26 22:16:10,241 INFO ExportHelperExtension.cs: 841 - R2: 0, 0
+2022-04-26 22:16:10,241 INFO ExportHelperExtension.cs: 849 - L1: 0
+2022-04-26 22:16:10,241 INFO ExportHelperExtension.cs: 857 - L2: 0
+2022-04-26 22:16:10,242 INFO ExportHelperExtension.cs: 1352 - Unfixing component 40
+2022-04-26 22:16:10,242 INFO ExportHelperExtension.cs: 1352 - Unfixing component 35
+2022-04-26 22:16:10,242 INFO ExportHelperExtension.cs: 1352 - Unfixing component 26
+2022-04-26 22:16:10,242 INFO ExportHelperExtension.cs: 1352 - Unfixing component 25
+2022-04-26 22:16:11,595 WARN ExportHelperExtension.cs: 351 - Creating joint from parent wrist_link to child carpus_link failed
+2022-04-26 22:16:11,599 INFO ExportHelperExtension.cs: 347 - Creating joint endEffector_link
+2022-04-26 22:16:11,599 INFO ExportHelperExtension.cs: 1397 - Fixing components for carpus_link
+2022-04-26 22:16:11,600 INFO ExportHelperExtension.cs: 1402 - Fixing 39
+2022-04-26 22:16:11,600 INFO ExportHelperExtension.cs: 1402 - Fixing 40
+2022-04-26 22:16:11,600 INFO ExportHelperExtension.cs: 1402 - Fixing 35
+2022-04-26 22:16:11,601 INFO ExportHelperExtension.cs: 1402 - Fixing 26
+2022-04-26 22:16:11,601 INFO ExportHelperExtension.cs: 1402 - Fixing 25
+2022-04-26 22:16:11,601 INFO ExportHelperExtension.cs: 1402 - Fixing 24
+2022-04-26 22:16:11,607 INFO ExportHelperExtension.cs: 1409 - Component 24 is already fixed
+2022-04-26 22:16:12,003 INFO ExportHelperExtension.cs: 828 - R1: 1, System.__ComObject, 1, System.Double[]
+2022-04-26 22:16:12,004 INFO ExportHelperExtension.cs: 841 - R2: 0, 0
+2022-04-26 22:16:12,004 INFO ExportHelperExtension.cs: 849 - L1: 0
+2022-04-26 22:16:12,005 INFO ExportHelperExtension.cs: 857 - L2: 0
+2022-04-26 22:16:12,005 INFO ExportHelperExtension.cs: 1352 - Unfixing component 39
+2022-04-26 22:16:12,005 INFO ExportHelperExtension.cs: 1352 - Unfixing component 40
+2022-04-26 22:16:12,006 INFO ExportHelperExtension.cs: 1352 - Unfixing component 35
+2022-04-26 22:16:12,006 INFO ExportHelperExtension.cs: 1352 - Unfixing component 26
+2022-04-26 22:16:12,006 INFO ExportHelperExtension.cs: 1352 - Unfixing component 25
+2022-04-26 22:16:13,493 WARN ExportHelperExtension.cs: 351 - Creating joint from parent carpus_link to child endEffector_link failed
+2022-04-26 22:16:13,569 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from ArmAssembly.SLDASM
+2022-04-26 22:16:13,570 INFO ExportHelperExtension.cs: 1136 - Found 59 in ArmAssembly.SLDASM
+2022-04-26 22:16:13,570 INFO ExportHelperExtension.cs: 1145 - Found 7 features of type [CoordSys] in ArmAssembly.SLDASM
+2022-04-26 22:16:13,570 INFO ExportHelperExtension.cs: 1148 - Proceeding through assembly components
+2022-04-26 22:16:13,571 INFO ExportHelperExtension.cs: 1160 - 7 components to check
+2022-04-26 22:16:13,571 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from base-1
+2022-04-26 22:16:13,571 INFO ExportHelperExtension.cs: 1136 - Found 27 in base-1
+2022-04-26 22:16:13,572 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in base-1
+2022-04-26 22:16:13,572 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Shoulder-1
+2022-04-26 22:16:13,572 INFO ExportHelperExtension.cs: 1136 - Found 50 in Shoulder-1
+2022-04-26 22:16:13,573 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Shoulder-1
+2022-04-26 22:16:13,573 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from UpperArm-1
+2022-04-26 22:16:13,573 INFO ExportHelperExtension.cs: 1136 - Found 41 in UpperArm-1
+2022-04-26 22:16:13,574 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in UpperArm-1
+2022-04-26 22:16:13,574 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Forarm-1
+2022-04-26 22:16:13,575 INFO ExportHelperExtension.cs: 1136 - Found 35 in Forarm-1
+2022-04-26 22:16:13,575 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Forarm-1
+2022-04-26 22:16:13,575 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Wrist-1
+2022-04-26 22:16:13,576 INFO ExportHelperExtension.cs: 1136 - Found 30 in Wrist-1
+2022-04-26 22:16:13,576 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Wrist-1
+2022-04-26 22:16:13,576 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from WristStructure-1
+2022-04-26 22:16:13,577 INFO ExportHelperExtension.cs: 1136 - Found 30 in WristStructure-1
+2022-04-26 22:16:13,577 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in WristStructure-1
+2022-04-26 22:16:13,577 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [CoordSys] from Manipulator-1
+2022-04-26 22:16:13,578 INFO ExportHelperExtension.cs: 1136 - Found 39 in Manipulator-1
+2022-04-26 22:16:13,578 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [CoordSys] in Manipulator-1
+2022-04-26 22:16:13,578 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from ArmAssembly.SLDASM
+2022-04-26 22:16:13,579 INFO ExportHelperExtension.cs: 1136 - Found 59 in ArmAssembly.SLDASM
+2022-04-26 22:16:13,579 INFO ExportHelperExtension.cs: 1145 - Found 6 features of type [RefAxis] in ArmAssembly.SLDASM
+2022-04-26 22:16:13,579 INFO ExportHelperExtension.cs: 1148 - Proceeding through assembly components
+2022-04-26 22:16:13,580 INFO ExportHelperExtension.cs: 1160 - 7 components to check
+2022-04-26 22:16:13,580 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from base-1
+2022-04-26 22:16:13,580 INFO ExportHelperExtension.cs: 1136 - Found 27 in base-1
+2022-04-26 22:16:13,580 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in base-1
+2022-04-26 22:16:13,581 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Shoulder-1
+2022-04-26 22:16:13,581 INFO ExportHelperExtension.cs: 1136 - Found 50 in Shoulder-1
+2022-04-26 22:16:13,581 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Shoulder-1
+2022-04-26 22:16:13,582 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from UpperArm-1
+2022-04-26 22:16:13,582 INFO ExportHelperExtension.cs: 1136 - Found 41 in UpperArm-1
+2022-04-26 22:16:13,582 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in UpperArm-1
+2022-04-26 22:16:13,583 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Forarm-1
+2022-04-26 22:16:13,583 INFO ExportHelperExtension.cs: 1136 - Found 35 in Forarm-1
+2022-04-26 22:16:13,583 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Forarm-1
+2022-04-26 22:16:13,584 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Wrist-1
+2022-04-26 22:16:13,584 INFO ExportHelperExtension.cs: 1136 - Found 30 in Wrist-1
+2022-04-26 22:16:13,584 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Wrist-1
+2022-04-26 22:16:13,585 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from WristStructure-1
+2022-04-26 22:16:13,585 INFO ExportHelperExtension.cs: 1136 - Found 30 in WristStructure-1
+2022-04-26 22:16:13,585 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in WristStructure-1
+2022-04-26 22:16:13,586 INFO ExportHelperExtension.cs: 1125 - Retrieving features of type [RefAxis] from Manipulator-1
+2022-04-26 22:16:13,586 INFO ExportHelperExtension.cs: 1136 - Found 39 in Manipulator-1
+2022-04-26 22:16:13,586 INFO ExportHelperExtension.cs: 1145 - Found 0 features of type [RefAxis] in Manipulator-1
+2022-04-26 22:16:13,635 INFO ExportPropertyManager.cs: 1142 - AfterClose called. This method no longer throws an Exception. It just silently does nothing. Ok, except for this logging message
+2022-04-26 22:17:26,131 INFO AssemblyExportForm.cs: 253 - Completing URDF export
+2022-04-26 22:17:26,137 INFO ConfigurationSerialization.cs: 276 - URDF Configuration found
+nametruebase_linkxyztrue9.1830074983591922E-190.0156064900891439551.5715252581589567E-18rpytrue000originfalsefalsevaluetrue0.93972387307473026massfalseixxtrue0.0025142902225504422ixytrue8.02209898558041E-21ixztrue-7.374852413660824E-20iyytrue0.0044229329573873041iyztrue2.2568808327940613E-20izztrue0.0021336882069818023inertiafalseinertialfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruenametruergbatrue0.7921568627450980.819607843137254880.933333333333333351colorfalsefilenametruetexturefalsematerialfalsevisualfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruecollisionfalsenametruetypetruexyztrue000rpytrue000originfalsefalselinktrueparenttruelinktruechildtruexyztrue000axisfalselowerfalseupperfalseefforttruevelocitytruelimitfalserisingfalsefallingfalsecalibrationfalsedampingfalsefrictionfalsedynamicsfalsesoft_upper_limitfalsesoft_lower_limitfalsek_positionfalsek_velocitytruesafety_controllerfalsejointtruemultiplierfalseoffsetfalsemimicfalsejointfalseOrigin_globallinktruenametrueturntable_linkxyztrue000rpytrue000originfalsefalsevaluetrue0massfalseixxtrue0ixytrue0ixztrue0iyytrue0iyztrue0izztrue0inertiafalseinertialfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruenametruergbatrue1111colorfalsefilenametruetexturefalsematerialfalsevisualfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruecollisionfalsenametrueturntable_jointtypetrueAutomatically Detectxyztrue000rpytrue000originfalsefalselinktrueparenttruelinktruechildtruexyztrue000axisfalselowerfalseupperfalseefforttruevelocitytruelimitfalserisingfalsefallingfalsecalibrationfalsedampingfalsefrictionfalsedynamicsfalsesoft_upper_limitfalsesoft_lower_limitfalsek_positionfalsek_velocitytruesafety_controllerfalsejointtruemultiplierfalseoffsetfalsemimicfalsejointfalseAxis1Automatically GeneratelinktruenametrueupperArm_linkxyztrue000rpytrue000originfalsefalsevaluetrue0massfalseixxtrue0ixytrue0ixztrue0iyytrue0iyztrue0izztrue0inertiafalseinertialfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruenametruergbatrue1111colorfalsefilenametruetexturefalsematerialfalsevisualfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruecollisionfalsenametrueshoulder_jointtypetrueAutomatically Detectxyztrue000rpytrue000originfalsefalselinktrueparenttruelinktruechildtruexyztrue000axisfalselowerfalseupperfalseefforttruevelocitytruelimitfalserisingfalsefallingfalsecalibrationfalsedampingfalsefrictionfalsedynamicsfalsesoft_upper_limitfalsesoft_lower_limitfalsek_positionfalsek_velocitytruesafety_controllerfalsejointtruemultiplierfalseoffsetfalsemimicfalsejointfalseAxis2Automatically Generatelinktruenametrueforearm_linkxyztrue000rpytrue000originfalsefalsevaluetrue0massfalseixxtrue0ixytrue0ixztrue0iyytrue0iyztrue0izztrue0inertiafalseinertialfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruenametruergbatrue1111colorfalsefilenametruetexturefalsematerialfalsevisualfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruecollisionfalsenametrueelbowPitch_jointtypetrueAutomatically Detectxyztrue000rpytrue000originfalsefalselinktrueparenttruelinktruechildtruexyztrue000axisfalselowerfalseupperfalseefforttruevelocitytruelimitfalserisingfalsefallingfalsecalibrationfalsedampingfalsefrictionfalsedynamicsfalsesoft_upper_limitfalsesoft_lower_limitfalsek_positionfalsek_velocitytruesafety_controllerfalsejointtruemultiplierfalseoffsetfalsemimicfalsejointfalseAxis3Automatically Generatelinktruenametruewrist_linkxyztrue000rpytrue000originfalsefalsevaluetrue0massfalseixxtrue0ixytrue0ixztrue0iyytrue0iyztrue0izztrue0inertiafalseinertialfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruenametruergbatrue1111colorfalsefilenametruetexturefalsematerialfalsevisualfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruecollisionfalsenametrueelbowRoll_jointtypetrueAutomatically Detectxyztrue000rpytrue000originfalsefalselinktrueparenttruelinktruechildtruexyztrue000axisfalselowerfalseupperfalseefforttruevelocitytruelimitfalserisingfalsefallingfalsecalibrationfalsedampingfalsefrictionfalsedynamicsfalsesoft_upper_limitfalsesoft_lower_limitfalsek_positionfalsek_velocitytruesafety_controllerfalsejointtruemultiplierfalseoffsetfalsemimicfalsejointfalseAxis4Automatically Generatelinktruenametruecarpus_linkxyztrue000rpytrue000originfalsefalsevaluetrue0massfalseixxtrue0ixytrue0ixztrue0iyytrue0iyztrue0izztrue0inertiafalseinertialfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruenametruergbatrue1111colorfalsefilenametruetexturefalsematerialfalsevisualfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruecollisionfalsenametruewristPitch_jointtypetrueAutomatically Detectxyztrue000rpytrue000originfalsefalselinktrueparenttruelinktruechildtruexyztrue000axisfalselowerfalseupperfalseefforttruevelocitytruelimitfalserisingfalsefallingfalsecalibrationfalsedampingfalsefrictionfalsedynamicsfalsesoft_upper_limitfalsesoft_lower_limitfalsek_positionfalsek_velocitytruesafety_controllerfalsejointtruemultiplierfalseoffsetfalsemimicfalsejointfalseAxis5Automatically GeneratelinktruenametrueendEffector_linkxyztrue000rpytrue000originfalsefalsevaluetrue0massfalseixxtrue0ixytrue0ixztrue0iyytrue0iyztrue0izztrue0inertiafalseinertialfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruenametruergbatrue1111colorfalsefilenametruetexturefalsematerialfalsevisualfalsexyztrue000rpytrue000originfalsefalsefilenametruemeshfalsegeometrytruecollisionfalsenametruewristRoll_linktypetrueAutomatically Detectxyztrue000rpytrue000originfalsefalselinktrueparenttruelinktruechildtruexyztrue000axisfalselowerfalseupperfalseefforttruevelocitytruelimitfalserisingfalsefallingfalsecalibrationfalsedampingfalsefrictionfalsedynamicsfalsesoft_upper_limitfalsesoft_lower_limitfalsek_positionfalsek_velocitytruesafety_controllerfalsejointtruemultiplierfalseoffsetfalsemimicfalsejointfalseAxis6Automatically GeneratelinktruefalsesDYAAAUAAAD//v8ZTQBhAG4AaQBwAHUAbABhAHQAbwByAC0AMQBAAEEAcgBtAEEAcwBzAGUAbQBiAGwAeQAEAAAAEAAAAAEAAAABAAAAJAAAAA==falsefalsefalsesDYAAAUAAAD//v8TVwByAGkAcwB0AC0AMQBAAEEAcgBtAEEAcwBzAGUAbQBiAGwAeQAEAAAAEAAAAAEAAAABAAAAJwAAAA==falsefalsefalsesDYAAAUAAAD//v8cVwByAGkAcwB0AFMAdAByAHUAYwB0AHUAcgBlAC0AMQBAAEEAcgBtAEEAcwBzAGUAbQBiAGwAeQAEAAAAEAAAAAEAAAABAAAAKAAAAA==falsefalsefalsesDYAAAUAAAD//v8URgBvAHIAYQByAG0ALQAxAEAAQQByAG0AQQBzAHMAZQBtAGIAbAB5AAQAAAAQAAAAAQAAAAEAAAAjAAAAfalsefalsefalsesDYAAAUAAAD//v8WVQBwAHAAZQByAEEAcgBtAC0AMQBAAEEAcgBtAEEAcwBzAGUAbQBiAGwAeQAEAAAAEAAAAAEAAAABAAAAGgAAAA==falsefalsefalsesDYAAAUAAAD//v8WUwBoAG8AdQBsAGQAZQByAC0AMQBAAEEAcgBtAEEAcwBzAGUAbQBiAGwAeQAEAAAAEAAAAAEAAAABAAAAGQAAAA==falsefalsefalsesDYAAAUAAAD//v8SYgBhAHMAZQAtADEAQABBAHIAbQBBAHMAcwBlAG0AYgBsAHkABAAAABAAAAABAAAAAQAAABgAAAA=falsefalse
+2022-04-26 22:17:53,105 INFO AssemblyExportForm.cs: 309 - Saving URDF package to E:\Robotics\WR\URDF\URDF\ArmAssembly.SLDASM
+2022-04-26 22:17:53,107 INFO ExportHelper.cs: 147 - Beginning the export process
+2022-04-26 22:17:53,108 INFO ExportHelper.cs: 153 - Creating package directories with name ArmAssembly.SLDASM and save path E:\Robotics\WR\URDF\URDF
+2022-04-26 22:17:55,069 INFO ExportHelper.cs: 162 - Creating CMakeLists.txt at E:\Robotics\WR\URDF\URDF\ArmAssembly.SLDASM\CMakeLists.txt
+2022-04-26 22:17:55,070 INFO ExportHelper.cs: 166 - Creating joint names config at E:\Robotics\WR\URDF\URDF\ArmAssembly.SLDASM\config\joint_names_ArmAssembly.SLDASM.yaml
+2022-04-26 22:17:55,071 INFO ExportHelper.cs: 170 - Creating package.xml at E:\Robotics\WR\URDF\URDF\ArmAssembly.SLDASM\package.xml
+2022-04-26 22:17:55,071 INFO PackageXMLWriter.cs: 21 - Creating package.xml at E:\Robotics\WR\URDF\URDF\ArmAssembly.SLDASM\package.xml
+2022-04-26 22:17:55,076 INFO ExportHelper.cs: 177 - Creating RVIZ launch file in E:\Robotics\WR\URDF\URDF\ArmAssembly.SLDASM\launch\
+2022-04-26 22:17:55,078 INFO ExportHelper.cs: 182 - Creating Gazebo launch file in E:\Robotics\WR\URDF\URDF\ArmAssembly.SLDASM\launch\
+2022-04-26 22:17:55,079 INFO ExportHelper.cs: 187 - Saving existing STL preferences
+2022-04-26 22:17:55,080 INFO ExportHelper.cs: 450 - Saving users preferences
+2022-04-26 22:17:55,080 INFO ExportHelper.cs: 190 - Modifying STL preferences
+2022-04-26 22:17:55,081 INFO ExportHelper.cs: 464 - Setting STL preferences
+2022-04-26 22:17:55,085 INFO ExportHelper.cs: 196 - Found 0 hidden components
+2022-04-26 22:17:55,085 INFO ExportHelper.cs: 197 - Hiding all components
+2022-04-26 22:17:55,336 INFO ExportHelper.cs: 204 - Beginning individual files export
+2022-04-26 22:17:55,339 INFO ExportHelper.cs: 270 - Exporting link: base_link
+2022-04-26 22:17:55,339 INFO ExportHelper.cs: 272 - Link base_link has 1 children
+2022-04-26 22:17:55,340 INFO ExportHelper.cs: 270 - Exporting link: turntable_link
+2022-04-26 22:17:55,341 INFO ExportHelper.cs: 272 - Link turntable_link has 1 children
+2022-04-26 22:17:55,342 INFO ExportHelper.cs: 270 - Exporting link: upperArm_link
+2022-04-26 22:17:55,342 INFO ExportHelper.cs: 272 - Link upperArm_link has 1 children
+2022-04-26 22:17:55,343 INFO ExportHelper.cs: 270 - Exporting link: forearm_link
+2022-04-26 22:17:55,343 INFO ExportHelper.cs: 272 - Link forearm_link has 1 children
+2022-04-26 22:17:55,344 INFO ExportHelper.cs: 270 - Exporting link: wrist_link
+2022-04-26 22:17:55,344 INFO ExportHelper.cs: 272 - Link wrist_link has 1 children
+2022-04-26 22:17:55,344 INFO ExportHelper.cs: 270 - Exporting link: carpus_link
+2022-04-26 22:17:55,345 INFO ExportHelper.cs: 272 - Link carpus_link has 1 children
+2022-04-26 22:17:55,345 INFO ExportHelper.cs: 270 - Exporting link: endEffector_link
+2022-04-26 22:17:55,346 INFO ExportHelper.cs: 272 - Link endEffector_link has 0 children
+2022-04-26 22:17:55,346 INFO ExportHelper.cs: 317 - endEffector_link: Exporting STL with coordinate frame Origin_wristRoll_link
+2022-04-26 22:17:55,347 INFO ExportHelper.cs: 322 - endEffector_link: Reference geometry name
+2022-04-26 22:17:55,506 INFO ExportHelper.cs: 330 - Saving STL to E:\Robotics\WR\URDF\URDF\ArmAssembly.SLDASM\meshes\endEffector_link.STL
+2022-04-26 22:17:55,923 INFO ExportHelper.cs: 405 - Removing SW header in STL file
+2022-04-26 22:17:55,923 INFO ExportHelper.cs: 317 - carpus_link: Exporting STL with coordinate frame Origin_wristPitch_joint
+2022-04-26 22:17:55,924 INFO ExportHelper.cs: 322 - carpus_link: Reference geometry name
+2022-04-26 22:17:55,969 INFO ExportHelper.cs: 330 - Saving STL to E:\Robotics\WR\URDF\URDF\ArmAssembly.SLDASM\meshes\carpus_link.STL
+2022-04-26 22:17:56,017 INFO ExportHelper.cs: 405 - Removing SW header in STL file
+2022-04-26 22:17:56,018 INFO ExportHelper.cs: 317 - wrist_link: Exporting STL with coordinate frame Origin_elbowRoll_joint
+2022-04-26 22:17:56,018 INFO ExportHelper.cs: 322 - wrist_link: Reference geometry name
+2022-04-26 22:17:56,031 INFO ExportHelper.cs: 330 - Saving STL to E:\Robotics\WR\URDF\URDF\ArmAssembly.SLDASM\meshes\wrist_link.STL
+2022-04-26 22:17:56,058 INFO ExportHelper.cs: 405 - Removing SW header in STL file
+2022-04-26 22:17:56,059 INFO ExportHelper.cs: 317 - forearm_link: Exporting STL with coordinate frame Origin_elbowPitch_joint
+2022-04-26 22:17:56,059 INFO ExportHelper.cs: 322 - forearm_link: Reference geometry name
+2022-04-26 22:17:56,112 INFO ExportHelper.cs: 330 - Saving STL to E:\Robotics\WR\URDF\URDF\ArmAssembly.SLDASM\meshes\forearm_link.STL
+2022-04-26 22:17:56,168 INFO ExportHelper.cs: 405 - Removing SW header in STL file
+2022-04-26 22:17:56,169 INFO ExportHelper.cs: 317 - upperArm_link: Exporting STL with coordinate frame Origin_shoulder_joint
+2022-04-26 22:17:56,169 INFO ExportHelper.cs: 322 - upperArm_link: Reference geometry name
+2022-04-26 22:17:56,180 INFO ExportHelper.cs: 330 - Saving STL to E:\Robotics\WR\URDF\URDF\ArmAssembly.SLDASM\meshes\upperArm_link.STL
+2022-04-26 22:17:56,216 INFO ExportHelper.cs: 405 - Removing SW header in STL file
+2022-04-26 22:17:56,217 INFO ExportHelper.cs: 317 - turntable_link: Exporting STL with coordinate frame Origin_turntable_joint
+2022-04-26 22:17:56,217 INFO ExportHelper.cs: 322 - turntable_link: Reference geometry name
+2022-04-26 22:17:56,290 INFO ExportHelper.cs: 330 - Saving STL to E:\Robotics\WR\URDF\URDF\ArmAssembly.SLDASM\meshes\turntable_link.STL
+2022-04-26 22:17:56,359 INFO ExportHelper.cs: 405 - Removing SW header in STL file
+2022-04-26 22:17:56,360 INFO ExportHelper.cs: 317 - base_link: Exporting STL with coordinate frame Origin_global
+2022-04-26 22:17:56,360 INFO ExportHelper.cs: 322 - base_link: Reference geometry name
+2022-04-26 22:17:56,369 INFO ExportHelper.cs: 330 - Saving STL to E:\Robotics\WR\URDF\URDF\ArmAssembly.SLDASM\meshes\base_link.STL
+2022-04-26 22:17:56,393 INFO ExportHelper.cs: 405 - Removing SW header in STL file
+2022-04-26 22:17:56,394 INFO ExportHelper.cs: 145 - Showing all components except previously hidden components
+2022-04-26 22:17:56,648 INFO ExportHelper.cs: 145 - Resetting STL preferences
+2022-04-26 22:17:56,649 INFO ExportHelper.cs: 478 - Returning STL preferences to user preferences
+2022-04-26 22:17:56,649 INFO ExportHelper.cs: 228 - Writing URDF file to E:\Robotics\WR\URDF\URDF\ArmAssembly.SLDASM\urdf\ArmAssembly.SLDASM.urdf
+2022-04-26 22:17:56,675 INFO CSVImportExport.cs: 32 - Writing CSV file E:\Robotics\WR\URDF\URDF\ArmAssembly.SLDASM\urdf\ArmAssembly.SLDASM.csv
+2022-04-26 22:17:56,718 ERROR CSVImportExport.cs: 130 - The following columns were not written to the CSV: Link.Joint.ChildLink.link,
+2022-04-26 22:17:56,718 ERROR CSVImportExport.cs: 130 - The following columns were not written to the CSV: Link.Joint.ChildLink.link,
+2022-04-26 22:17:56,719 ERROR CSVImportExport.cs: 130 - The following columns were not written to the CSV: Link.Joint.ChildLink.link,
+2022-04-26 22:17:56,719 ERROR CSVImportExport.cs: 130 - The following columns were not written to the CSV: Link.Joint.ChildLink.link,
+2022-04-26 22:17:56,720 ERROR CSVImportExport.cs: 130 - The following columns were not written to the CSV: Link.Joint.ChildLink.link,
+2022-04-26 22:17:56,720 ERROR CSVImportExport.cs: 130 - The following columns were not written to the CSV: Link.Joint.ChildLink.link,
+2022-04-26 22:17:56,726 ERROR CSVImportExport.cs: 130 - The following columns were not written to the CSV: Link.Joint.ChildLink.link,
+2022-04-26 22:17:56,727 INFO ExportHelper.cs: 234 - Copying log file
+2022-04-26 22:17:56,730 INFO ExportHelper.cs: 439 - Copying C:\Users\Payton Jackson\sw2urdf_logs\sw2urdf.log to E:\Robotics\WR\URDF\URDF\ArmAssembly.SLDASM\export.log
diff --git a/src/wroboarm_23/launch/chomp_planning_pipeline.launch.xml b/src/wroboarm_23/launch/chomp_planning_pipeline.launch.xml
new file mode 100644
index 00000000..34271389
--- /dev/null
+++ b/src/wroboarm_23/launch/chomp_planning_pipeline.launch.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/wroboarm_23/launch/default_warehouse_db.launch b/src/wroboarm_23/launch/default_warehouse_db.launch
new file mode 100644
index 00000000..2543e8f8
--- /dev/null
+++ b/src/wroboarm_23/launch/default_warehouse_db.launch
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/wroboarm_23/launch/demo.launch b/src/wroboarm_23/launch/demo.launch
new file mode 100644
index 00000000..9abb2e63
--- /dev/null
+++ b/src/wroboarm_23/launch/demo.launch
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [move_group/fake_controller_joint_states]
+
+
+
+ [move_group/fake_controller_joint_states]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/wroboarm_23/launch/demo_gazebo.launch b/src/wroboarm_23/launch/demo_gazebo.launch
new file mode 100644
index 00000000..a9f320c5
--- /dev/null
+++ b/src/wroboarm_23/launch/demo_gazebo.launch
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/wroboarm_23/launch/demo_test.launch b/src/wroboarm_23/launch/demo_test.launch
new file mode 100644
index 00000000..8c258868
--- /dev/null
+++ b/src/wroboarm_23/launch/demo_test.launch
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [control/arm_joint_states]
+
+
+
+ [control/arm_joint_states]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/wroboarm_23/launch/display.launch b/src/wroboarm_23/launch/display.launch
new file mode 100644
index 00000000..ce58753b
--- /dev/null
+++ b/src/wroboarm_23/launch/display.launch
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/wroboarm_23/launch/fake_moveit_controller_manager.launch.xml b/src/wroboarm_23/launch/fake_moveit_controller_manager.launch.xml
new file mode 100644
index 00000000..46689c86
--- /dev/null
+++ b/src/wroboarm_23/launch/fake_moveit_controller_manager.launch.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/wroboarm_23/launch/gazebo.launch b/src/wroboarm_23/launch/gazebo.launch
new file mode 100644
index 00000000..cb085009
--- /dev/null
+++ b/src/wroboarm_23/launch/gazebo.launch
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/wroboarm_23/launch/joystick_control.launch b/src/wroboarm_23/launch/joystick_control.launch
new file mode 100644
index 00000000..9411f6e6
--- /dev/null
+++ b/src/wroboarm_23/launch/joystick_control.launch
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/wroboarm_23/launch/move_group.launch b/src/wroboarm_23/launch/move_group.launch
new file mode 100644
index 00000000..bbaa5eb5
--- /dev/null
+++ b/src/wroboarm_23/launch/move_group.launch
@@ -0,0 +1,105 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/wroboarm_23/launch/moveit.rviz b/src/wroboarm_23/launch/moveit.rviz
new file mode 100644
index 00000000..97d51153
--- /dev/null
+++ b/src/wroboarm_23/launch/moveit.rviz
@@ -0,0 +1,265 @@
+Panels:
+ - Class: rviz/Displays
+ Help Height: 84
+ Name: Displays
+ Property Tree Widget:
+ Expanded:
+ - /MotionPlanning1
+ - /MotionPlanning1/Planning Request1
+ - /Pose1
+ Splitter Ratio: 0.5
+ Tree Height: 295
+ - Class: rviz/Help
+ Name: Help
+ - Class: rviz/Views
+ Expanded:
+ - /Current View1
+ Name: Views
+ Splitter Ratio: 0.5
+Preferences:
+ PromptSaveOnExit: true
+Toolbars:
+ toolButtonStyle: 2
+Visualization Manager:
+ Class: ""
+ Displays:
+ - Alpha: 0.5
+ Cell Size: 1
+ Class: rviz/Grid
+ Color: 160; 160; 164
+ Enabled: true
+ Line Style:
+ Line Width: 0.029999999329447746
+ Value: Lines
+ Name: Grid
+ Normal Cell Count: 0
+ Offset:
+ X: 0
+ Y: 0
+ Z: 0
+ Plane: XY
+ Plane Cell Count: 10
+ Reference Frame:
+ Value: true
+ - Acceleration_Scaling_Factor: 0.1
+ Class: moveit_rviz_plugin/MotionPlanning
+ Enabled: true
+ Move Group Namespace: ""
+ MoveIt_Allow_Approximate_IK: false
+ MoveIt_Allow_External_Program: false
+ MoveIt_Allow_Replanning: false
+ MoveIt_Allow_Sensor_Positioning: false
+ MoveIt_Planning_Attempts: 10
+ MoveIt_Planning_Time: 5
+ MoveIt_Use_Cartesian_Path: false
+ MoveIt_Use_Constraint_Aware_IK: false
+ MoveIt_Workspace:
+ Center:
+ X: 0
+ Y: 0
+ Z: 0
+ Size:
+ X: 2
+ Y: 2
+ Z: 2
+ Name: MotionPlanning
+ Planned Path:
+ Color Enabled: false
+ Interrupt Display: false
+ Links:
+ All Links Enabled: true
+ Expand Joint Details: false
+ Expand Link Details: false
+ Expand Tree: false
+ Link Tree Style: Links in Alphabetic Order
+ base_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ carpus_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ endEffector_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ forearm_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ turntable_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ upperArm_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ wrist_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ Loop Animation: true
+ Robot Alpha: 0.5
+ Robot Color: 150; 50; 150
+ Show Robot Collision: false
+ Show Robot Visual: false
+ Show Trail: false
+ State Display Time: 0.05 s
+ Trail Step Size: 1
+ Trajectory Topic: move_group/display_planned_path
+ Use Sim Time: false
+ Planning Metrics:
+ Payload: 1
+ Show Joint Torques: false
+ Show Manipulability: false
+ Show Manipulability Index: false
+ Show Weight Limit: false
+ TextHeight: 0.07999999821186066
+ Planning Request:
+ Colliding Link Color: 255; 0; 0
+ Goal State Alpha: 1
+ Goal State Color: 250; 128; 0
+ Interactive Marker Size: 0
+ Joint Violation Color: 255; 0; 255
+ Planning Group: arm
+ Query Goal State: false
+ Query Start State: false
+ Show Workspace: false
+ Start State Alpha: 1
+ Start State Color: 0; 255; 0
+ Planning Scene Topic: move_group/monitored_planning_scene
+ Robot Description: robot_description
+ Scene Geometry:
+ Scene Alpha: 1
+ Scene Color: 50; 230; 50
+ Scene Display Time: 0.009999999776482582
+ Show Scene Geometry: true
+ Voxel Coloring: Z-Axis
+ Voxel Rendering: Occupied Voxels
+ Scene Robot:
+ Attached Body Color: 150; 50; 150
+ Links:
+ All Links Enabled: true
+ Expand Joint Details: false
+ Expand Link Details: false
+ Expand Tree: false
+ Link Tree Style: Links in Alphabetic Order
+ base_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ carpus_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ endEffector_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ forearm_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ turntable_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ upperArm_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ wrist_link:
+ Alpha: 1
+ Show Axes: false
+ Show Trail: false
+ Value: true
+ Robot Alpha: 0.85
+ Show Robot Collision: false
+ Show Robot Visual: true
+ Value: true
+ Velocity_Scaling_Factor: 0.1
+ - Alpha: 1
+ Axes Length: 0.10000000149011612
+ Axes Radius: 0.02500000037252903
+ Class: rviz/Pose
+ Color: 255; 25; 0
+ Enabled: true
+ Head Length: 0.30000001192092896
+ Head Radius: 0.10000000149011612
+ Name: Pose
+ Queue Size: 10
+ Shaft Length: 1
+ Shaft Radius: 0.05000000074505806
+ Shape: Axes
+ Topic: /logic/arm_teleop/next_target
+ Unreliable: false
+ Value: true
+ Enabled: true
+ Global Options:
+ Background Color: 48; 48; 48
+ Default Light: true
+ Fixed Frame: base_link
+ Frame Rate: 30
+ Name: root
+ Tools:
+ - Class: rviz/Interact
+ Hide Inactive Objects: true
+ - Class: rviz/MoveCamera
+ - Class: rviz/Select
+ Value: true
+ Views:
+ Current:
+ Class: rviz/Orbit
+ Distance: 2
+ Enable Stereo Rendering:
+ Stereo Eye Separation: 0.05999999865889549
+ Stereo Focal Distance: 1
+ Swap Stereo Eyes: false
+ Value: false
+ Field of View: 0.75
+ Focal Point:
+ X: -0.10000000149011612
+ Y: 0.25
+ Z: 0.30000001192092896
+ Focal Shape Fixed Size: true
+ Focal Shape Size: 0.05000000074505806
+ Invert Z Axis: false
+ Name: Current View
+ Near Clip Distance: 0.009999999776482582
+ Pitch: 0.5
+ Target Frame: base_link
+ Yaw: -0.6232355833053589
+ Saved: ~
+Window Geometry:
+ Displays:
+ collapsed: false
+ Height: 1016
+ Help:
+ collapsed: false
+ Hide Left Dock: false
+ Hide Right Dock: false
+ MotionPlanning:
+ collapsed: false
+ MotionPlanning - Trajectory Slider:
+ collapsed: false
+ QMainWindow State: 000000ff00000000fd0000000100000000000001f30000039efc0200000007fb000000100044006900730070006c006100790073010000003d000001b8000000c900fffffffb0000000800480065006c00700000000342000000bb0000006e00fffffffb0000000a00560069006500770073000000010c000000a4000000a400fffffffb0000000c00430061006d00650072006100000002ff000001610000000000000000fb0000001e004d006f00740069006f006e00200050006c0061006e006e0069006e00670100000374000001890000000000000000fb00000044004d006f00740069006f006e0050006c0061006e006e0069006e00670020002d0020005400720061006a006500630074006f0072007900200053006c00690064006500720000000000ffffffff0000001600000016fb0000001c004d006f00740069006f006e0050006c0061006e006e0069006e006701000001fb000001e00000017d00ffffff0000053f0000039e00000001000000020000000100000002fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
+ Views:
+ collapsed: false
+ Width: 1848
+ X: 72
+ Y: 27
diff --git a/src/wroboarm_23/launch/moveit_rviz.launch b/src/wroboarm_23/launch/moveit_rviz.launch
new file mode 100644
index 00000000..a4605c03
--- /dev/null
+++ b/src/wroboarm_23/launch/moveit_rviz.launch
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/wroboarm_23/launch/ompl-chomp_planning_pipeline.launch.xml b/src/wroboarm_23/launch/ompl-chomp_planning_pipeline.launch.xml
new file mode 100644
index 00000000..7318a0b8
--- /dev/null
+++ b/src/wroboarm_23/launch/ompl-chomp_planning_pipeline.launch.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/wroboarm_23/launch/ompl_planning_pipeline.launch.xml b/src/wroboarm_23/launch/ompl_planning_pipeline.launch.xml
new file mode 100644
index 00000000..1bdd6cfc
--- /dev/null
+++ b/src/wroboarm_23/launch/ompl_planning_pipeline.launch.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/wroboarm_23/launch/pilz_industrial_motion_planner_planning_pipeline.launch.xml b/src/wroboarm_23/launch/pilz_industrial_motion_planner_planning_pipeline.launch.xml
new file mode 100644
index 00000000..c7c4cf50
--- /dev/null
+++ b/src/wroboarm_23/launch/pilz_industrial_motion_planner_planning_pipeline.launch.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/wroboarm_23/launch/planning_context.launch b/src/wroboarm_23/launch/planning_context.launch
new file mode 100644
index 00000000..b5f6954c
--- /dev/null
+++ b/src/wroboarm_23/launch/planning_context.launch
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/wroboarm_23/launch/planning_pipeline.launch.xml b/src/wroboarm_23/launch/planning_pipeline.launch.xml
new file mode 100644
index 00000000..4b4d0d66
--- /dev/null
+++ b/src/wroboarm_23/launch/planning_pipeline.launch.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/wroboarm_23/launch/ros_control_moveit_controller_manager.launch.xml b/src/wroboarm_23/launch/ros_control_moveit_controller_manager.launch.xml
new file mode 100644
index 00000000..9ebc91c1
--- /dev/null
+++ b/src/wroboarm_23/launch/ros_control_moveit_controller_manager.launch.xml
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/src/wroboarm_23/launch/ros_controllers.launch b/src/wroboarm_23/launch/ros_controllers.launch
new file mode 100644
index 00000000..7c953597
--- /dev/null
+++ b/src/wroboarm_23/launch/ros_controllers.launch
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/wroboarm_23/launch/run_benchmark_ompl.launch b/src/wroboarm_23/launch/run_benchmark_ompl.launch
new file mode 100644
index 00000000..abea39b7
--- /dev/null
+++ b/src/wroboarm_23/launch/run_benchmark_ompl.launch
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/wroboarm_23/launch/sensor_manager.launch.xml b/src/wroboarm_23/launch/sensor_manager.launch.xml
new file mode 100644
index 00000000..c12a65c3
--- /dev/null
+++ b/src/wroboarm_23/launch/sensor_manager.launch.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/wroboarm_23/launch/setup_assistant.launch b/src/wroboarm_23/launch/setup_assistant.launch
new file mode 100644
index 00000000..da7b439c
--- /dev/null
+++ b/src/wroboarm_23/launch/setup_assistant.launch
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/wroboarm_23/launch/simple_moveit_controller_manager.launch.xml b/src/wroboarm_23/launch/simple_moveit_controller_manager.launch.xml
new file mode 100644
index 00000000..7a92fb9b
--- /dev/null
+++ b/src/wroboarm_23/launch/simple_moveit_controller_manager.launch.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/src/wroboarm_23/launch/stomp_planning_pipeline.launch.xml b/src/wroboarm_23/launch/stomp_planning_pipeline.launch.xml
new file mode 100644
index 00000000..a1676cb5
--- /dev/null
+++ b/src/wroboarm_23/launch/stomp_planning_pipeline.launch.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/wroboarm_23/launch/trajectory_execution.launch.xml b/src/wroboarm_23/launch/trajectory_execution.launch.xml
new file mode 100644
index 00000000..a2841558
--- /dev/null
+++ b/src/wroboarm_23/launch/trajectory_execution.launch.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/wroboarm_23/launch/warehouse.launch b/src/wroboarm_23/launch/warehouse.launch
new file mode 100644
index 00000000..0712e670
--- /dev/null
+++ b/src/wroboarm_23/launch/warehouse.launch
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/wroboarm_23/launch/warehouse_settings.launch.xml b/src/wroboarm_23/launch/warehouse_settings.launch.xml
new file mode 100644
index 00000000..e473b083
--- /dev/null
+++ b/src/wroboarm_23/launch/warehouse_settings.launch.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/wroboarm_23/launch/wroboarm_23_moveit_sensor_manager.launch.xml b/src/wroboarm_23/launch/wroboarm_23_moveit_sensor_manager.launch.xml
new file mode 100644
index 00000000..5d02698d
--- /dev/null
+++ b/src/wroboarm_23/launch/wroboarm_23_moveit_sensor_manager.launch.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/src/wroboarm_23/meshes/base_link.STL b/src/wroboarm_23/meshes/base_link.STL
new file mode 100644
index 00000000..c298f6b5
Binary files /dev/null and b/src/wroboarm_23/meshes/base_link.STL differ
diff --git a/src/wroboarm_23/meshes/carpus_link.STL b/src/wroboarm_23/meshes/carpus_link.STL
new file mode 100644
index 00000000..412f5322
Binary files /dev/null and b/src/wroboarm_23/meshes/carpus_link.STL differ
diff --git a/src/wroboarm_23/meshes/endEffector_link.STL b/src/wroboarm_23/meshes/endEffector_link.STL
new file mode 100644
index 00000000..3efbbee9
Binary files /dev/null and b/src/wroboarm_23/meshes/endEffector_link.STL differ
diff --git a/src/wroboarm_23/meshes/forearm_link.STL b/src/wroboarm_23/meshes/forearm_link.STL
new file mode 100644
index 00000000..c9155a2e
Binary files /dev/null and b/src/wroboarm_23/meshes/forearm_link.STL differ
diff --git a/src/wroboarm_23/meshes/turntable_link.STL b/src/wroboarm_23/meshes/turntable_link.STL
new file mode 100644
index 00000000..80b5b615
Binary files /dev/null and b/src/wroboarm_23/meshes/turntable_link.STL differ
diff --git a/src/wroboarm_23/meshes/upperArm_link.STL b/src/wroboarm_23/meshes/upperArm_link.STL
new file mode 100644
index 00000000..f8a54dcb
Binary files /dev/null and b/src/wroboarm_23/meshes/upperArm_link.STL differ
diff --git a/src/wroboarm_23/meshes/wrist_link.STL b/src/wroboarm_23/meshes/wrist_link.STL
new file mode 100644
index 00000000..f79e328d
Binary files /dev/null and b/src/wroboarm_23/meshes/wrist_link.STL differ
diff --git a/src/wroboarm_23/package.xml b/src/wroboarm_23/package.xml
new file mode 100644
index 00000000..ee8c34af
--- /dev/null
+++ b/src/wroboarm_23/package.xml
@@ -0,0 +1,40 @@
+
+
+ wroboarm_23
+ 0.3.0
+
+ An automatically generated package with all the configuration and launch files for using the wroboarm_23 with the MoveIt Motion Planning Framework
+
+ Ben Nowotny
+ Ben Nowotny
+
+ BSD
+
+ http://moveit.ros.org/
+ https://github.com/ros-planning/moveit/issues
+ https://github.com/ros-planning/moveit
+
+ catkin
+
+ moveit_ros_move_group
+ moveit_fake_controller_manager
+ moveit_kinematics
+ moveit_planners_ompl
+ moveit_ros_visualization
+ moveit_setup_assistant
+ moveit_simple_controller_manager
+ joint_state_publisher
+ joint_state_publisher_gui
+ robot_state_publisher
+ rviz
+ tf2_ros
+ xacro
+
+
+
+
+
+
+
+
diff --git a/src/wroboarm_23/urdf/ArmAssembly.SLDASM.csv b/src/wroboarm_23/urdf/ArmAssembly.SLDASM.csv
new file mode 100644
index 00000000..294889b5
--- /dev/null
+++ b/src/wroboarm_23/urdf/ArmAssembly.SLDASM.csv
@@ -0,0 +1,8 @@
+Link Name,Center of Mass X,Center of Mass Y,Center of Mass Z,Center of Mass Roll,Center of Mass Pitch,Center of Mass Yaw,Mass,Moment Ixx,Moment Ixy,Moment Ixz,Moment Iyy,Moment Iyz,Moment Izz,Visual X,Visual Y,Visual Z,Visual Roll,Visual Pitch,Visual Yaw,Mesh Filename,Color Red,Color Green,Color Blue,Color Alpha,Collision X,Collision Y,Collision Z,Collision Roll,Collision Pitch,Collision Yaw,Collision Mesh Filename,Material Name,SW Components,Coordinate System,Axis Name,Joint Name,Joint Type,Joint Origin X,Joint Origin Y,Joint Origin Z,Joint Origin Roll,Joint Origin Pitch,Joint Origin Yaw,Parent,Joint Axis X,Joint Axis Y,Joint Axis Z,Limit Effort,Limit Velocity,Limit Lower,Limit Upper,Calibration rising,Calibration falling,Dynamics Damping,Dynamics Friction,Safety Soft Upper,Safety Soft Lower,Safety K Position,Safety K Velocity
+base_link,9.1830074983592E-19,-9.80159456515381E-19,0.015606490089144,0,0,0,0.93972387307473,0.00251429022255044,7.37485241366082E-20,8.66637218064247E-21,0.0021336882069818,1.14091331088149E-19,0.0044229329573873,0,0,0,0,0,0,package://wroboarm_23/meshes/base_link.STL,0.792156862745098,0.819607843137255,0.933333333333333,1,0,0,0,0,0,0,package://wroboarm_23/meshes/base_link.STL,,base-1,Origin_global,,,,0,0,0,0,0,0,,0,0,0,,,,,,,,,,,,
+turntable_link,-0.01225868218219,0.128577249577976,-0.00370544350042927,0,0,0,0.996366805002726,0.00652370094208946,0.0010646616036529,0.000283127005277363,0.0050231810993567,6.82113719161566E-05,0.00863345382595838,0,0,0,0,0,0,package://wroboarm_23/meshes/turntable_link.STL,0.792156862745098,0.819607843137255,0.933333333333333,1,0,0,0,0,0,0,package://wroboarm_23/meshes/turntable_link.STL,,Shoulder-1,Origin_turntable_joint,Axis1,turntable_joint,continuous,0,0,0.035865,1.5708,0,-0.84509,base_link,0,1,0,,,,,,,,,,,,
+upperArm_link,0.0143973999054599,-3.20061625693202E-05,0.279348384794928,0,0,0,0.985210343915811,0.0237982224738338,-8.8797773328906E-07,-0.00388532856230116,0.0293594722597601,-7.129443699684E-06,0.00625034839320102,0,0,0,0,0,0,package://wroboarm_23/meshes/upperArm_link.STL,0.792156862745098,0.819607843137255,0.933333333333333,1,0,0,0,0,0,0,package://wroboarm_23/meshes/upperArm_link.STL,,UpperArm-1,Origin_shoulder_joint,Axis2,shoulder_joint,continuous,0,0.18098,0.043071,-1.5572,0,0,turntable_link,-1,0,0,,,,,,,,,,,,
+forearm_link,-4.1286418728248E-16,0.0550154986611603,0.120152803034247,0,0,0,0.51779610173045,0.00404850874710764,-4.33680868994202E-19,2.87313575708659E-18,0.00375548329392275,-0.000377385363706531,0.000788327838226511,0,0,0,0,0,0,package://wroboarm_23/meshes/forearm_link.STL,0.792156862745098,0.819607843137255,0.933333333333333,1,0,0,0,0,0,0,package://wroboarm_23/meshes/forearm_link.STL,,Forarm-1,Origin_elbowPitch_joint,Axis3,elbowPitch_joint,continuous,0,0,0.46634,2.7009,0,0,upperArm_link,-1,0,0,,,,,,,,,,,,
+wrist_link,-2.77555756156289E-17,5.55111512312578E-17,0.096820252622317,0,0,0,0.301763082175336,0.00210344289702837,1.30104260698261E-18,5.14996031930615E-19,0.00305016250706558,-1.15196480826585E-18,0.00107609106501786,0,0,0,0,0,0,package://wroboarm_23/meshes/wrist_link.STL,0.792156862745098,0.819607843137255,0.933333333333333,1,0,0,0,0,0,0,package://wroboarm_23/meshes/wrist_link.STL,,WristStructure-1,Origin_elbowRoll_joint,Axis4,elbowRoll_joint,continuous,0,0.04445,0.23038,0,0,0,forearm_link,0,0,1,,,,,,,,,,,,
+carpus_link,5.55111512312578E-17,5.55111512312578E-17,0,0,0,0,0.447707117943177,0.000367702266904795,7.04731412115578E-19,1.62630325872826E-19,0.000843427086265753,0,0.000844746123560661,0,0,0,0,0,0,package://wroboarm_23/meshes/carpus_link.STL,0.792156862745098,0.819607843137255,0.933333333333333,1,0,0,0,0,0,0,package://wroboarm_23/meshes/carpus_link.STL,,Wrist-1,Origin_wristPitch_joint,Axis5,wristPitch_joint,continuous,0,0,0.23528,0,0,0,wrist_link,-1,0,0,,,,,,,,,,,,
+endEffector_link,-0.000725623905114631,-0.000893578002320872,0.0499824104113341,0,0,0,0.399994299548626,0.00169604127916281,-3.07411212276679E-06,2.57918978917245E-05,0.00173351996343527,5.0605971705242E-05,0.000256533582960489,0,0,0,0,0,0,package://wroboarm_23/meshes/endEffector_link.STL,0.792156862745098,0.819607843137255,0.933333333333333,1,0,0,0,0,0,0,package://wroboarm_23/meshes/endEffector_link.STL,,Manipulator-1,Origin_wristRoll_link,Axis6,wristRoll_link,continuous,0,0,0,0,0,0,carpus_link,0,0,1,,,,,,,,,,,,
diff --git a/src/wroboarm_23/urdf/ArmAssembly.SLDASM.urdf b/src/wroboarm_23/urdf/ArmAssembly.SLDASM.urdf
new file mode 100644
index 00000000..3bd1ee46
--- /dev/null
+++ b/src/wroboarm_23/urdf/ArmAssembly.SLDASM.urdf
@@ -0,0 +1,371 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/test_arm_control_stack.sh b/test_arm_control_stack.sh
new file mode 100755
index 00000000..af265954
--- /dev/null
+++ b/test_arm_control_stack.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+ROOT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+cd $ROOT_DIR
+./assemble.py build
+#gnome-terminal -- roscore
+#rostopic list &>./out.temp;
+#COUNT=$(grep -Ec "Unable to communicate with master" out.temp)
+#while [ $COUNT -ne 0 ]; do
+# rostopic list &>./out.temp;
+# COUNT=$(grep -Ec "Unable to communicate with master" out.temp)
+#done
+#rm ./out.temp;
+export WROVER_LOCAL=true
+export WROVER_HW=MOCK
+MOTOR_TO_INSPECT=11
+# (sleep 2 && rqt_plot /control/arm/$MOTOR_TO_INSPECT/output /control/arm/$MOTOR_TO_INSPECT/setpoint /control/arm/$MOTOR_TO_INSPECT/feedback) & #/hsi/roboclaw/aux1/cmd/left
+roslaunch wr_entry_point mock_arm.launch
+
diff --git a/testscrpt.py b/testscrpt.py
new file mode 100755
index 00000000..dd6cb4c3
--- /dev/null
+++ b/testscrpt.py
@@ -0,0 +1,41 @@
+#!/usr/bin/env python3
+import rospy
+import sensor_msgs.msg as sensor_msgs
+import matplotlib.pyplot as plt
+from threading import Thread
+
+positions = None
+names = None
+
+def newJS(jsMsg: sensor_msgs.JointState):
+ global positions, names
+ if positions is None:
+ positions = []
+ names = [name for name in jsMsg.name]
+ for pos in jsMsg.position:
+ positions.append([pos])
+ else:
+ for l, pos in zip(positions, jsMsg.position):
+ l.append(pos)
+ if len(l) > 500:
+ del l[0]
+
+def plot():
+ global positions, names
+ while not rospy.is_shutdown():
+ if positions is not None and names is not None:
+ for l in positions:
+ plt.plot(l)
+ plt.legend(names)
+ plt.pause(0.05)
+ plt.clf()
+
+
+if __name__=="__main__":
+ rospy.init_node("testNode")
+ sub = rospy.Subscriber("/joint_states", sensor_msgs.JointState, newJS)
+ t1 = Thread(target=plot)
+ t1.start()
+ t1.join()
+ rospy.spin()
+
\ No newline at end of file