From 2c34894a4c849ca23a04e6790b8987f112ca2ec4 Mon Sep 17 00:00:00 2001 From: Vladimir Kupryukhin Date: Thu, 28 Sep 2023 00:49:21 +0000 Subject: [PATCH 01/50] Set up 2 basic nodes --- src/camera/camera/__init__.py | 0 src/camera/camera/roscamera.py | 22 ++++++++++++++++ src/camera/package.xml | 18 +++++++++++++ src/camera/resource/camera | 0 src/camera/setup.cfg | 4 +++ src/camera/setup.py | 26 +++++++++++++++++++ src/camera/test/test_copyright.py | 25 ++++++++++++++++++ src/camera/test/test_flake8.py | 25 ++++++++++++++++++ src/camera/test/test_pep257.py | 23 ++++++++++++++++ .../camera_subscriber_test/__init__.py | 0 .../camera_subscriber_test/roscamerasub.py | 22 ++++++++++++++++ src/camera_subscriber_test/package.xml | 18 +++++++++++++ .../resource/camera_subscriber_test | 0 src/camera_subscriber_test/setup.cfg | 4 +++ src/camera_subscriber_test/setup.py | 26 +++++++++++++++++++ .../test/test_copyright.py | 25 ++++++++++++++++++ .../test/test_flake8.py | 25 ++++++++++++++++++ .../test/test_pep257.py | 23 ++++++++++++++++ src/viator_launch/launch/robot.launch.py | 15 ++++++++++- src/viator_launch/package.xml | 2 ++ 20 files changed, 302 insertions(+), 1 deletion(-) create mode 100644 src/camera/camera/__init__.py create mode 100644 src/camera/camera/roscamera.py create mode 100644 src/camera/package.xml create mode 100644 src/camera/resource/camera create mode 100644 src/camera/setup.cfg create mode 100644 src/camera/setup.py create mode 100644 src/camera/test/test_copyright.py create mode 100644 src/camera/test/test_flake8.py create mode 100644 src/camera/test/test_pep257.py create mode 100644 src/camera_subscriber_test/camera_subscriber_test/__init__.py create mode 100644 src/camera_subscriber_test/camera_subscriber_test/roscamerasub.py create mode 100644 src/camera_subscriber_test/package.xml create mode 100644 src/camera_subscriber_test/resource/camera_subscriber_test create mode 100644 src/camera_subscriber_test/setup.cfg create mode 100644 src/camera_subscriber_test/setup.py create mode 100644 src/camera_subscriber_test/test/test_copyright.py create mode 100644 src/camera_subscriber_test/test/test_flake8.py create mode 100644 src/camera_subscriber_test/test/test_pep257.py diff --git a/src/camera/camera/__init__.py b/src/camera/camera/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/camera/camera/roscamera.py b/src/camera/camera/roscamera.py new file mode 100644 index 0000000..60a71aa --- /dev/null +++ b/src/camera/camera/roscamera.py @@ -0,0 +1,22 @@ +import rclpy +from rclpy.node import Node + + +class RosCamera(Node): + + def __init__(self): + super().__init__("ros_camera") + self.get_logger().info("Launching ros_camera node") + + + + + + +def main(args=None): + rclpy.init(args=args) + node = RosCamera() + rclpy.spin(node) + node.destroy_node() + rclpy.shutdown() + diff --git a/src/camera/package.xml b/src/camera/package.xml new file mode 100644 index 0000000..5a428f3 --- /dev/null +++ b/src/camera/package.xml @@ -0,0 +1,18 @@ + + + + camera + 0.0.0 + TODO: Package description + trickfire + TODO: License declaration + + ament_copyright + ament_flake8 + ament_pep257 + python3-pytest + + + ament_python + + diff --git a/src/camera/resource/camera b/src/camera/resource/camera new file mode 100644 index 0000000..e69de29 diff --git a/src/camera/setup.cfg b/src/camera/setup.cfg new file mode 100644 index 0000000..cbcf7c1 --- /dev/null +++ b/src/camera/setup.cfg @@ -0,0 +1,4 @@ +[develop] +script_dir=$base/lib/camera +[install] +install_scripts=$base/lib/camera diff --git a/src/camera/setup.py b/src/camera/setup.py new file mode 100644 index 0000000..7e977a1 --- /dev/null +++ b/src/camera/setup.py @@ -0,0 +1,26 @@ +from setuptools import find_packages, setup + +package_name = 'camera' + +setup( + name=package_name, + version='0.0.0', + packages=find_packages(exclude=['test']), + data_files=[ + ('share/ament_index/resource_index/packages', + ['resource/' + package_name]), + ('share/' + package_name, ['package.xml']), + ], + install_requires=['setuptools'], + zip_safe=True, + maintainer='trickfire', + maintainer_email='vladimirkupryukhin@gmail.com', + description='TODO: Package description', + license='TODO: License declaration', + tests_require=['pytest'], + entry_points={ + 'console_scripts': [ + 'roscamera = camera.roscamera:main' + ], + }, +) diff --git a/src/camera/test/test_copyright.py b/src/camera/test/test_copyright.py new file mode 100644 index 0000000..97a3919 --- /dev/null +++ b/src/camera/test/test_copyright.py @@ -0,0 +1,25 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_copyright.main import main +import pytest + + +# Remove the `skip` decorator once the source file(s) have a copyright header +@pytest.mark.skip(reason='No copyright header has been placed in the generated source file.') +@pytest.mark.copyright +@pytest.mark.linter +def test_copyright(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found errors' diff --git a/src/camera/test/test_flake8.py b/src/camera/test/test_flake8.py new file mode 100644 index 0000000..27ee107 --- /dev/null +++ b/src/camera/test/test_flake8.py @@ -0,0 +1,25 @@ +# Copyright 2017 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_flake8.main import main_with_errors +import pytest + + +@pytest.mark.flake8 +@pytest.mark.linter +def test_flake8(): + rc, errors = main_with_errors(argv=[]) + assert rc == 0, \ + 'Found %d code style errors / warnings:\n' % len(errors) + \ + '\n'.join(errors) diff --git a/src/camera/test/test_pep257.py b/src/camera/test/test_pep257.py new file mode 100644 index 0000000..b234a38 --- /dev/null +++ b/src/camera/test/test_pep257.py @@ -0,0 +1,23 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_pep257.main import main +import pytest + + +@pytest.mark.linter +@pytest.mark.pep257 +def test_pep257(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found code style errors / warnings' diff --git a/src/camera_subscriber_test/camera_subscriber_test/__init__.py b/src/camera_subscriber_test/camera_subscriber_test/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/camera_subscriber_test/camera_subscriber_test/roscamerasub.py b/src/camera_subscriber_test/camera_subscriber_test/roscamerasub.py new file mode 100644 index 0000000..fc24cfe --- /dev/null +++ b/src/camera_subscriber_test/camera_subscriber_test/roscamerasub.py @@ -0,0 +1,22 @@ +import rclpy +from rclpy.node import Node + + +class RosCameraSub(Node): + + def __init__(self): + super().__init__("ros_camera_sub") + self.get_logger().info("Launching ros_camera_sub node") + + + + + + +def main(args=None): + rclpy.init(args=args) + node = RosCameraSub() + rclpy.spin(node) + node.destroy_node() + rclpy.shutdown() + diff --git a/src/camera_subscriber_test/package.xml b/src/camera_subscriber_test/package.xml new file mode 100644 index 0000000..1f1c7d3 --- /dev/null +++ b/src/camera_subscriber_test/package.xml @@ -0,0 +1,18 @@ + + + + camera_subscriber_test + 0.0.0 + TODO: Package description + trickfire + TODO: License declaration + + ament_copyright + ament_flake8 + ament_pep257 + python3-pytest + + + ament_python + + diff --git a/src/camera_subscriber_test/resource/camera_subscriber_test b/src/camera_subscriber_test/resource/camera_subscriber_test new file mode 100644 index 0000000..e69de29 diff --git a/src/camera_subscriber_test/setup.cfg b/src/camera_subscriber_test/setup.cfg new file mode 100644 index 0000000..279bc68 --- /dev/null +++ b/src/camera_subscriber_test/setup.cfg @@ -0,0 +1,4 @@ +[develop] +script_dir=$base/lib/camera_subscriber_test +[install] +install_scripts=$base/lib/camera_subscriber_test diff --git a/src/camera_subscriber_test/setup.py b/src/camera_subscriber_test/setup.py new file mode 100644 index 0000000..142ee5f --- /dev/null +++ b/src/camera_subscriber_test/setup.py @@ -0,0 +1,26 @@ +from setuptools import find_packages, setup + +package_name = 'camera_subscriber_test' + +setup( + name=package_name, + version='0.0.0', + packages=find_packages(exclude=['test']), + data_files=[ + ('share/ament_index/resource_index/packages', + ['resource/' + package_name]), + ('share/' + package_name, ['package.xml']), + ], + install_requires=['setuptools'], + zip_safe=True, + maintainer='trickfire', + maintainer_email='vladimirkupryukhin@gmail.com', + description='TODO: Package description', + license='TODO: License declaration', + tests_require=['pytest'], + entry_points={ + 'console_scripts': [ + 'roscamerasub = camera_subscriber_test.roscamerasub:main' + ], + }, +) diff --git a/src/camera_subscriber_test/test/test_copyright.py b/src/camera_subscriber_test/test/test_copyright.py new file mode 100644 index 0000000..97a3919 --- /dev/null +++ b/src/camera_subscriber_test/test/test_copyright.py @@ -0,0 +1,25 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_copyright.main import main +import pytest + + +# Remove the `skip` decorator once the source file(s) have a copyright header +@pytest.mark.skip(reason='No copyright header has been placed in the generated source file.') +@pytest.mark.copyright +@pytest.mark.linter +def test_copyright(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found errors' diff --git a/src/camera_subscriber_test/test/test_flake8.py b/src/camera_subscriber_test/test/test_flake8.py new file mode 100644 index 0000000..27ee107 --- /dev/null +++ b/src/camera_subscriber_test/test/test_flake8.py @@ -0,0 +1,25 @@ +# Copyright 2017 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_flake8.main import main_with_errors +import pytest + + +@pytest.mark.flake8 +@pytest.mark.linter +def test_flake8(): + rc, errors = main_with_errors(argv=[]) + assert rc == 0, \ + 'Found %d code style errors / warnings:\n' % len(errors) + \ + '\n'.join(errors) diff --git a/src/camera_subscriber_test/test/test_pep257.py b/src/camera_subscriber_test/test/test_pep257.py new file mode 100644 index 0000000..b234a38 --- /dev/null +++ b/src/camera_subscriber_test/test/test_pep257.py @@ -0,0 +1,23 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_pep257.main import main +import pytest + + +@pytest.mark.linter +@pytest.mark.pep257 +def test_pep257(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found code style errors / warnings' diff --git a/src/viator_launch/launch/robot.launch.py b/src/viator_launch/launch/robot.launch.py index 103562f..8f5c6e7 100644 --- a/src/viator_launch/launch/robot.launch.py +++ b/src/viator_launch/launch/robot.launch.py @@ -15,6 +15,17 @@ name='can_moteus_node' ) +ros_camera_node = Node( + package='camera', + executable='roscamera', + name='ros_camera' +) + +ros_camera_test_node = Node( + package='camera_subscriber_test', + executable='roscamerasub', + name='ros_camera_sub' +) # Composable Nodes launched in a Composable Node container will share a process # and can use very fast inter-process communication instead of publishing @@ -36,5 +47,7 @@ def generate_launch_description(): return launch.LaunchDescription([ robot_container, - can_moteus_node + can_moteus_node, + ros_camera_node, + ros_camera_test_node ]) diff --git a/src/viator_launch/package.xml b/src/viator_launch/package.xml index 33dc6cf..853af22 100644 --- a/src/viator_launch/package.xml +++ b/src/viator_launch/package.xml @@ -10,6 +10,8 @@ hello_world can_moteus ros2launch + camera + camera_subscriber_test ament_copyright ament_flake8 From 885505ce5a975145afd4f06bb0e44a7aba18c44c Mon Sep 17 00:00:00 2001 From: Vladimir Kupryukhin Date: Thu, 28 Sep 2023 09:16:25 -0700 Subject: [PATCH 02/50] Added cv_bridge --- .devcontainer/Dockerfile | 17 +++++++++++++++-- .gitmodules | 4 ++++ .../camera_subscriber_test/roscamerasub.py | 1 + src/vision_opencv | 1 + 4 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 .gitmodules create mode 160000 src/vision_opencv diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index dc51847..02d13b9 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -11,16 +11,29 @@ RUN apt-get update && apt-get install -y \ ssh-client \ # Install usb utilities usbutils \ + #Used for cv_bridge + python3-numpy \ + #USed for cv_bridge + libboost-python-dev \ + #OpenCV + libopencv-dev \ + #Opencv + python3-opencv \ # Clean out the apt lists after `apt-get update` && rm -rf /var/lib/apt/lists/* #Install moteus python library https://github.com/mjbots/moteus/tree/main/lib/python Run pip3 install moteus - - # Update pydocstyle to remove a deprecation warning when testing for PEP257 RUN pip install --upgrade pydocstyle +#Install OpenCV for python +RUN pip3 install opencv-python + +#Install cv_bridge +#RUN apt install python3-numpy +#RUN apt-get install -y libboost-python-dev + # Add a user so we can remote into this container with a non-root user RUN useradd trickfire \ diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..6bf8dff --- /dev/null +++ b/.gitmodules @@ -0,0 +1,4 @@ +[submodule "src/vision_opencv"] + path = src/vision_opencv + url = https://github.com/ros-perception/vision_opencv.git + branch = humble diff --git a/src/camera_subscriber_test/camera_subscriber_test/roscamerasub.py b/src/camera_subscriber_test/camera_subscriber_test/roscamerasub.py index fc24cfe..b3000f5 100644 --- a/src/camera_subscriber_test/camera_subscriber_test/roscamerasub.py +++ b/src/camera_subscriber_test/camera_subscriber_test/roscamerasub.py @@ -1,5 +1,6 @@ import rclpy from rclpy.node import Node +import cv2 class RosCameraSub(Node): diff --git a/src/vision_opencv b/src/vision_opencv new file mode 160000 index 0000000..066793a --- /dev/null +++ b/src/vision_opencv @@ -0,0 +1 @@ +Subproject commit 066793a23e5d06d76c78ca3d69824a501c3554fd From 888c965ef2d9e125b0b3fd21ffc35fb14c89e4c6 Mon Sep 17 00:00:00 2001 From: Vladimir Kupryukhin Date: Fri, 29 Sep 2023 21:48:31 +0000 Subject: [PATCH 03/50] Publishing works I think --- .devcontainer/Dockerfile | 3 ++ .vscode/settings.json | 6 ++- src/camera/camera/roscamera.py | 45 ++++++++++++++++++- .../camera_subscriber_test/roscamerasub.py | 1 - 4 files changed, 51 insertions(+), 4 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 02d13b9..75a9b0e 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -30,6 +30,9 @@ RUN pip install --upgrade pydocstyle #Install OpenCV for python RUN pip3 install opencv-python +RUN pip3 install numpy --upgrade + + #Install cv_bridge #RUN apt install python3-numpy #RUN apt-get install -y libboost-python-dev diff --git a/.vscode/settings.json b/.vscode/settings.json index 6504369..9d6c809 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -8,5 +8,9 @@ "cmake.configureOnOpen": false, "python.linting.enabled": true, "python.linting.flake8Enabled": true, - "cmake.sourceDirectory": "${workspaceFolder}/src/hello_world" + "cmake.sourceDirectory": "${workspaceFolder}/src/hello_world", + "[python]": { + "editor.defaultFormatter": "ms-python.autopep8" + }, + "python.formatting.provider": "none" } \ No newline at end of file diff --git a/src/camera/camera/roscamera.py b/src/camera/camera/roscamera.py index 60a71aa..8d0428d 100644 --- a/src/camera/camera/roscamera.py +++ b/src/camera/camera/roscamera.py @@ -1,5 +1,8 @@ -import rclpy -from rclpy.node import Node +import rclpy # Python Client Library for ROS 2 +from rclpy.node import Node # Handles the creation of nodes +from sensor_msgs.msg import Image # Image is the message type +from cv_bridge import CvBridge # Package to convert between ROS and OpenCV Images +import cv2 # OpenCV library class RosCamera(Node): @@ -8,6 +11,44 @@ def __init__(self): super().__init__("ros_camera") self.get_logger().info("Launching ros_camera node") + # Create the publisher. This publisher will publish an Image + # to the video_frames topic. The queue size is 10 messages. + self.publisher_ = self.create_publisher(Image, 'video_frames', 10) + + # We will publish a message every 0.1 seconds + timer_period = 0.1 # seconds + + # Create the timer + self.timer = self.create_timer(timer_period, self.timer_callback) + + # Create a VideoCapture object + # The argument '0' gets the default webcam. + self.cap = cv2.VideoCapture(0) + + # Used to convert between ROS and OpenCV images + self.br = CvBridge() + + + def timer_callback(self): + """ + Callback function. + This function gets called every 0.1 seconds. + """ + # Capture frame-by-frame + # This method returns True/False as well + # as the video frame. + ret, frame = self.cap.read() + + if ret == True: + # Publish the image. + # The 'cv2_to_imgmsg' method converts an OpenCV + # image to a ROS 2 image message + self.publisher_.publish(self.br.cv2_to_imgmsg(frame)) + + # Display the message on the console + self.get_logger().info('Publishing video frame') + + diff --git a/src/camera_subscriber_test/camera_subscriber_test/roscamerasub.py b/src/camera_subscriber_test/camera_subscriber_test/roscamerasub.py index b3000f5..fc24cfe 100644 --- a/src/camera_subscriber_test/camera_subscriber_test/roscamerasub.py +++ b/src/camera_subscriber_test/camera_subscriber_test/roscamerasub.py @@ -1,6 +1,5 @@ import rclpy from rclpy.node import Node -import cv2 class RosCameraSub(Node): From ce1e08661620db909760cfff9fed90c3ea9eb17c Mon Sep 17 00:00:00 2001 From: VladimirKupryukhin Date: Mon, 9 Oct 2023 17:02:50 -0700 Subject: [PATCH 04/50] Added video test --- .../camera_subscriber_test/roscamerasub.py | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/camera_subscriber_test/camera_subscriber_test/roscamerasub.py b/src/camera_subscriber_test/camera_subscriber_test/roscamerasub.py index fc24cfe..7ff8e24 100644 --- a/src/camera_subscriber_test/camera_subscriber_test/roscamerasub.py +++ b/src/camera_subscriber_test/camera_subscriber_test/roscamerasub.py @@ -1,5 +1,8 @@ import rclpy from rclpy.node import Node +from sensor_msgs.msg import Image +from cv_bridge import CvBridge +import cv2 class RosCameraSub(Node): @@ -7,7 +10,26 @@ class RosCameraSub(Node): def __init__(self): super().__init__("ros_camera_sub") self.get_logger().info("Launching ros_camera_sub node") - + + self.subscription = self.create_subscription( + Image, + "video_frames", + self.listerner_callback, + 10 + ) + + self.subscription + + self.br = CvBridge() + + def listerner_callback(self, data): + self.get_logger().info("Getting video frame") + + current_frame = self.br.imgmsg_to_cv2(data) + + cv2.imshow("camera", current_frame) + + cv2.waitKey(1) From c7f7e47072922d0d4bb9a33723e8f6894a1b9838 Mon Sep 17 00:00:00 2001 From: VladimirKupryukhin Date: Mon, 9 Oct 2023 17:48:16 -0700 Subject: [PATCH 05/50] launch_only_docker connects to gui. Video output confirmed good --- launch_only_docker.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/launch_only_docker.sh b/launch_only_docker.sh index 167c8af..3d8257a 100755 --- a/launch_only_docker.sh +++ b/launch_only_docker.sh @@ -1,3 +1,3 @@ #Bind the host machine's urc-2023 root folder to the container's target path. #Launch the "trickfireimage" image by giving shell control over to the container -docker run --mount type=bind,source="$(pwd)",target="/home/trickfire/urc-2023" -it --privileged trickfireimage \ No newline at end of file +docker run --mount type=bind,source="$(pwd)",target="/home/trickfire/urc-2023" -it --privileged -e "DISPLAY=$DISPLAY" -v "$HOME/.Xauthority:/root/.Xauthority:ro" --network host trickfireimage From 5e7ef6f14d581a15f7b62a091f1bea0ca2020d64 Mon Sep 17 00:00:00 2001 From: Razvan Anghel Date: Fri, 1 Mar 2024 16:12:11 -0800 Subject: [PATCH 06/50] Changed to compressed image --- src/camera/camera/roscamera.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/camera/camera/roscamera.py b/src/camera/camera/roscamera.py index 8d0428d..7ee022b 100644 --- a/src/camera/camera/roscamera.py +++ b/src/camera/camera/roscamera.py @@ -1,6 +1,6 @@ import rclpy # Python Client Library for ROS 2 from rclpy.node import Node # Handles the creation of nodes -from sensor_msgs.msg import Image # Image is the message type +from sensor_msgs.msg import CompressedImage # Image is the message type from cv_bridge import CvBridge # Package to convert between ROS and OpenCV Images import cv2 # OpenCV library @@ -13,7 +13,7 @@ def __init__(self): # Create the publisher. This publisher will publish an Image # to the video_frames topic. The queue size is 10 messages. - self.publisher_ = self.create_publisher(Image, 'video_frames', 10) + self.publisher_ = self.create_publisher(CompressedImage, 'video_frames', 10) # We will publish a message every 0.1 seconds timer_period = 0.1 # seconds @@ -43,10 +43,11 @@ def timer_callback(self): # Publish the image. # The 'cv2_to_imgmsg' method converts an OpenCV # image to a ROS 2 image message - self.publisher_.publish(self.br.cv2_to_imgmsg(frame)) + msg = self.br.cv2_to_imgmsg(frame) + self.publisher_.publish(self.br.cv2_to_compressed_imgmsg(msg)) # Display the message on the console - self.get_logger().info('Publishing video frame') + self.get_logger().info('Publishing compressed video frame') @@ -60,4 +61,3 @@ def main(args=None): rclpy.spin(node) node.destroy_node() rclpy.shutdown() - From 22c00a8ebc663bbd18504d77fed4613567c093ce Mon Sep 17 00:00:00 2001 From: Razvan Anghel Date: Fri, 1 Mar 2024 16:26:29 -0800 Subject: [PATCH 07/50] Changed to compressed image --- src/camera/camera/roscamera.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/camera/camera/roscamera.py b/src/camera/camera/roscamera.py index 7ee022b..387a4f0 100644 --- a/src/camera/camera/roscamera.py +++ b/src/camera/camera/roscamera.py @@ -41,10 +41,7 @@ def timer_callback(self): if ret == True: # Publish the image. - # The 'cv2_to_imgmsg' method converts an OpenCV - # image to a ROS 2 image message - msg = self.br.cv2_to_imgmsg(frame) - self.publisher_.publish(self.br.cv2_to_compressed_imgmsg(msg)) + self.publisher_.publish(self.br.cv2_to_compressed_imgmsg(frame)) # Display the message on the console self.get_logger().info('Publishing compressed video frame') From b421c7c184caa89741a7719123cb7043f2e7cf9a Mon Sep 17 00:00:00 2001 From: TrickFire Robotics Date: Wed, 10 Apr 2024 17:40:02 -0700 Subject: [PATCH 08/50] stopped running camera test and slower streaming for testing --- .devcontainer/Dockerfile | 1 + launch.sh | 2 +- src/camera/camera/roscamera.py | 5 +++-- src/viator_launch/launch/robot.launch.py | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 75a9b0e..3aeec77 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -9,6 +9,7 @@ RUN apt-get update && apt-get install -y \ python3-pip \ # To let us sync with GitHub over SSH ssh-client \ + ros-humble-rosbridge-server \ # Install usb utilities usbutils \ #Used for cv_bridge diff --git a/launch.sh b/launch.sh index 0afaa8b..7459dec 100755 --- a/launch.sh +++ b/launch.sh @@ -3,4 +3,4 @@ source /opt/ros/$ROS_DISTRO/setup.bash source /home/trickfire/urc-2023/install/setup.bash -ros2 launch viator_launch robot.launch.py +ros2 launch viator_launch robot.launch.py & ros2 launch rosbridge_server rosbridge_websocket_launch.xml diff --git a/src/camera/camera/roscamera.py b/src/camera/camera/roscamera.py index 387a4f0..f2ee9f3 100644 --- a/src/camera/camera/roscamera.py +++ b/src/camera/camera/roscamera.py @@ -16,7 +16,8 @@ def __init__(self): self.publisher_ = self.create_publisher(CompressedImage, 'video_frames', 10) # We will publish a message every 0.1 seconds - timer_period = 0.1 # seconds + # timer_period = 0.1 # seconds + timer_period = 2 # seconds # Create the timer self.timer = self.create_timer(timer_period, self.timer_callback) @@ -44,7 +45,7 @@ def timer_callback(self): self.publisher_.publish(self.br.cv2_to_compressed_imgmsg(frame)) # Display the message on the console - self.get_logger().info('Publishing compressed video frame') + #self.get_logger().info('Publishing compressed video frame') diff --git a/src/viator_launch/launch/robot.launch.py b/src/viator_launch/launch/robot.launch.py index 8f5c6e7..00040c6 100644 --- a/src/viator_launch/launch/robot.launch.py +++ b/src/viator_launch/launch/robot.launch.py @@ -49,5 +49,5 @@ def generate_launch_description(): robot_container, can_moteus_node, ros_camera_node, - ros_camera_test_node + #ros_camera_test_node ]) From 1f3c975bc4b79e7a609f0525acd69f30e2c06ff1 Mon Sep 17 00:00:00 2001 From: Razvan Anghel Date: Mon, 15 Apr 2024 13:26:47 -0700 Subject: [PATCH 09/50] Spin up a camera node for every camera detected --- src/camera/camera/roscamera.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/camera/camera/roscamera.py b/src/camera/camera/roscamera.py index f2ee9f3..66a4889 100644 --- a/src/camera/camera/roscamera.py +++ b/src/camera/camera/roscamera.py @@ -3,11 +3,11 @@ from sensor_msgs.msg import CompressedImage # Image is the message type from cv_bridge import CvBridge # Package to convert between ROS and OpenCV Images import cv2 # OpenCV library - +from pathlib import Path class RosCamera(Node): - def __init__(self): + def __init__(self, camera: int): super().__init__("ros_camera") self.get_logger().info("Launching ros_camera node") @@ -24,7 +24,7 @@ def __init__(self): # Create a VideoCapture object # The argument '0' gets the default webcam. - self.cap = cv2.VideoCapture(0) + self.cap = cv2.VideoCapture(camera) # Used to convert between ROS and OpenCV images self.br = CvBridge() @@ -54,8 +54,16 @@ def timer_callback(self): def main(args=None): + pathlist = Path('/dev/').glob('video*') + videoId = 0 + rclpy.init(args=args) - node = RosCamera() - rclpy.spin(node) - node.destroy_node() + + for _ in pathlist: # loop through every camera device in dev directory + node = RosCamera(videoId) + videoId = videoId + 1 + + rclpy.spin(node) + node.destroy_node() + rclpy.shutdown() From 418ae4e832db1c76aec35892143217be27ff0b7c Mon Sep 17 00:00:00 2001 From: TrickFire Robotics Date: Wed, 17 Apr 2024 13:03:07 -0700 Subject: [PATCH 10/50] Pushing any changes that were done. I am switching branches -vlad --- src/camera/camera/roscamera.py | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/camera/camera/roscamera.py b/src/camera/camera/roscamera.py index 66a4889..1996e93 100644 --- a/src/camera/camera/roscamera.py +++ b/src/camera/camera/roscamera.py @@ -25,6 +25,7 @@ def __init__(self, camera: int): # Create a VideoCapture object # The argument '0' gets the default webcam. self.cap = cv2.VideoCapture(camera) + self.get_logger().info("Using video ID: " + str(camera) + ", ON: " + str(self.cap.isOpened())) # Used to convert between ROS and OpenCV images self.br = CvBridge() @@ -49,21 +50,18 @@ def timer_callback(self): - - - - def main(args=None): - pathlist = Path('/dev/').glob('video*') - videoId = 0 - rclpy.init(args=args) - for _ in pathlist: # loop through every camera device in dev directory - node = RosCamera(videoId) - videoId = videoId + 1 + node = RosCamera(0) + rclpy.spin(node) + node.destroy_node() - rclpy.spin(node) - node.destroy_node() - + node2 = RosCamera(2) + rclpy.spin(node2) + node2.destroy_node() + + + node.destroy_node() + node2.destroy_node() rclpy.shutdown() From 043ae57ed82d5fad80d6b5980b302ac381dbc193 Mon Sep 17 00:00:00 2001 From: Razvan Anghel Date: Mon, 22 Apr 2024 12:27:02 -0700 Subject: [PATCH 11/50] multi threaded executor for all cameras --- src/camera/camera/roscamera.py | 62 ++++++++++++++++++++++++++-------- 1 file changed, 48 insertions(+), 14 deletions(-) diff --git a/src/camera/camera/roscamera.py b/src/camera/camera/roscamera.py index 1996e93..fe58bd1 100644 --- a/src/camera/camera/roscamera.py +++ b/src/camera/camera/roscamera.py @@ -2,9 +2,31 @@ from rclpy.node import Node # Handles the creation of nodes from sensor_msgs.msg import CompressedImage # Image is the message type from cv_bridge import CvBridge # Package to convert between ROS and OpenCV Images +from rclpy.executors import MultiThreadedExecutor import cv2 # OpenCV library from pathlib import Path +# returns a list of working camera ids to capture every camera connected to the robot +def get_cameras() -> list[int]: + nonWorkingPorts = 0 + devPort = 0 + workingPorts = [] + + while nonWorkingPorts < 6: + camera = cv2.VideoCapture(devPort) + if not camera.isOpened(): + nonWorkingPorts += 1 + else: + isReading, img = camera.read() + _ = camera.get(3) + _ = camera.get(4) + if isReading: + workingPorts.append(devPort) + + devPort += 1 + + return workingPorts + class RosCamera(Node): def __init__(self, camera: int): @@ -13,7 +35,7 @@ def __init__(self, camera: int): # Create the publisher. This publisher will publish an Image # to the video_frames topic. The queue size is 10 messages. - self.publisher_ = self.create_publisher(CompressedImage, 'video_frames', 10) + self._publisher = self.create_publisher(CompressedImage, 'video_frames', 10) # We will publish a message every 0.1 seconds # timer_period = 0.1 # seconds @@ -43,25 +65,37 @@ def timer_callback(self): if ret == True: # Publish the image. - self.publisher_.publish(self.br.cv2_to_compressed_imgmsg(frame)) + self._publisher.publish(self.br.cv2_to_compressed_imgmsg(frame)) # Display the message on the console - #self.get_logger().info('Publishing compressed video frame') + # self.get_logger().info('Publishing compressed video frame') def main(args=None): rclpy.init(args=args) + try: + """ + we need an executor because running .spin() is a blocking function. + using the MultiThreadedExecutor, we can run multiple nodes on the same topic + """ + executor = MultiThreadedExecutor() + nodes = [] - node = RosCamera(0) - rclpy.spin(node) - node.destroy_node() - - node2 = RosCamera(2) - rclpy.spin(node2) - node2.destroy_node() - + for cameraID in get_cameras(): + node = RosCamera(cameraID) + nodes.append(node) + executor.add_node(node) + + try: + executor.spin() + finally: + executor.shutdown() + for node in nodes: + node.destroy_node() + + finally: + rclpy.shutdown() - node.destroy_node() - node2.destroy_node() - rclpy.shutdown() +if __name__ == '__main__': + main() From 3261f6a0bbcc078f8e479e2410fa7f478df767c5 Mon Sep 17 00:00:00 2001 From: Razvan Anghel Date: Mon, 22 Apr 2024 15:08:34 -0700 Subject: [PATCH 12/50] changed to individual topic for each camera --- src/camera/camera/roscamera.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/camera/camera/roscamera.py b/src/camera/camera/roscamera.py index fe58bd1..65e9ff0 100644 --- a/src/camera/camera/roscamera.py +++ b/src/camera/camera/roscamera.py @@ -29,13 +29,14 @@ def get_cameras() -> list[int]: class RosCamera(Node): - def __init__(self, camera: int): + def __init__(self, topicName: str, camera: int): super().__init__("ros_camera") self.get_logger().info("Launching ros_camera node") # Create the publisher. This publisher will publish an Image # to the video_frames topic. The queue size is 10 messages. - self._publisher = self.create_publisher(CompressedImage, 'video_frames', 10) + self._publisher = self.create_publisher(CompressedImage, topicName, 10) + self.get_logger().info("Created Publisher " + topicName) # We will publish a message every 0.1 seconds # timer_period = 0.1 # seconds @@ -77,13 +78,14 @@ def main(args=None): try: """ we need an executor because running .spin() is a blocking function. - using the MultiThreadedExecutor, we can run multiple nodes on the same topic + using the MultiThreadedExecutor, we can control multiple nodes """ executor = MultiThreadedExecutor() nodes = [] + cameraNum = 0 for cameraID in get_cameras(): - node = RosCamera(cameraID) + node = RosCamera("video_frames" + cameraNum, cameraID) nodes.append(node) executor.add_node(node) From 9ea485d9da3da52a20b22c4327582c93732c7ef4 Mon Sep 17 00:00:00 2001 From: Razvan Anghel Date: Mon, 22 Apr 2024 15:11:25 -0700 Subject: [PATCH 13/50] bug fix to append string to string --- src/camera/camera/roscamera.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/camera/camera/roscamera.py b/src/camera/camera/roscamera.py index 65e9ff0..3262ef2 100644 --- a/src/camera/camera/roscamera.py +++ b/src/camera/camera/roscamera.py @@ -85,7 +85,7 @@ def main(args=None): cameraNum = 0 for cameraID in get_cameras(): - node = RosCamera("video_frames" + cameraNum, cameraID) + node = RosCamera("video_frames" + str(cameraNum), cameraID) nodes.append(node) executor.add_node(node) From a6d8cd43eda8f8a9e841c75add4a698fd74adebe Mon Sep 17 00:00:00 2001 From: Razvan Anghel Date: Mon, 22 Apr 2024 15:15:19 -0700 Subject: [PATCH 14/50] another bug fix to iterate camera topic name --- src/camera/camera/roscamera.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/camera/camera/roscamera.py b/src/camera/camera/roscamera.py index 3262ef2..9388068 100644 --- a/src/camera/camera/roscamera.py +++ b/src/camera/camera/roscamera.py @@ -88,6 +88,7 @@ def main(args=None): node = RosCamera("video_frames" + str(cameraNum), cameraID) nodes.append(node) executor.add_node(node) + cameraNum += 1 try: executor.spin() From 81fa80b4acb28c74a803a9fc0abe64a30368a6f1 Mon Sep 17 00:00:00 2001 From: Razvan Anghel Date: Mon, 29 Apr 2024 14:07:45 -0700 Subject: [PATCH 15/50] added a test for custom camera executor --- src/executor_test/executor_test/__init__.py | 0 .../executor_test/executor_test.py | 23 +++++++++ src/executor_test/executor_test/utils.py | 51 +++++++++++++++++++ src/executor_test/package.xml | 18 +++++++ src/executor_test/resource/executor_test | 0 src/executor_test/setup.cfg | 4 ++ src/executor_test/setup.py | 25 +++++++++ src/executor_test/test/test_copyright.py | 25 +++++++++ src/executor_test/test/test_flake8.py | 25 +++++++++ src/executor_test/test/test_pep257.py | 23 +++++++++ src/viator_launch/launch/robot.launch.py | 7 +++ 11 files changed, 201 insertions(+) create mode 100644 src/executor_test/executor_test/__init__.py create mode 100644 src/executor_test/executor_test/executor_test.py create mode 100644 src/executor_test/executor_test/utils.py create mode 100644 src/executor_test/package.xml create mode 100644 src/executor_test/resource/executor_test create mode 100644 src/executor_test/setup.cfg create mode 100644 src/executor_test/setup.py create mode 100644 src/executor_test/test/test_copyright.py create mode 100644 src/executor_test/test/test_flake8.py create mode 100644 src/executor_test/test/test_pep257.py diff --git a/src/executor_test/executor_test/__init__.py b/src/executor_test/executor_test/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/executor_test/executor_test/executor_test.py b/src/executor_test/executor_test/executor_test.py new file mode 100644 index 0000000..023355d --- /dev/null +++ b/src/executor_test/executor_test/executor_test.py @@ -0,0 +1,23 @@ +from .utils import CameraExecutor, CameraNode +import rclpy + +def main(args=None): + rclpy.init(args=args) + try: + node1 = CameraNode(0) + node2 = CameraNode(1) + + executor = CameraExecutor() + executor.add_node(node1) + executor.add_node(node2) + try: + executor.spin() + finally: + executor.shutdown() + node1.destroy_node() + node2.destroy_node() + finally: + rclpy.shutdown() + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/src/executor_test/executor_test/utils.py b/src/executor_test/executor_test/utils.py new file mode 100644 index 0000000..5dc21d6 --- /dev/null +++ b/src/executor_test/executor_test/utils.py @@ -0,0 +1,51 @@ +from rclpy.executors import Executor +from concurrent.futures import ThreadPoolExecutor +from rclpy.node import Node +from std_msgs.msg import String +import os + +""" +This class is useful for the camera service and topics. +Service to shut down topics should be put as the priority node +and all camera publishers should be low priority. +Service gets its own thread and publishers get more +""" +class CameraExecutor(Executor): + def __init__(self): + super().__init__() + self.high_priority_nodes = set() + self.hp_executor = ThreadPoolExecutor(max_workers = 1) + self.lp_executor = ThreadPoolExecutor(max_workers = os.cpu_count() or 4) + + def add_hp_node(self, node): + self.high_priority_nodes.add(node) + self.add_node(node) # inherited + + # Function override. + # Executes the callbacks + def spin_once(self, timeout_sec=None): + try: + handler, group, node = self.wait_for_ready_callbacks(timeout_sec=timeout_sec) + except StopIteration: + pass + else: + if node in self.high_priority_nodes: + self.hp_executor.submit(handler) + else: + self.lp_executor.submit(handler) + + +class CameraNode(Node): + def __init__(self, topic_id: int): + super().__init_("executor_camera_test_node") + + self.i = 0 + self.pub = self.create_publisher(String, '/video_frames' + str(topic_id) + 10) + + self.timer = self.create_timer(2, self.timer_callback) + + def timer_callback(self): + msg = String() + msg.data = "Hello World: {0}".format(self.i) + self.i += 1 + self.pub.publish(msg) \ No newline at end of file diff --git a/src/executor_test/package.xml b/src/executor_test/package.xml new file mode 100644 index 0000000..763128e --- /dev/null +++ b/src/executor_test/package.xml @@ -0,0 +1,18 @@ + + + + executor_test + 0.0.0 + TODO: Package description + root + TODO: License declaration + + ament_copyright + ament_flake8 + ament_pep257 + python3-pytest + + + ament_python + + diff --git a/src/executor_test/resource/executor_test b/src/executor_test/resource/executor_test new file mode 100644 index 0000000..e69de29 diff --git a/src/executor_test/setup.cfg b/src/executor_test/setup.cfg new file mode 100644 index 0000000..a6ba7b9 --- /dev/null +++ b/src/executor_test/setup.cfg @@ -0,0 +1,4 @@ +[develop] +script_dir=$base/lib/executor_test +[install] +install_scripts=$base/lib/executor_test diff --git a/src/executor_test/setup.py b/src/executor_test/setup.py new file mode 100644 index 0000000..81d6d04 --- /dev/null +++ b/src/executor_test/setup.py @@ -0,0 +1,25 @@ +from setuptools import find_packages, setup + +package_name = 'executor_test' + +setup( + name=package_name, + version='0.0.0', + packages=find_packages(exclude=['test']), + data_files=[ + ('share/ament_index/resource_index/packages', + ['resource/' + package_name]), + ('share/' + package_name, ['package.xml']), + ], + install_requires=['setuptools'], + zip_safe=True, + maintainer='root', + maintainer_email='root@todo.todo', + description='TODO: Package description', + license='TODO: License declaration', + tests_require=['pytest'], + entry_points={ + 'console_scripts': [ + ], + }, +) diff --git a/src/executor_test/test/test_copyright.py b/src/executor_test/test/test_copyright.py new file mode 100644 index 0000000..97a3919 --- /dev/null +++ b/src/executor_test/test/test_copyright.py @@ -0,0 +1,25 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_copyright.main import main +import pytest + + +# Remove the `skip` decorator once the source file(s) have a copyright header +@pytest.mark.skip(reason='No copyright header has been placed in the generated source file.') +@pytest.mark.copyright +@pytest.mark.linter +def test_copyright(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found errors' diff --git a/src/executor_test/test/test_flake8.py b/src/executor_test/test/test_flake8.py new file mode 100644 index 0000000..27ee107 --- /dev/null +++ b/src/executor_test/test/test_flake8.py @@ -0,0 +1,25 @@ +# Copyright 2017 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_flake8.main import main_with_errors +import pytest + + +@pytest.mark.flake8 +@pytest.mark.linter +def test_flake8(): + rc, errors = main_with_errors(argv=[]) + assert rc == 0, \ + 'Found %d code style errors / warnings:\n' % len(errors) + \ + '\n'.join(errors) diff --git a/src/executor_test/test/test_pep257.py b/src/executor_test/test/test_pep257.py new file mode 100644 index 0000000..b234a38 --- /dev/null +++ b/src/executor_test/test/test_pep257.py @@ -0,0 +1,23 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_pep257.main import main +import pytest + + +@pytest.mark.linter +@pytest.mark.pep257 +def test_pep257(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found code style errors / warnings' diff --git a/src/viator_launch/launch/robot.launch.py b/src/viator_launch/launch/robot.launch.py index 00040c6..03cc064 100644 --- a/src/viator_launch/launch/robot.launch.py +++ b/src/viator_launch/launch/robot.launch.py @@ -27,6 +27,12 @@ name='ros_camera_sub' ) +ros_executor_test_node = Node( + package='executor_test', + executable='executor_test', + name='executor_camera_test_node' +) + # Composable Nodes launched in a Composable Node container will share a process # and can use very fast inter-process communication instead of publishing # messages over a network socket. @@ -49,5 +55,6 @@ def generate_launch_description(): robot_container, can_moteus_node, ros_camera_node, + ros_executor_test_node, #ros_camera_test_node ]) From c8a0373e6394b7212735c558a4622576f1905924 Mon Sep 17 00:00:00 2001 From: Razvan Anghel Date: Mon, 29 Apr 2024 14:50:10 -0700 Subject: [PATCH 16/50] temporarily removing camera node because it's broken --- src/viator_launch/launch/robot.launch.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/viator_launch/launch/robot.launch.py b/src/viator_launch/launch/robot.launch.py index 03cc064..ef16337 100644 --- a/src/viator_launch/launch/robot.launch.py +++ b/src/viator_launch/launch/robot.launch.py @@ -54,7 +54,7 @@ def generate_launch_description(): return launch.LaunchDescription([ robot_container, can_moteus_node, - ros_camera_node, + #ros_camera_node, ros_executor_test_node, #ros_camera_test_node ]) From c2d3b16ee47fd86c4f5c18adc2fcb0666956e8dc Mon Sep 17 00:00:00 2001 From: Razvan Anghel Date: Mon, 29 Apr 2024 15:06:52 -0700 Subject: [PATCH 17/50] added camera node back --- src/viator_launch/launch/robot.launch.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/viator_launch/launch/robot.launch.py b/src/viator_launch/launch/robot.launch.py index ef16337..03cc064 100644 --- a/src/viator_launch/launch/robot.launch.py +++ b/src/viator_launch/launch/robot.launch.py @@ -54,7 +54,7 @@ def generate_launch_description(): return launch.LaunchDescription([ robot_container, can_moteus_node, - #ros_camera_node, + ros_camera_node, ros_executor_test_node, #ros_camera_test_node ]) From ec359ae5f97802cb4356bc5ab60fbb51be33870b Mon Sep 17 00:00:00 2001 From: Razvan Anghel Date: Mon, 29 Apr 2024 15:12:30 -0700 Subject: [PATCH 18/50] changed executor publisher name because name conflict with roscamera --- src/executor_test/executor_test/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/executor_test/executor_test/utils.py b/src/executor_test/executor_test/utils.py index 5dc21d6..801913d 100644 --- a/src/executor_test/executor_test/utils.py +++ b/src/executor_test/executor_test/utils.py @@ -40,7 +40,7 @@ def __init__(self, topic_id: int): super().__init_("executor_camera_test_node") self.i = 0 - self.pub = self.create_publisher(String, '/video_frames' + str(topic_id) + 10) + self.pub = self.create_publisher(String, '/exec_frames' + str(topic_id) + 10) self.timer = self.create_timer(2, self.timer_callback) From c694f918d9fafb9c72034bbc98aa6585d2ef5488 Mon Sep 17 00:00:00 2001 From: Razvan Anghel Date: Mon, 29 Apr 2024 15:15:13 -0700 Subject: [PATCH 19/50] something is wrong with publisher name. removed executor test from launch file --- src/viator_launch/launch/robot.launch.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/viator_launch/launch/robot.launch.py b/src/viator_launch/launch/robot.launch.py index 03cc064..92d05f4 100644 --- a/src/viator_launch/launch/robot.launch.py +++ b/src/viator_launch/launch/robot.launch.py @@ -55,6 +55,6 @@ def generate_launch_description(): robot_container, can_moteus_node, ros_camera_node, - ros_executor_test_node, + #ros_executor_test_node, #ros_camera_test_node ]) From 046154e15308deac80a124ace04fa294ec30d2b8 Mon Sep 17 00:00:00 2001 From: dkim03 Date: Mon, 9 Sep 2024 10:20:07 -0700 Subject: [PATCH 20/50] Implemented camera toggle control via a mission control topic called 'camera_control' that sends string messages --- .vscode/settings.json | 3 ++- src/camera/camera/roscamera.py | 34 ++++++++++++++++++++++++++++++++-- src/camera/package.xml | 5 +++++ 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 9d6c809..b04318f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -12,5 +12,6 @@ "[python]": { "editor.defaultFormatter": "ms-python.autopep8" }, - "python.formatting.provider": "none" + "python.formatting.provider": "none", + "ros.distro": "humble" } \ No newline at end of file diff --git a/src/camera/camera/roscamera.py b/src/camera/camera/roscamera.py index 9388068..791f55c 100644 --- a/src/camera/camera/roscamera.py +++ b/src/camera/camera/roscamera.py @@ -5,6 +5,7 @@ from rclpy.executors import MultiThreadedExecutor import cv2 # OpenCV library from pathlib import Path +from std_msgs.msg import String # returns a list of working camera ids to capture every camera connected to the robot def get_cameras() -> list[int]: @@ -38,6 +39,20 @@ def __init__(self, topicName: str, camera: int): self._publisher = self.create_publisher(CompressedImage, topicName, 10) self.get_logger().info("Created Publisher " + topicName) + # Create a subscription to read 'camera_control' topic from + # mission control. Topic messages are Strings. + # ex. topic message: "toggle arm_camera, ID: 0" + # The topic message should always have the corresponding camera number + # at the last index of each message. + subTopicName = "camera_control" + self.subscription = self.create_subscription( + String, + subTopicName, + self.toggle_camera, + 10) + self.subscription + self.get_logger().info("Created Subscription to" + subTopicName) + # We will publish a message every 0.1 seconds # timer_period = 0.1 # seconds timer_period = 2 # seconds @@ -52,7 +67,10 @@ def __init__(self, topicName: str, camera: int): # Used to convert between ROS and OpenCV images self.br = CvBridge() - + + # Declare parameters for each 'ros_camera' node thread + self.declare_parameter("cameraNumber", camera) + self.declare_parameter("isOn", True) def timer_callback(self): """ @@ -64,14 +82,26 @@ def timer_callback(self): # as the video frame. ret, frame = self.cap.read() - if ret == True: + # Get 'ros_camera' parameter, isOn, then check the state of the camera to publish frame or not + isOn = bool(self.get_parameter("isOn")._value) + if ret and isOn: # Publish the image. self._publisher.publish(self.br.cv2_to_compressed_imgmsg(frame)) # Display the message on the console # self.get_logger().info('Publishing compressed video frame') + def toggle_camera(self, msg) -> None: + # Read the last index of the message and check whether mission control is targeting this + # instance of 'ros_camera' + cameraNumber = int(self.get_parameter("cameraNumber")._value) + if (int(msg.data[-1]) != cameraNumber): + return + # Toggle by not'ing the bool value + isOn = bool(self.get_parameter("isOn")._value) + self.undeclare_parameter("isOn") + self.declare_parameter("isOn", not isOn) def main(args=None): rclpy.init(args=args) diff --git a/src/camera/package.xml b/src/camera/package.xml index 5a428f3..cabb39a 100644 --- a/src/camera/package.xml +++ b/src/camera/package.xml @@ -7,6 +7,11 @@ trickfire TODO: License declaration + rclpy + std_msgs + cv2 + cv_bridge + ament_copyright ament_flake8 ament_pep257 From 46eb01068e5a28a357c4cf5b5372c0072147454b Mon Sep 17 00:00:00 2001 From: dkim03 Date: Fri, 27 Sep 2024 23:03:07 -0700 Subject: [PATCH 21/50] delete camera_subscriber (unused) --- .../camera_subscriber_test/__init__.py | 0 .../camera_subscriber_test/roscamerasub.py | 44 ------------------- src/camera_subscriber_test/package.xml | 18 -------- .../resource/camera_subscriber_test | 0 src/camera_subscriber_test/setup.cfg | 4 -- src/camera_subscriber_test/setup.py | 26 ----------- .../test/test_copyright.py | 25 ----------- .../test/test_flake8.py | 25 ----------- .../test/test_pep257.py | 23 ---------- 9 files changed, 165 deletions(-) delete mode 100644 src/camera_subscriber_test/camera_subscriber_test/__init__.py delete mode 100644 src/camera_subscriber_test/camera_subscriber_test/roscamerasub.py delete mode 100644 src/camera_subscriber_test/package.xml delete mode 100644 src/camera_subscriber_test/resource/camera_subscriber_test delete mode 100644 src/camera_subscriber_test/setup.cfg delete mode 100644 src/camera_subscriber_test/setup.py delete mode 100644 src/camera_subscriber_test/test/test_copyright.py delete mode 100644 src/camera_subscriber_test/test/test_flake8.py delete mode 100644 src/camera_subscriber_test/test/test_pep257.py diff --git a/src/camera_subscriber_test/camera_subscriber_test/__init__.py b/src/camera_subscriber_test/camera_subscriber_test/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/camera_subscriber_test/camera_subscriber_test/roscamerasub.py b/src/camera_subscriber_test/camera_subscriber_test/roscamerasub.py deleted file mode 100644 index 7ff8e24..0000000 --- a/src/camera_subscriber_test/camera_subscriber_test/roscamerasub.py +++ /dev/null @@ -1,44 +0,0 @@ -import rclpy -from rclpy.node import Node -from sensor_msgs.msg import Image -from cv_bridge import CvBridge -import cv2 - - -class RosCameraSub(Node): - - def __init__(self): - super().__init__("ros_camera_sub") - self.get_logger().info("Launching ros_camera_sub node") - - self.subscription = self.create_subscription( - Image, - "video_frames", - self.listerner_callback, - 10 - ) - - self.subscription - - self.br = CvBridge() - - def listerner_callback(self, data): - self.get_logger().info("Getting video frame") - - current_frame = self.br.imgmsg_to_cv2(data) - - cv2.imshow("camera", current_frame) - - cv2.waitKey(1) - - - - - -def main(args=None): - rclpy.init(args=args) - node = RosCameraSub() - rclpy.spin(node) - node.destroy_node() - rclpy.shutdown() - diff --git a/src/camera_subscriber_test/package.xml b/src/camera_subscriber_test/package.xml deleted file mode 100644 index 1f1c7d3..0000000 --- a/src/camera_subscriber_test/package.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - camera_subscriber_test - 0.0.0 - TODO: Package description - trickfire - TODO: License declaration - - ament_copyright - ament_flake8 - ament_pep257 - python3-pytest - - - ament_python - - diff --git a/src/camera_subscriber_test/resource/camera_subscriber_test b/src/camera_subscriber_test/resource/camera_subscriber_test deleted file mode 100644 index e69de29..0000000 diff --git a/src/camera_subscriber_test/setup.cfg b/src/camera_subscriber_test/setup.cfg deleted file mode 100644 index 279bc68..0000000 --- a/src/camera_subscriber_test/setup.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[develop] -script_dir=$base/lib/camera_subscriber_test -[install] -install_scripts=$base/lib/camera_subscriber_test diff --git a/src/camera_subscriber_test/setup.py b/src/camera_subscriber_test/setup.py deleted file mode 100644 index 142ee5f..0000000 --- a/src/camera_subscriber_test/setup.py +++ /dev/null @@ -1,26 +0,0 @@ -from setuptools import find_packages, setup - -package_name = 'camera_subscriber_test' - -setup( - name=package_name, - version='0.0.0', - packages=find_packages(exclude=['test']), - data_files=[ - ('share/ament_index/resource_index/packages', - ['resource/' + package_name]), - ('share/' + package_name, ['package.xml']), - ], - install_requires=['setuptools'], - zip_safe=True, - maintainer='trickfire', - maintainer_email='vladimirkupryukhin@gmail.com', - description='TODO: Package description', - license='TODO: License declaration', - tests_require=['pytest'], - entry_points={ - 'console_scripts': [ - 'roscamerasub = camera_subscriber_test.roscamerasub:main' - ], - }, -) diff --git a/src/camera_subscriber_test/test/test_copyright.py b/src/camera_subscriber_test/test/test_copyright.py deleted file mode 100644 index 97a3919..0000000 --- a/src/camera_subscriber_test/test/test_copyright.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2015 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_copyright.main import main -import pytest - - -# Remove the `skip` decorator once the source file(s) have a copyright header -@pytest.mark.skip(reason='No copyright header has been placed in the generated source file.') -@pytest.mark.copyright -@pytest.mark.linter -def test_copyright(): - rc = main(argv=['.', 'test']) - assert rc == 0, 'Found errors' diff --git a/src/camera_subscriber_test/test/test_flake8.py b/src/camera_subscriber_test/test/test_flake8.py deleted file mode 100644 index 27ee107..0000000 --- a/src/camera_subscriber_test/test/test_flake8.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2017 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_flake8.main import main_with_errors -import pytest - - -@pytest.mark.flake8 -@pytest.mark.linter -def test_flake8(): - rc, errors = main_with_errors(argv=[]) - assert rc == 0, \ - 'Found %d code style errors / warnings:\n' % len(errors) + \ - '\n'.join(errors) diff --git a/src/camera_subscriber_test/test/test_pep257.py b/src/camera_subscriber_test/test/test_pep257.py deleted file mode 100644 index b234a38..0000000 --- a/src/camera_subscriber_test/test/test_pep257.py +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright 2015 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_pep257.main import main -import pytest - - -@pytest.mark.linter -@pytest.mark.pep257 -def test_pep257(): - rc = main(argv=['.', 'test']) - assert rc == 0, 'Found code style errors / warnings' From 0153dc01e46b257aa2ffcea846db180a5eb2d81d Mon Sep 17 00:00:00 2001 From: dkim03 Date: Fri, 27 Sep 2024 23:38:48 -0700 Subject: [PATCH 22/50] rebase + updated roscamera.py with on, off functionality instead of toggle and added better documentation, fixed formatting --- .devcontainer/Dockerfile | 28 +- .devcontainer/devcontainer.json | 4 + .gitmodules | 4 - .pylintrc | 635 ++++++++++++++++++ .vscode/c_cpp_properties.json | 2 +- .vscode/settings.json | 32 +- README.md | 22 +- build_only_docker.sh | 3 - connect_to_container.sh | 2 + container_launch.sh | 80 +++ docs/can_moteus.md | 99 +-- docs/can_moteus_overview.png | Bin 0 -> 83907 bytes docs/code_overview.md | 75 +-- docs/formatting.md | 173 +++++ docs/getting_started.md | 7 +- docs/install_on_linux.md | 3 + docs/install_on_windows.md | 11 +- docs/installing_on_mac.md | 3 + docs/python_creating_a_new_node.md | 110 +++ docs/resources/code_funnel.png | Bin 0 -> 1421673 bytes docs/resources/code_overview.png | Bin 0 -> 197994 bytes docs/resources/moteus_docs.png | Bin 92025 -> 0 bytes launch.sh | 11 +- launch_only_docker.sh | 3 - mypy.ini | 10 + src/arm/arm/ResponseStructure.srv | 3 + .../executor_test => arm/arm}/__init__.py | 0 src/arm/arm/arm.py | 85 +++ src/arm/arm/individual_control_vel.py | 197 ++++++ src/arm/package.xml | 12 +- .../executor_test => arm/resource/arm} | 0 src/arm/setup.cfg | 4 + src/arm/setup.py | 23 + src/arm/src/my_node.cpp | 10 - .../test/test_copyright.py | 6 +- src/camera/camera/roscamera.py | 83 ++- src/camera/package.xml | 7 +- src/camera/setup.py | 6 +- src/camera/test/test_flake8.py | 25 - src/camera/test/test_pep257.py | 23 - src/can/CMakeLists.txt | 34 - src/can/package.xml | 18 - src/can/src/my_node.cpp | 10 - src/can_moteus/can_moteus/moteus_motor.py | 211 +++--- .../can_moteus/moteus_multiprocess.py | 208 ------ .../can_moteus/moteus_thread_manager.py | 260 +++++++ .../can_moteus/ros_moteus_bridge.py | 148 ++-- src/can_moteus/setup.py | 30 +- src/can_moteus/test/test_copyright.py | 8 +- src/can_moteus/test/test_flake8.py | 25 - src/can_moteus/test/test_pep257.py | 23 - src/communication/CMakeLists.txt | 34 - src/communication/package.xml | 18 - src/communication/src/my_node.cpp | 10 - src/{arm => custom_interfaces}/CMakeLists.txt | 22 +- .../package.xml | 11 +- src/custom_interfaces/srv/ArmMode.srv | 3 + src/drivebase/drivebase/drivebase.py | 66 +- src/drivebase/package.xml | 4 +- src/drivebase/setup.py | 25 +- src/drivebase/test/test_copyright.py | 4 +- src/drivebase/test/test_flake8.py | 25 - src/drivebase/test/test_pep257.py | 23 - .../example_node}/__init__.py | 0 src/example_node/example_node/example.py | 89 +++ .../package.xml | 4 +- .../resource/example_node} | 0 src/example_node/setup.cfg | 4 + src/{executor_test => example_node}/setup.py | 9 +- .../test/test_copyright.py | 0 .../executor_test/executor_test.py | 23 - src/executor_test/executor_test/utils.py | 51 -- src/executor_test/package.xml | 18 - src/executor_test/setup.cfg | 4 - src/executor_test/test/test_flake8.py | 25 - src/executor_test/test/test_pep257.py | 23 - src/hello_world/CMakeLists.txt | 48 -- .../include/hello_world/hello_node.hpp | 14 - src/hello_world/src/hello_node.cpp | 15 - src/interface/CMakeLists.txt | 34 - src/interface/package.xml | 18 - src/interface/src/my_node.cpp | 10 - src/lib/color_codes.py | 44 ++ src/lib/configs.py | 192 ++++++ src/lib/interface/robot_info.py | 43 ++ src/lib/interface/robot_interface.py | 103 +++ src/lib/json_msg.py | 70 ++ src/lib/moteus_motor_state.py | 95 +++ .../life_detection/life_detection.py | 6 - src/life_detection/setup.cfg | 4 - src/life_detection/setup.py | 26 - src/life_detection/test/test_flake8.py | 25 - src/life_detection/test/test_pep257.py | 23 - src/localization/localization/localization.py | 6 - src/localization/setup.cfg | 4 - src/localization/setup.py | 26 - src/localization/test/test_flake8.py | 25 - src/localization/test/test_pep257.py | 23 - src/mission_control/CMakeLists.txt | 34 - src/mission_control/package.xml | 18 - src/mission_control/src/my_node.cpp | 10 - .../mission_control_updater}/__init__.py | 0 .../info_to_json_helper.py | 25 + .../mission_control_updater/updater.py | 61 ++ .../package.xml | 4 +- .../resource/mission_control_updater} | 0 src/mission_control_updater/setup.cfg | 4 + src/mission_control_updater/setup.py | 23 + .../test/test_copyright.py | 6 +- src/monitering/CMakeLists.txt | 34 - src/monitering/package.xml | 18 - src/monitering/src/my_node.cpp | 10 - src/sensor/CMakeLists.txt | 34 - src/sensor/package.xml | 18 - src/sensor/src/my_node.cpp | 10 - src/teleoperation/package.xml | 18 - src/teleoperation/resource/teleoperation | 0 src/teleoperation/setup.cfg | 4 - src/teleoperation/setup.py | 26 - src/teleoperation/teleoperation/__init__.py | 0 .../teleoperation/teleoperation.py | 6 - src/teleoperation/test/test_copyright.py | 23 - src/teleoperation/test/test_flake8.py | 25 - src/teleoperation/test/test_pep257.py | 23 - src/viator_launch/launch/robot.launch.py | 66 +- src/viator_launch/package.xml | 8 +- src/viator_launch/setup.py | 22 +- src/viator_launch/test/test_copyright.py | 4 +- src/viator_launch/test/test_flake8.py | 25 - src/viator_launch/test/test_pep257.py | 23 - src/vision_opencv | 1 - 131 files changed, 2884 insertions(+), 1824 deletions(-) delete mode 100644 .gitmodules create mode 100644 .pylintrc delete mode 100755 build_only_docker.sh create mode 100755 connect_to_container.sh create mode 100755 container_launch.sh create mode 100644 docs/can_moteus_overview.png create mode 100644 docs/formatting.md create mode 100644 docs/python_creating_a_new_node.md create mode 100644 docs/resources/code_funnel.png create mode 100644 docs/resources/code_overview.png delete mode 100644 docs/resources/moteus_docs.png delete mode 100755 launch_only_docker.sh create mode 100644 mypy.ini create mode 100644 src/arm/arm/ResponseStructure.srv rename src/{executor_test/executor_test => arm/arm}/__init__.py (100%) create mode 100644 src/arm/arm/arm.py create mode 100644 src/arm/arm/individual_control_vel.py rename src/{executor_test/resource/executor_test => arm/resource/arm} (100%) create mode 100644 src/arm/setup.cfg create mode 100644 src/arm/setup.py delete mode 100644 src/arm/src/my_node.cpp rename src/{life_detection => arm}/test/test_copyright.py (74%) delete mode 100644 src/camera/test/test_flake8.py delete mode 100644 src/camera/test/test_pep257.py delete mode 100644 src/can/CMakeLists.txt delete mode 100644 src/can/package.xml delete mode 100644 src/can/src/my_node.cpp mode change 100755 => 100644 src/can_moteus/can_moteus/moteus_motor.py delete mode 100644 src/can_moteus/can_moteus/moteus_multiprocess.py create mode 100644 src/can_moteus/can_moteus/moteus_thread_manager.py mode change 100755 => 100644 src/can_moteus/can_moteus/ros_moteus_bridge.py delete mode 100644 src/can_moteus/test/test_flake8.py delete mode 100644 src/can_moteus/test/test_pep257.py delete mode 100644 src/communication/CMakeLists.txt delete mode 100644 src/communication/package.xml delete mode 100644 src/communication/src/my_node.cpp rename src/{arm => custom_interfaces}/CMakeLists.txt (52%) rename src/{hello_world => custom_interfaces}/package.xml (64%) create mode 100644 src/custom_interfaces/srv/ArmMode.srv delete mode 100644 src/drivebase/test/test_flake8.py delete mode 100644 src/drivebase/test/test_pep257.py rename src/{life_detection/life_detection => example_node/example_node}/__init__.py (100%) create mode 100644 src/example_node/example_node/example.py rename src/{life_detection => example_node}/package.xml (84%) rename src/{life_detection/resource/life_detection => example_node/resource/example_node} (100%) create mode 100644 src/example_node/setup.cfg rename src/{executor_test => example_node}/setup.py (73%) rename src/{executor_test => example_node}/test/test_copyright.py (100%) delete mode 100644 src/executor_test/executor_test/executor_test.py delete mode 100644 src/executor_test/executor_test/utils.py delete mode 100644 src/executor_test/package.xml delete mode 100644 src/executor_test/setup.cfg delete mode 100644 src/executor_test/test/test_flake8.py delete mode 100644 src/executor_test/test/test_pep257.py delete mode 100644 src/hello_world/CMakeLists.txt delete mode 100644 src/hello_world/include/hello_world/hello_node.hpp delete mode 100644 src/hello_world/src/hello_node.cpp delete mode 100644 src/interface/CMakeLists.txt delete mode 100644 src/interface/package.xml delete mode 100644 src/interface/src/my_node.cpp create mode 100644 src/lib/color_codes.py create mode 100644 src/lib/configs.py create mode 100644 src/lib/interface/robot_info.py create mode 100644 src/lib/interface/robot_interface.py create mode 100644 src/lib/json_msg.py create mode 100644 src/lib/moteus_motor_state.py delete mode 100644 src/life_detection/life_detection/life_detection.py delete mode 100644 src/life_detection/setup.cfg delete mode 100644 src/life_detection/setup.py delete mode 100644 src/life_detection/test/test_flake8.py delete mode 100644 src/life_detection/test/test_pep257.py delete mode 100644 src/localization/localization/localization.py delete mode 100644 src/localization/setup.cfg delete mode 100644 src/localization/setup.py delete mode 100644 src/localization/test/test_flake8.py delete mode 100644 src/localization/test/test_pep257.py delete mode 100644 src/mission_control/CMakeLists.txt delete mode 100644 src/mission_control/package.xml delete mode 100644 src/mission_control/src/my_node.cpp rename src/{localization/localization => mission_control_updater/mission_control_updater}/__init__.py (100%) create mode 100644 src/mission_control_updater/mission_control_updater/info_to_json_helper.py create mode 100644 src/mission_control_updater/mission_control_updater/updater.py rename src/{localization => mission_control_updater}/package.xml (82%) rename src/{localization/resource/localization => mission_control_updater/resource/mission_control_updater} (100%) create mode 100644 src/mission_control_updater/setup.cfg create mode 100644 src/mission_control_updater/setup.py rename src/{localization => mission_control_updater}/test/test_copyright.py (74%) delete mode 100644 src/monitering/CMakeLists.txt delete mode 100644 src/monitering/package.xml delete mode 100644 src/monitering/src/my_node.cpp delete mode 100644 src/sensor/CMakeLists.txt delete mode 100644 src/sensor/package.xml delete mode 100644 src/sensor/src/my_node.cpp delete mode 100644 src/teleoperation/package.xml delete mode 100644 src/teleoperation/resource/teleoperation delete mode 100644 src/teleoperation/setup.cfg delete mode 100644 src/teleoperation/setup.py delete mode 100644 src/teleoperation/teleoperation/__init__.py delete mode 100644 src/teleoperation/teleoperation/teleoperation.py delete mode 100644 src/teleoperation/test/test_copyright.py delete mode 100644 src/teleoperation/test/test_flake8.py delete mode 100644 src/teleoperation/test/test_pep257.py delete mode 100644 src/viator_launch/test/test_flake8.py delete mode 100644 src/viator_launch/test/test_pep257.py delete mode 160000 src/vision_opencv diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 3aeec77..6fe2b1c 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,4 +1,4 @@ -# Base image: Ubuntu 20.04 with ROS2 Galactic installed +# Base image: Ubuntu 20.04 with ROS2 Humble installed FROM ros:humble # Install dependencies from apt @@ -12,32 +12,20 @@ RUN apt-get update && apt-get install -y \ ros-humble-rosbridge-server \ # Install usb utilities usbutils \ - #Used for cv_bridge - python3-numpy \ - #USed for cv_bridge - libboost-python-dev \ - #OpenCV - libopencv-dev \ - #Opencv - python3-opencv \ + can-utils \ + iproute2 \ + kmod \ # Clean out the apt lists after `apt-get update` && rm -rf /var/lib/apt/lists/* #Install moteus python library https://github.com/mjbots/moteus/tree/main/lib/python -Run pip3 install moteus -# Update pydocstyle to remove a deprecation warning when testing for PEP257 -RUN pip install --upgrade pydocstyle -#Install OpenCV for python -RUN pip3 install opencv-python - -RUN pip3 install numpy --upgrade +RUN pip3 install moteus +RUN pip3 install pyusb -#Install cv_bridge -#RUN apt install python3-numpy -#RUN apt-get install -y libboost-python-dev - +# Update pydocstyle to remove a deprecation warning when testing for PEP257 +RUN pip install --upgrade pydocstyle # Add a user so we can remote into this container with a non-root user RUN useradd trickfire \ diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 2739118..f576f75 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -14,6 +14,10 @@ "ms-azuretools.vscode-docker", "ms-python.python", "ms-python.vscode-pylance", + "ms-python.pylint", + "ms-python.mypy-type-checker", + "ms-python.isort", + "ms-python.black-formatter", "ms-vscode.cmake-tools", "ms-vscode.cpptools", "twxs.cmake", diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 6bf8dff..0000000 --- a/.gitmodules +++ /dev/null @@ -1,4 +0,0 @@ -[submodule "src/vision_opencv"] - path = src/vision_opencv - url = https://github.com/ros-perception/vision_opencv.git - branch = humble diff --git a/.pylintrc b/.pylintrc new file mode 100644 index 0000000..2350100 --- /dev/null +++ b/.pylintrc @@ -0,0 +1,635 @@ +[MAIN] + +# Analyse import fallback blocks. This can be used to support both Python 2 and +# 3 compatible code, which means that the block might have code that exists +# only in one or another interpreter, leading to false positives when analysed. +analyse-fallback-blocks=no + +# Clear in-memory caches upon conclusion of linting. Useful if running pylint +# in a server-like mode. +clear-cache-post-run=no + +# Load and enable all available extensions. Use --list-extensions to see a list +# all available extensions. +#enable-all-extensions= + +# In error mode, messages with a category besides ERROR or FATAL are +# suppressed, and no reports are done by default. Error mode is compatible with +# disabling specific errors. +#errors-only= + +# Always return a 0 (non-error) status code, even if lint errors are found. +# This is primarily useful in continuous integration scripts. +#exit-zero= + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code. +extension-pkg-allow-list= + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code. (This is an alternative name to extension-pkg-allow-list +# for backward compatibility.) +extension-pkg-whitelist= + +# Return non-zero exit code if any of these messages/categories are detected, +# even if score is above --fail-under value. Syntax same as enable. Messages +# specified are enabled, while categories only check already-enabled messages. +fail-on= + +# Specify a score threshold under which the program will exit with error. +fail-under=10.0 + +# Interpret the stdin as a python script, whose filename needs to be passed as +# the module_or_package argument. +#from-stdin= + +# Files or directories to be skipped. They should be base names, not paths. +ignore=CVS + +# Add files or directories matching the regular expressions patterns to the +# ignore-list. The regex matches against paths and can be in Posix or Windows +# format. Because '\\' represents the directory delimiter on Windows systems, +# it can't be used as an escape character. +ignore-paths= + +# Files or directories matching the regular expression patterns are skipped. +# The regex matches against base names, not paths. The default value ignores +# Emacs file locks +ignore-patterns=^\.# + +# List of module names for which member attributes should not be checked +# (useful for modules/projects where namespaces are manipulated during runtime +# and thus existing member attributes cannot be deduced by static analysis). It +# supports qualified module names, as well as Unix pattern matching. +ignored-modules= + +# Python code to execute, usually for sys.path manipulation such as +# pygtk.require(). +#init-hook= + +# Use multiple processes to speed up Pylint. Specifying 0 will auto-detect the +# number of processors available to use, and will cap the count on Windows to +# avoid hangs. +jobs=1 + +# Control the amount of potential inferred values when inferring a single +# object. This can help the performance when dealing with large functions or +# complex, nested conditions. +limit-inference-results=100 + +# List of plugins (as comma separated values of python module names) to load, +# usually to register additional checkers. +load-plugins= + +# Pickle collected data for later comparisons. +persistent=yes + +# Minimum Python version to use for version dependent checks. Will default to +# the version used to run pylint. +py-version=3.10 + +# Discover python modules and packages in the file system subtree. +recursive=no + +# Add paths to the list of the source roots. Supports globbing patterns. The +# source root is an absolute path or a path relative to the current working +# directory used to determine a package namespace for modules located under the +# source root. +source-roots= + +# When enabled, pylint would attempt to guess common misconfiguration and emit +# user-friendly hints instead of false-positive error messages. +suggestion-mode=yes + +# Allow loading of arbitrary C extensions. Extensions are imported into the +# active Python interpreter and may run arbitrary code. +unsafe-load-any-extension=no + +# In verbose mode, extra non-checker-related info will be displayed. +#verbose= + + +[BASIC] + +# Naming style matching correct argument names. +argument-naming-style=snake_case + +# Regular expression matching correct argument names. Overrides argument- +# naming-style. If left empty, argument names will be checked with the set +# naming style. +#argument-rgx= + +# Naming style matching correct attribute names. +attr-naming-style=snake_case + +# Regular expression matching correct attribute names. Overrides attr-naming- +# style. If left empty, attribute names will be checked with the set naming +# style. +#attr-rgx= + +# Bad variable names which should always be refused, separated by a comma. +bad-names=foo, + bar, + baz, + toto, + tutu, + tata + +# Bad variable names regexes, separated by a comma. If names match any regex, +# they will always be refused +bad-names-rgxs= + +# Naming style matching correct class attribute names. +class-attribute-naming-style=any + +# Regular expression matching correct class attribute names. Overrides class- +# attribute-naming-style. If left empty, class attribute names will be checked +# with the set naming style. +#class-attribute-rgx= + +# Naming style matching correct class constant names. +class-const-naming-style=UPPER_CASE + +# Regular expression matching correct class constant names. Overrides class- +# const-naming-style. If left empty, class constant names will be checked with +# the set naming style. +#class-const-rgx= + +# Naming style matching correct class names. +class-naming-style=PascalCase + +# Regular expression matching correct class names. Overrides class-naming- +# style. If left empty, class names will be checked with the set naming style. +#class-rgx= + +# Naming style matching correct constant names. +const-naming-style=UPPER_CASE + +# Regular expression matching correct constant names. Overrides const-naming- +# style. If left empty, constant names will be checked with the set naming +# style. +#const-rgx= + +# Minimum line length for functions/classes that require docstrings, shorter +# ones are exempt. +docstring-min-length=-1 + +# Naming style matching correct function names. +function-naming-style=camelCase + +# Regular expression matching correct function names. Overrides function- +# naming-style. If left empty, function names will be checked with the set +# naming style. +#function-rgx= + +# Good variable names which should always be accepted, separated by a comma. +good-names=i, + j, + k, + ex, + Run, + _ + +# Good variable names regexes, separated by a comma. If names match any regex, +# they will always be accepted +good-names-rgxs= + +# Include a hint for the correct naming format with invalid-name. +include-naming-hint=no + +# Naming style matching correct inline iteration names. +inlinevar-naming-style=any + +# Regular expression matching correct inline iteration names. Overrides +# inlinevar-naming-style. If left empty, inline iteration names will be checked +# with the set naming style. +#inlinevar-rgx= + +# Naming style matching correct method names. +method-naming-style=camelCase + +# Regular expression matching correct method names. Overrides method-naming- +# style. If left empty, method names will be checked with the set naming style. +#method-rgx= + +# Naming style matching correct module names. +module-naming-style=snake_case + +# Regular expression matching correct module names. Overrides module-naming- +# style. If left empty, module names will be checked with the set naming style. +#module-rgx= + +# Colon-delimited sets of names that determine each other's naming style when +# the name regexes allow several styles. +name-group= + +# Regular expression which should only match function or class names that do +# not require a docstring. +no-docstring-rgx=^_ + +# List of decorators that produce properties, such as abc.abstractproperty. Add +# to this list to register other decorators that produce valid properties. +# These decorators are taken in consideration only for invalid-name. +property-classes=abc.abstractproperty + +# Regular expression matching correct type alias names. If left empty, type +# alias names will be checked with the set naming style. +#typealias-rgx= + +# Regular expression matching correct type variable names. If left empty, type +# variable names will be checked with the set naming style. +#typevar-rgx= + +# Naming style matching correct variable names. +variable-naming-style=snake_case + +# Regular expression matching correct variable names. Overrides variable- +# naming-style. If left empty, variable names will be checked with the set +# naming style. +#variable-rgx= + + +[CLASSES] + +# Warn about protected attribute access inside special methods +check-protected-access-in-special-methods=no + +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods=__init__, + __new__, + setUp, + asyncSetUp, + __post_init__ + +# List of member names, which should be excluded from the protected access +# warning. +exclude-protected=_asdict,_fields,_replace,_source,_make,os._exit + +# List of valid names for the first argument in a class method. +valid-classmethod-first-arg=cls + +# List of valid names for the first argument in a metaclass class method. +valid-metaclass-classmethod-first-arg=mcs + + +[DESIGN] + +# List of regular expressions of class ancestor names to ignore when counting +# public methods (see R0903) +exclude-too-few-public-methods= + +# List of qualified class names to ignore when counting class parents (see +# R0901) +ignored-parents= + +# Maximum number of arguments for function / method. +max-args=5 + +# Maximum number of attributes for a class (see R0902). +# Setting this high because this is kind of unavoidable on some data classes +max-attributes=100 + +# Maximum number of boolean expressions in an if statement (see R0916). +max-bool-expr=5 + +# Maximum number of branch for function / method body. +max-branches=12 + +# Maximum number of locals for function / method body. +max-locals=15 + +# Maximum number of parents for a class (see R0901). +max-parents=7 + +# Maximum number of public methods for a class (see R0904). +max-public-methods=20 + +# Maximum number of return / yield for function / method body. +max-returns=6 + +# Maximum number of statements in function / method body. +max-statements=50 + +# Minimum number of public methods for a class (see R0903). +min-public-methods=2 + + +[EXCEPTIONS] + +# Exceptions that will emit a warning when caught. +overgeneral-exceptions=builtins.BaseException,builtins.Exception + + +[FORMAT] + +# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. +expected-line-ending-format= + +# Regexp for a line that is allowed to be longer than the limit. +ignore-long-lines=^\s*(# )??$ + +# Number of spaces of indent required inside a hanging or continued line. +indent-after-paren=4 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string=' ' + +# Maximum number of characters on a single line. +max-line-length=100 + +# Maximum number of lines in a module. +max-module-lines=1000 + +# Allow the body of a class to be on the same line as the declaration if body +# contains single statement. +single-line-class-stmt=no + +# Allow the body of an if to be on the same line as the test if there is no +# else. +single-line-if-stmt=no + + +[IMPORTS] + +# List of modules that can be imported at any level, not just the top level +# one. +allow-any-import-level= + +# Allow explicit reexports by alias from a package __init__. +allow-reexport-from-package=no + +# Allow wildcard imports from modules that define __all__. +allow-wildcard-with-all=no + +# Deprecated modules which should not be used, separated by a comma. +deprecated-modules= + +# Output a graph (.gv or any supported image format) of external dependencies +# to the given file (report RP0402 must not be disabled). +ext-import-graph= + +# Output a graph (.gv or any supported image format) of all (i.e. internal and +# external) dependencies to the given file (report RP0402 must not be +# disabled). +import-graph= + +# Output a graph (.gv or any supported image format) of internal dependencies +# to the given file (report RP0402 must not be disabled). +int-import-graph= + +# Force import order to recognize a module as part of the standard +# compatibility libraries. +known-standard-library= + +# Force import order to recognize a module as part of a third party library. +known-third-party=enchant + +# Couples of modules and preferred modules, separated by a comma. +preferred-modules= + + +[LOGGING] + +# The type of string formatting that logging methods do. `old` means using % +# formatting, `new` is for `{}` formatting. +logging-format-style=old + +# Logging modules to check that the string format arguments are in logging +# function parameter format. +logging-modules=logging + + +[MESSAGES CONTROL] + +# Only show warnings with the listed confidence levels. Leave empty to show +# all. Valid levels: HIGH, CONTROL_FLOW, INFERENCE, INFERENCE_FAILURE, +# UNDEFINED. +confidence=HIGH, + CONTROL_FLOW, + INFERENCE, + INFERENCE_FAILURE, + UNDEFINED + +# Disable the message, report, category or checker with the given id(s). You +# can either give multiple identifiers separated by comma (,) or put this +# option multiple times (only on the command line, not in the configuration +# file where it should appear only once). You can also use "--disable=all" to +# disable everything first and then re-enable specific checks. For example, if +# you want to run only the similarities checker, you can use "--disable=all +# --enable=similarities". If you want to run only the classes checker, but have +# no Warning level messages displayed, use "--disable=all --enable=classes +# --disable=W". +disable=raw-checker-failed, + bad-inline-option, + locally-disabled, + file-ignored, + suppressed-message, + useless-suppression, + deprecated-pragma, + use-implicit-booleaness-not-comparison-to-string, + use-implicit-booleaness-not-comparison-to-zero, + use-symbolic-message-instead + +# Enable the message, report, category or checker with the given id(s). You can +# either give multiple identifier separated by comma (,) or put this option +# multiple time (only on the command line, not in the configuration file where +# it should appear only once). See also the "--disable" option for examples. +enable= + + +[METHOD_ARGS] + +# List of qualified names (i.e., library.method) which require a timeout +# parameter e.g. 'requests.api.get,requests.api.post' +timeout-methods=requests.api.delete,requests.api.get,requests.api.head,requests.api.options,requests.api.patch,requests.api.post,requests.api.put,requests.api.request + + +[MISCELLANEOUS] + +# List of note tags to take in consideration, separated by a comma. +notes=FIXME, + XXX, + TODO + +# Regular expression of note tags to take in consideration. +notes-rgx= + + +[REFACTORING] + +# Maximum number of nested blocks for function / method body +max-nested-blocks=5 + +# Complete name of functions that never returns. When checking for +# inconsistent-return-statements if a never returning function is called then +# it will be considered as an explicit return statement and no message will be +# printed. +never-returning-functions=sys.exit,argparse.parse_error + + +[REPORTS] + +# Python expression which should return a score less than or equal to 10. You +# have access to the variables 'fatal', 'error', 'warning', 'refactor', +# 'convention', and 'info' which contain the number of messages in each +# category, as well as 'statement' which is the total number of statements +# analyzed. This score is used by the global evaluation report (RP0004). +evaluation=max(0, 0 if fatal else 10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)) + +# Template used to display messages. This is a python new-style format string +# used to format the message information. See doc for all details. +msg-template= + +# Set the output format. Available formats are: text, parseable, colorized, +# json2 (improved json format), json (old json format) and msvs (visual +# studio). You can also give a reporter class, e.g. +# mypackage.mymodule.MyReporterClass. +#output-format= + +# Tells whether to display a full report or only the messages. +reports=no + +# Activate the evaluation score. +score=yes + + +[SIMILARITIES] + +# Comments are removed from the similarity computation +ignore-comments=yes + +# Docstrings are removed from the similarity computation +ignore-docstrings=yes + +# Imports are removed from the similarity computation +ignore-imports=yes + +# Signatures are removed from the similarity computation +ignore-signatures=yes + +# Minimum lines number of a similarity. +min-similarity-lines=4 + + +[SPELLING] + +# Limits count of emitted suggestions for spelling mistakes. +max-spelling-suggestions=4 + +# Spelling dictionary name. No available dictionaries : You need to install +# both the python package and the system dependency for enchant to work. +spelling-dict= + +# List of comma separated words that should be considered directives if they +# appear at the beginning of a comment and should not be checked. +spelling-ignore-comment-directives=fmt: on,fmt: off,noqa:,noqa,nosec,isort:skip,mypy: + +# List of comma separated words that should not be checked. +spelling-ignore-words= + +# A path to a file that contains the private dictionary; one word per line. +spelling-private-dict-file= + +# Tells whether to store unknown words to the private dictionary (see the +# --spelling-private-dict-file option) instead of raising a message. +spelling-store-unknown-words=no + + +[STRING] + +# This flag controls whether inconsistent-quotes generates a warning when the +# character used as a quote delimiter is used inconsistently within a module. +check-quote-consistency=no + +# This flag controls whether the implicit-str-concat should generate a warning +# on implicit string concatenation in sequences defined over several lines. +check-str-concat-over-line-jumps=no + + +[TYPECHECK] + +# List of decorators that produce context managers, such as +# contextlib.contextmanager. Add to this list to register other decorators that +# produce valid context managers. +contextmanager-decorators=contextlib.contextmanager + +# List of members which are set dynamically and missed by pylint inference +# system, and so shouldn't trigger E1101 when accessed. Python regular +# expressions are accepted. +generated-members= + +# Tells whether to warn about missing members when the owner of the attribute +# is inferred to be None. +ignore-none=yes + +# This flag controls whether pylint should warn about no-member and similar +# checks whenever an opaque object is returned when inferring. The inference +# can return multiple potential results while evaluating a Python object, but +# some branches might not be evaluated, which results in partial inference. In +# that case, it might be useful to still emit no-member and other checks for +# the rest of the inferred objects. +ignore-on-opaque-inference=yes + +# List of symbolic message names to ignore for Mixin members. +ignored-checks-for-mixins=no-member, + not-async-context-manager, + not-context-manager, + attribute-defined-outside-init + +# List of class names for which member attributes should not be checked (useful +# for classes with dynamically set attributes). This supports the use of +# qualified names. +ignored-classes=optparse.Values,thread._local,_thread._local,argparse.Namespace + +# Show a hint with possible names when a member name was not found. The aspect +# of finding the hint is based on edit distance. +missing-member-hint=yes + +# The minimum edit distance a name should have in order to be considered a +# similar match for a missing member name. +missing-member-hint-distance=1 + +# The total number of similar names that should be taken in consideration when +# showing a hint for a missing member. +missing-member-max-choices=1 + +# Regex pattern to define which classes are considered mixins. +mixin-class-rgx=.*[Mm]ixin + +# List of decorators that change the signature of a decorated function. +signature-mutators= + + +[VARIABLES] + +# List of additional names supposed to be defined in builtins. Remember that +# you should avoid defining new builtins when possible. +additional-builtins= + +# Tells whether unused global variables should be treated as a violation. +allow-global-unused-variables=yes + +# List of names allowed to shadow builtins +allowed-redefined-builtins= + +# List of strings which can identify a callback function by name. A callback +# name must start or end with one of those strings. +callbacks=cb_, + _cb + +# A regular expression matching the name of dummy variables (i.e. expected to +# not be used). +dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ + +# Argument names that match this expression will be ignored. +ignored-argument-names=_.*|^ignored_|^unused_ + +# Tells whether we should check for unused import in __init__ files. +init-import=no + +# List of qualified module names which can have objects that can redefine +# builtins. +redefining-builtins-modules=six.moves,past.builtins,future.builtins,builtins,io diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json index 63d2325..1d71ad3 100644 --- a/.vscode/c_cpp_properties.json +++ b/.vscode/c_cpp_properties.json @@ -4,7 +4,7 @@ "name": "Linux", "includePath": [ "${workspaceFolder}/**", - "/opt/ros/galactic/include/**" + "/opt/ros/humble/include/**" ], "defines": [], "compilerPath": "/usr/bin/gcc", diff --git a/.vscode/settings.json b/.vscode/settings.json index b04318f..92828ed 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,17 +1,33 @@ { "python.autoComplete.extraPaths": [ - "/opt/ros/galactic/lib/python3.8/site-packages" + "/opt/ros/humble/lib/python3.10/site-packages", + "./src", + // Add type checking to srv files and msg files + "/home/trickfire/urc-2023/install/custom_interfaces/local/lib/python3.10/dist-packages" ], "python.analysis.extraPaths": [ - "/opt/ros/galactic/lib/python3.8/site-packages" + "/opt/ros/humble/lib/python3.10/site-packages", + "./src", + "/home/trickfire/urc-2023/install/custom_interfaces/local/lib/python3.10/dist-packages" ], + "python.defaultInterpreterPath": "python3", + "pylint.args": [ + "--rcfile=.pylintrc" + ], + "editor.codeActionsOnSave": { + "source.organizeImports": "explicit" + }, + "[python]": { + "editor.defaultFormatter": "ms-python.black-formatter", + "editor.formatOnSave": true + }, + "black-formatter.args": ["-l", "100"], "cmake.configureOnOpen": false, - "python.linting.enabled": true, - "python.linting.flake8Enabled": true, "cmake.sourceDirectory": "${workspaceFolder}/src/hello_world", - "[python]": { - "editor.defaultFormatter": "ms-python.autopep8" + "files.associations": { + "*.tcc": "cpp" }, - "python.formatting.provider": "none", - "ros.distro": "humble" + "editor.rulers": [ + 100 + ] } \ No newline at end of file diff --git a/README.md b/README.md index de09693..c4e099e 100644 --- a/README.md +++ b/README.md @@ -1,22 +1,28 @@ # Trickfire Robotics University Rover Challenge Software -Software developed by [Trickfire Robotics'](https://www.linkedin.com/company/trickfire-robotics/) for the Mars' Society [University Rover Challenge](https://urc.marssociety.org/), written for [ROS2](https://design.ros2.org/articles/why_ros2.html). +Software developed by [Trickfire Robotics'](https://www.trickfirerobotics.org/) for the Mars' Society [University Rover Challenge](https://urc.marssociety.org/), written for [ROS2](https://design.ros2.org/articles/why_ros2.html). -## Getting Started -We develop using [Docker](https://en.wikipedia.org/wiki/Docker_(software)) and [Visual Studio Code](https://code.visualstudio.com/). Docker containers keep the development environment well-defined and repeatable: no more mysterious missing dependencies. VS Code is a customizable text editor that has extensions for Docker and all of our programming languages. +We develop using [Docker](https://en.wikipedia.org/wiki/Docker_(software)) and [Visual Studio Code](https://code.visualstudio.com/). Docker containers keep the development environment well-defined and repeatable: no more mysterious missing dependencies. -A new member with no clue what to do? Get started [here!](./docs/getting_started.md) +## `Getting Started` +**A new member with no clue what to do? Go read the [getting_started.md](./docs/getting_started.md) docs!** -Already know how ROS, Git, and Docker work? Then setup your workspace! [Windows](docs/install_on_windows.md) | [Linux](docs/install_on_linux.md) +Already know how ROS, Git, and Docker work? Then setup your workspace! [Windows](docs/install_on_windows.md) | [Linux](docs/install_on_linux.md) | [Mac](docs/installing_on_mac.md) -## Quick Reference (VS Code) -Open/close the terminal in VS Code with `` Ctrl+` `` (backtick `` ` `` is on the same key as tilde `~`). +Read how the codebase is organized by reading the [code_overview.md](./docs/code_overview.md) docs. + +Make sure you understand how to format your Python code. Go read the [formatting.md](./docs/formatting.md) docs. + + + +## `Quick Reference (VS Code)` +Open/close the terminal in VS Code with `` Ctrl + ` `` (backtick `` ` `` is on the same key as tilde `~`). | Action | Terminal command | VS Code shortcut | | ------------------ | ---------------- | ----------------------------------------- | | Build all packages | `./build.sh` | `Ctrl+Shift+B` | -| Test all packages | `./test.sh` | `Ctrl+P`, type `task test`, press `Enter` | | Launch nodes | `./launch.sh` | | | Build Docker Image | `./build_only_docker.sh` | | Launch Docker Image| `./launch_only_docker.sh`| +| Connect to Docker Container | `./connect_to_container.sh` Where available, use the VS Code shortcuts because they come with in-editor features such as problem matchers. \ No newline at end of file diff --git a/build_only_docker.sh b/build_only_docker.sh deleted file mode 100755 index d1678b7..0000000 --- a/build_only_docker.sh +++ /dev/null @@ -1,3 +0,0 @@ -#Build the docker image with the name "trickfireimage", and define the context of this build to be -#the urc-2023 directory while refering the Dockerfile in .devcontainer -docker build -t trickfireimage -f .devcontainer/Dockerfile . \ No newline at end of file diff --git a/connect_to_container.sh b/connect_to_container.sh new file mode 100755 index 0000000..a41b5f9 --- /dev/null +++ b/connect_to_container.sh @@ -0,0 +1,2 @@ +#Connect to trickfirerobot container +sudo docker exec -it trickfirerobot /bin/bash \ No newline at end of file diff --git a/container_launch.sh b/container_launch.sh new file mode 100755 index 0000000..e85c327 --- /dev/null +++ b/container_launch.sh @@ -0,0 +1,80 @@ +# /bin/bash + +# A script file `./container_launch.sh` that handles connecting to the `trickfirerobot` Docker container. + +# You can add the following flags to the shell script: +# `-b` -> Force build the `trickfireimage`, even if it exists +# `-n` -> Force the `trickfireimage` image to be built without cache +# `-c` -> Force create the `trickfirerobot` container, even if it exists + +text_helper="TRICKFIRE DOCKER LAUNCH" +trickire_container="trickfirerobot" +trickfire_image="trickfireimage" + +# Colors +bold=$(tput bold) +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +b_flag='' # Force build docker container "-b" +no_cache_flag='' # Build docker container without cache "-n" +c_flag='' # Force create container "-c" + +# Read the flags, if any were passed +while getopts 'bnc' flag; do + case "${flag}" in + b) b_flag='true' ;; + n) no_cache_flag='true' ;; + c) c_flag='true' ;; + *) break ;; + esac +done + +# --- Shutdown the current trickfirerobot container if it is running +if [ "$( docker container inspect -f '{{.State.Running}}' ${trickire_container} )" = "true" ]; then + echo -e "${BLUE}$(tput bold)[${text_helper}] Shutting down current \"${trickire_container}\" container${NC}" + docker container kill ${trickire_container} +fi + +# --- Handle the Docker image --- + +# If the image does NOT exist OR we force the image to be built +if [ -z "$(docker images -q ${trickire_container}:latest 2> /dev/null)" ] || [ "$b_flag" = true ]; then + # Should we build without cache? + if [ "$no_cache_flag" = true ]; then + echo -e "${BLUE}$(tput bold)[${text_helper}] Building \"${trickire_container}\" without cache${NC}" + docker build --no-cache -t ${trickire_container} -f .devcontainer/Dockerfile . + else + echo -e "${BLUE}$(tput bold)[${text_helper}] Building \"${trickire_container}\" with cache${NC}" + docker build -t ${trickire_container} -f .devcontainer/Dockerfile . + fi +else + echo -e "${BLUE}$(tput bold)[${text_helper}] Image \"${trickire_container}\" exists. Skipping${NC}" +fi + + +# Handle the Docker image + +# If the container does NOT exist OR we force the container to be built +if [ ! "$(docker ps -a -q -f name=${trickire_container})" ]; then + echo -e "${BLUE}$(tput bold)[${text_helper}] Container \"${trickire_container}\" does not exist. Creating${NC}" + docker create --mount type=bind,source="$(pwd)",target="/home/trickfire/urc-2023" --name ${trickire_container} -it --privileged --network=host --workdir /home/trickfire/urc-2023 ${trickire_container} +else + echo -e "${BLUE}$(tput bold)[${text_helper}] Container \"${trickire_container}\" does exist${NC}" + # Should we remake the container? + if [ "$c_flag" = true ]; then + echo -e "${BLUE}$(tput bold)[${text_helper}] Container trickfire exists. Forcing removal and creation of a new \"${trickire_container}\" container${NC}" + docker container rm ${trickire_container} + docker create --mount type=bind,source="$(pwd)",target="/home/trickfire/urc-2023" --name ${trickire_container} -it --privileged --network=host --workdir /home/trickfire/urc-2023 ${trickire_container} + + fi +fi + +#Start the container +echo -e "${BLUE}$(tput bold)[${text_helper}] Starting \"${trickire_container}\" container${NC}" +docker container restart ${trickire_container} + +# Have the container take over the shell that executed this script +echo -e "${BLUE}$(tput bold)[${text_helper}] Connecting to \"${trickire_container}\" container${NC}" +docker exec -it ${trickire_container} /bin/bash +echo "" \ No newline at end of file diff --git a/docs/can_moteus.md b/docs/can_moteus.md index 0bbec6a..29019e4 100644 --- a/docs/can_moteus.md +++ b/docs/can_moteus.md @@ -2,101 +2,52 @@ ## **What is it?** -This is a **ROS Node** that is responsible for communication between the [**Moteus motor controllers**](https://github.com/mjbots/moteus) (via a FDCAN/CAN Bus) and **ROS** that the rest of the codebase is written in. +This is a **ROS Node** that is responsible for communication between the [**Moteus motor controllers**](https://github.com/mjbots/moteus) (via a CAN-FD Bus) and **ROS**, which the rest of the codebase is written in. -Motors are created that represent their real-life counterparts. Each motor subscribes to a topic that contains data for the motors to use depending on the motor's mode; i.e. a motor in VELOCITY mode would subscribe to data that would set that motor's velocity. Each motor can publish data to the ROS network that it reads from the Moteus controllers depending on what data the programmer wanted that motor to publish. +Motors are created that represent their real-life counterparts that are connected to a Moteus controller. Each motor has both a subscriber that gets data from the rest of the codebase (position, velocity, etc), and a publisher that sends data from the motor to the rest of the codebase (torque, power usage, voltage, etc). The data contained in these topics is a String in the format of a JSON. -The only structure in the whole codebase that should be directly sending data for these motors to subscribe to is the [`RobotInterface`](../src/interface); see [`code_overview.md`](./code_overview.md) for a diagram. +The only two structures in the whole codebase that should be directly sending and reading JSONs to the `can_moteus` are `RobotInterface` and `RobotInfo`. See [`code_overview.md`](./code_overview.md) for a diagram. -## **How to use it** - -### **Adding a Motor in Code** -As each Moteus controller is connected to **only a single** motor, each motor is represented as a [`MoteusMotor`](../src/can_moteus/can_moteus/moteus_motor.py) object. However, the [`MoteusMultiprocess`](../src/can_moteus/can_moteus/moteus_multiprocess.py) object, of which only one should exist, handles these `MoteusMotors`. As such, motors are added via the `MoteusMultiprocess` object inside [`ros_moteus_bridge.py`](../src/can_moteus/can_moteus/ros_moteus_bridge.py). - -To create a motor, we need to pass in the following parameters in this order: -- The CAN ID of the motor. This is an **integer** -- The name of the motor. This is a **String** -- The motor mode. This is a **moteus_motor.Mode** -- A list of data to publish to the ROS network. This is an **array of moteus.Register** -Here is an example of adding a motor +## **How to use it** +In order to add a new motor, make sure that the motor has a Moteus controller connected to it and is on the same CAN-FD bus. Modify `ros_moteus_bridge.py` in order to add a motor under the `createMoteusMotors()` method - see the following example: ``` -moteusPubList = [moteus.Register.VELOCITY, moteus.Register.POSITION] - -moteusMultiprocess.addMotor( - 3, - "topmotor", - moteus_motor.Mode.VELOCITY, - moteusPubList, -) +self.threadManager.addMotor(, "NAME OF MOTOR") ``` -This motor has a CAN ID of **three** with the name **"topmotor"**. The motor is running in **VELOCITY** mode, and as such expects incoming data intended for the motor to set its velocity in Moteus units. Each time the motor reads data from the Moteus controller, it will publish its **VELOCITY** and **POSITION** values to the ROS network in Moteus units. - - -### **Inputs** - -When a motor is created, it will create a ROS subscriber to the following topic: - -```__from_robot_interface``` - -For example, using the motor above, it would subscribe to the topic of: - -```/topmotor_velocity_from_robot_interface``` - -The data sent to this topic will control the particular motor that it is sent to. Keep in mind that this data has to be formatted in Moteus units. - -Every cycle (every 0.02 seconds), the motor will send the last recieved data to send to the Moteus controller. The default is a value of **zero.** -**NOTE: All subscribers and publishers handle data in std_msgs.msg.Float32** +That's it. Simple as. Simple is. -### **Outputs** -When a motor is created, it will publish to the following topic(s) depending on the **moteus.Register array** that was passed in. The topic is in the following format: +## **JSON Data** +There are two ways to communicate to the Moteus controllers using JSON, one for input and one for output. -```__from_can``` +### Input [`moteus_data_in_json_helper.py`](../src/utility/moteus_data_in_json_helper.py) +The data contained here is used to set the data that the motor should be sending to the Moteus controller. By default, everything is set to `None` with the exception of `setStop`, which is set to `True`. The parameter `setStop` disables the controller, thus allowing the motor to freely spin. -For example, using the motor above, it would publish to the topics of: +### Output [`moteus_data_out_json_helper.py`](../src/utility/moteus_data_out_json_helper.py) +The data contained here is used to set the results from the Moteus motors. By default, all variables are set to `None`. This should be used by the `RobotInfo` to process the raw data. -```/topmotor_velocity_from_can``` - -```/topmotor_position_from_can``` - -Every cycle (every 0.02 seconds), the motor would read data it recieved from the Moteus controller and publish it. - -**NOTE: All subscribers and publishers handle data in std_msgs.msg.Float32** - -**NOTE: The data that can be sent must match up exactly to the data that the Moteus controllers send back; which is precisely the values from [`moteus.Register`](https://github.com/mjbots/moteus/blob/38d688a933ce1584ee09f2628b5849d5e758ac21/lib/python/moteus/moteus.py#L148)!** - -## **What is a Moteus Unit?** - -The documentation for the Moteus units are found [here](https://github.com/mjbots/moteus/blob/main/docs/reference.md#a2-register-usage). Each type of data has different units, so keep that in mind. +Note: All data **must** be in the units that the Moteus controller expects. Reference the Moteus documentation on their Github to find these units. ## **Deep Dive - How is `can_moteus` Implemented?** +The Moteus library uses Python's [asynchronous I/O](https://docs.python.org/3/library/asyncio.html) features, but ROS does not work well with Python's async. As such, we make a new thread ([`moteus_thread`](../src/can_moteus/can_moteus/moteus_thread_manager.py)) to handle the async functions in parallel with the ROS thread. -### **Overview** -The core idea is that there are two distinct Python processes running that communicate with each other via several different multiprocess queues. The first process is the "main" process where ROS lives and does whatever it needs to do. The second process is started by us and is used to send and read data to the Moteus controllers. +The user adds new motors by calling the `addMotor()` method in the `MoteusThreadManager` class. `MoteusThreadManager` then creates a `MoteusMotor` object that is mapped to the name given to the motor by `addMotor()`. -### **Queue From Motors to Moteus Multiprocess** +When the user calls `self.threadManager.start()`, the `MoteusThreadManager` creates a new `Thread` object with the name `"moteus_thread"`. This thread points to the method `threadEntry` which creates and executes the asynchronous loop. -Each motor's callback function for their subscribers writes to the `_queueToMoteus` queue (created in `moteus_multiprocess.py`), where only one such queue exists. As such, all motors share this queue. The data that is enqueued is an array of length two in the following format: +The main async loop initially calls the method `connectToMoteusControllers()` in order +to connect to the Moteus controllers. Inside of this method we create a `moteus.Controller` object which comes from the Moteus library allowing us to interact with the motor controller. We call the controller's `query()` method with a timeout - if it takes longer for the method to return than the timeout, we assume that we do not have connection to the controller. If it does return, we map this `moteus.controller` object to the motor name given in `addMotor()`. -``` -[0] = CANID -[1] = data (position, velocity, etc) -``` +In the main async loop, we go through each key-value pair of the `_nameToMoteusController` dictionary. We try to `query()` the motor, and if a timeout occurs we remove this motor from the dictionary and notify the user in the cmd. If it passes this, we check for any faults from the result of this query. When a fault does exist, we print it out and try to `set_stop()` the motor. If stopping the motor fails, we remove the motor from the dictionary. After these checks pass, we send the data found in the `_nameToMoteusMotor` dictionary to the Moteus controller. The results returned are then published to the ROS network via the shared `MoteusMotor` object. -### **Queue From Multiprocess to Each Motor** -Each motor has its own multiprocess queue, `toPublisherQueue` that is created in `moteus_multiprocess.py`, which is then populated by the Moteus multiprocess for each corresponding motor. The type of data that is sent is dictated by the `moteusPubList` array as seen earlier in the example motor. The data that is enqueued is an array of length two in the following format: +The way we exit the async loop is having the ROS thread set the `_shouldMoteusThreadLoop` flag to false. We then go through the `_nameToMoteusController` one more time to call `set_stop()` on each of the motors. We can attempt to reconnect to the moteus motors by setting the `_shouldReconnect` flag to false as well. -``` -[0] = moteus.Register -[1] = data (position, velocity, voltage, current, etc) -``` +Here is a diagram showing off the structure of this package. + +Note 7/2/2024: The mutex is not implemented correctly - as in it protects nothing and essentially does nothing. -### **The Multiprocess Cycle** -Each cycle, 0.02 seconds, the Moteus multiprocess reads the head of the `_queueToMoteus` and updates the set value for the target motor. It then goes through each motor that was succesfully connected to the CAN/CANFD bus and sends their set data. At the same time, it recieves information about the Moteus controller and populates each motor's `toPublisherQueue`. -Here is a diagram of the process: +![Can Moteus Overview](can_moteus_overview.png) -![what](./resources/moteus_docs.png) \ No newline at end of file diff --git a/docs/can_moteus_overview.png b/docs/can_moteus_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..e451053912d6a856830f2f3addce45d9570da0aa GIT binary patch literal 83907 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%0D-zTi)jc)656;KxrV-(zrpl)2p$&|{od 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 This deals with the funky hardware communication such as USB, CAN bus, Wi-Fi, etc. It prepares publishers/subscribers for the interface to use -### **`robot_interface`** -This is responsible for converting human units into Moteus units that the Moteus controllers can understand. This is **not** a ROS Node, and instead will be an object that **takes in** a ROS Node to subscribe to data published by `can_moteus`. There are a long list of methods that correspond to the functionality of the rover; i.e. `setBottomArmMotorAngle(123)` would set the angle of the bottom motor of the arm to 123 degrees. +2. **The interface** -> This deals making it easy to interact with the rover by exposing functions such as `runMotor()` or `getMotorState()` -### **Robot Functionality** +3. **High-level code** -> This implements the subsystems found on the rover. It directly talks to the interface in order to get the rover to physical do things. +Notice how the high-level code does not care about the hardware, thus making it easier to focus on the **algorithms** rather than fighting the hardware. -### **`antenna`** -This is responsible for always pointing the robot antenna towards the base station's antenna to secure the strongest WiFi signal. +![Code Funnel](./resources/code_funnel.png) -### **`drivebase`** -This is responsible for implementing *how* a drivebase should work depending on user input. +## `Mission Control` +The mission control is a piece of software that allows us to interact with the rover over a browser as it is written in Vue.js/Typescript. +Cameras, controller input, telemetry data, controlling motors, life-detection results, and so on are all shown here. -Through a subscriber, it will recieve signals to when execute a high level control scheme: "move left side", "move right side", "move forwards", etc. +A very important concept is that the mission control acts as a **CLIENT** when sending and getting data from the rover. This means that the mission control +should never represent the current state of the rover. The mission control reads from the rover, not the other way around. For example, you should not represent what mode the arm is in (individual motor control, disabled, inverse kinematics, etc) +in the mission control! -### **`arm`** -This is responsible for controlling the arm via high level control schemes using inverse-kinematics. - -### **`life_detection`** -This detects life somehow. The physical design is still in progress - -### **Base Station** -### **`mission_control`** -This will host a webpage through sockets utilizing rosbridge to expose ROS-like behavior. The webpage will display information about the rover in addition to video output. The webpage will also sent controller input to the ROS network. - -### **Miscellaneous** - -### **`viator_launch`** -This launches all of the ROS nodes in our code. If you want to add a node, make sure to update the [`robot.launch.py`](../src/viator_launch/launch/robot.launch.py) and the [`package.xml`](../src/viator_launch/setup.py) files. - -### **`can`** -This is responsible for using the CANOpen protocol using the [ros2_canopen](https://github.com/ros-industrial/ros2_canopen) library to communicate between a few parts of the rover which cannot use the moteus controllers. - - -### **`monitering`** -This is planned to be utilized as a logging system. This might or might not be removed +One very good thing about the mission control is that it has access to the ROS network, which allows us to use subscribers, publishers, and services. All data that +is sent between the rover and the mission control are ROS services. The mission control requests and the rover responds. Using services will also allow us to +determine if data was dropped while transmitting across the Utah desert. +## `Quick Description of the Packages` +### `arm ("high-level")` +Implements the arm in different control types such as individual motor control (via velocity or position), inverse kinematics, and so on. +### `can_moteus ("low-level")` +Interacts with the Moteus Field Oriented BLDC motor controllers. This code is able to update the motor controller configs, send data to the motor, read data from the motor, +and handle CAN-FD bus issues. +### `custom_interfaces (misc)` +This code is used to create custom publisher/subscriber and service payloads. +### `lib (misc and "the interface")` +Contains commonly used functionality throughout the codebase. This is the home to "the interface" code as well under the folder `\interface` +### `viator_launch (misc)` +This code launches all ROS nodes found in our codebase. It is analogous to the `main()` entry point functions in most programming languages. +## `Putting It All Together` +![Code Overview](./resources/code_overview.png) diff --git a/docs/formatting.md b/docs/formatting.md new file mode 100644 index 0000000..3ec0aca --- /dev/null +++ b/docs/formatting.md @@ -0,0 +1,173 @@ +# Formatting +To make the code in this repo more consistent, formatting guidelines have been established, and +VSCode will be *very* mad at you if you break the formatting guidelines. Nearly everything is +handled for you by the [black](https://black.readthedocs.io/en/stable/the_black_code_style/index.html) +code formatter. + +However there are some things you will still have to worry about: + +## Naming +Here are the naming formats and objects they should be used on +- snake_case + - parameters, variables, file names +- UPPER_CASE_SNAKE + - constants (variables whose values shouldn't change) +- camelCase + - methods +- PascalCase + - classes + +## Private Classes, Methods, and Attributes +Python doesn't have access modifiers, but you can indicate to other developers not to touch specific +objects by prefixing their name with an underscore: `_myPrivateMethod()`. This goes the other way: +if something is prefixed with an underscore, don't use it unless you're 100% sure what it does. + +## Type Hinting +Python isn't a strongly typed language, meaning anything can be any type. However, in this repo +some typing is enforced. This is just to make development easier, as typing let's VSCode generate +autofill, meaning less needs to be memorized and typed. This can also reduce the risk of thinking +something is one type, when it is another type. + +There are only a few spots where you will need to type hint: + +### Method Definitions +Methods will need their return type defined and the types of its parameters defined. + +`cls` and `self` will not need to be typed. `__init__()` should just return `None`. + +Here is an example of a typed method: +```py +def moveArm(arm_id: int, target_position: float) -> ArmState: + pass + +def moveArms(arm_ids: list[int], target_positions: list[float]) -> list[Armstate]: + pass +``` + +### Attributes +Most of the time VSCode can figure out the type of attributes, but sometimes it will need help. +Usually on optional/possibly `None` attributes and any collections like `list` or `dict`. + +Here is how to type attributes: +```py +def __init__(self, manager: Manager, arms: list[Arm]) -> None: + # VSCode can figure out the type itself + self.height = 0.0 + self.manager = manager + self.arms = arms + + # VSCode needs some help + self.state: State | None = None + self.arm_ids_to_arm: dict[int, Arm] = {} +``` + +## Comments +Please comment your code. We're begging you. Please. + +## Documentation +Documentation for all classes, modules, and public methods is required! There aren't super strict +guidelines for what to write, but the next section contains a general overview of what's +recommended. + +> Remember to limit the length of your lines to 100 columns! + +### Modules +Modules in Python are a complicated thing, but for the purposes of this document, just think of them +as the `.py` file you write your code in. + +In your documentation, include +- The general purpose of the module +- The class(es) within the modules + - A brief overview of those classes + +### Classes +In your documentation, include +- The purpose of the class +- Usage examples (if needed) +- What contexts the class should be used +- Anything your class assumes to be true + +### Methods +Methods prefixed with an underscore do not need documentation. + +In your documentation, include +- What your method does +- What each parameter is for +- What your method returns + +### Attributes +Documentation for attributes isn't required, but may be helpful in some cases. + +In your documentation, include +- What your attribute stores +- What the value of the attribute is used for +- What changing the value may do + +## Example +All in all, a fully documented, type hinted, and formatted file should look like this: +```py +""" +This module contains classes relating to the operation and use of Bananas. It includes +`Banana`, `BananaPortion`, and `BananaEating`. They represent a whole banana, a portion of a banana, +and the process of eating a banana respectively. +""" +class Banana: + """ + `Banana` represents a whole banana that can be eaten in portions by `BananaEating`. + """ + + def __init__(self, portions: list[Banana]) -> None: + """ + Initializes a Banana object. + + Parameters + ----- + portions: list[Banana] + The portions this banana represents. + """ + + # Don't use me! This is a private attribute + self._portions = portions + + def getPortions(self) -> list[BananaPortion]: + """ + Returns a list of `BananaPortion` containing the portions this banana represents. + + Returns + ------ + A list of `BananPortion` containing the portions this banana represents. + """ + return self._portions + + +class BananaPortion: + """ + `BananaPortion` represents a portion of a whole banana. It can be eaten by `BananaEating`. + """ + + def __init__(self, banana: Banana) -> None: + self.banana = banana + + +class BananaEating: + """ + `BananaEating` represents the action of eating a banana. It is meant to be used alongside + `BananaPortion`. This class is asynchronous, and thus should NOT be used in a `Node` thread. + """ + + def __init__(self, portion: BananaPortion) -> None: + self.portion = portion + """ + The portion portion of a banana this instance will eat. + """ + + # Doesn't need docs because it's marked as private! + def _eatInternal(self) -> None: + pass + + def eat(self) -> None: + """ + Eats the portion of banana in the `portion` attribute of this class. + """ + pass +``` \ No newline at end of file diff --git a/docs/getting_started.md b/docs/getting_started.md index 1f88ce8..bfa0baf 100644 --- a/docs/getting_started.md +++ b/docs/getting_started.md @@ -36,7 +36,10 @@ Github is a website that allows us to have a Git repository that lives on the cl If you have no clue what commands to use for Git, go [here](https://learngitbranching.js.org/?locale=en_US) to learn! Just a couple of lessons are enough to understand how it works. ## **Documentation** -All of the documentation for this codebase is stored inside this `docs` folder. Here, you will find a markdown file for each ROS Node (packge/folder) under the `src` folder that explains its workings in more detail. +All of the documentation for this codebase is stored inside this `docs` folder. Here, you will find a markdown file for each ROS Node (packge/folder) under the `src` folder that explains its workings in more detail. You will also find some other general documentation in there. ## **What Should I do Now?** -After reading this document, you should follow the instructions for [install_on_windows.md](./install_on_windows.md) if you will be developing code on a Windows machine or [install_on_linux.md](./install_on_linux.md) if you will be developing on Linux. +Checkout the [code_overview.md](./code_overview.md) to understand how the codebase is structured. Also take a look at the (formatting.md)[./formatting.md] document to make sure that your code is readable and well maintained. + +After reading this document, you should follow the instructions for installing on [Windows,](./install_on_windows.md), installing on [Mac](./installing_on_mac.md), or installing on [Linux](./install_on_linux.md) + diff --git a/docs/install_on_linux.md b/docs/install_on_linux.md index 3ded274..35e9a68 100644 --- a/docs/install_on_linux.md +++ b/docs/install_on_linux.md @@ -80,3 +80,6 @@ If you close VS Code and reopen it later, it will try to reopen `urc-2023` in a To leave the container (to work on other projects), run **Remote: Close Remote Connection** from the Command Palette or click the green Remote button in the bottom-left and select **Close Remote Connection**. You can always re-enter the container with that green button (**Open Folder in container** > `urc-2023`). + +### Building and Testing +To build you can simply run the `./build.sh` command in the Visual Studio Code console. Similarly to launch the code or run tests you can run the `./test.sh` and `./launch.sh`. \ No newline at end of file diff --git a/docs/install_on_windows.md b/docs/install_on_windows.md index e433d6a..ba571a3 100644 --- a/docs/install_on_windows.md +++ b/docs/install_on_windows.md @@ -71,25 +71,25 @@ The tilde `~` is shorthand for your `$HOME` directory (`/home/yourusername`) in ## Docker Desktop Install [Docker Desktop for Windows](https://www.docker.com/products/docker-desktop). If you already have it, update it, and make sure it uses the WSL2 backend (Docker Desktop > Settings > **Use the WSL 2 based engine**). If Docker Desktop fails to start, try deleting `%appdata%/Docker`. -Docker Desktop will offer you a tutorial - it's not necessary for setting up this repository. You can skip it if you want. +Docker Desktop will offer you a tutorial - it's not necessary for setting up this repository. You can skip it if you want. You also do not need a Docker account to use Docker, so skip that as well. In general, you can't work with containers if Docker isn't running on Windows. There will be a whale icon in the Windows system tray if Docker is running. You can enable/disable Docker auto-starting when you log in (Docker Desktop > Settings > General > **Start Docker Desktop when you log in**). ## Visual Studio Code Install [VS Code](https://code.visualstudio.com/). If you already have it, update it (Help > Check for Updates...). -We need a few VS Code extensions. Open the Extensions sidebar (`Ctrl+Shift+X`) and install **Remote - WSL** and **Remote - Containers** by Microsoft. VS Code may auto-detect software and offer to install extensions for you. +We need a few VS Code extensions. Open the Extensions sidebar (`Ctrl+Shift+X`) and install **WSL** and **Dev Containers** by Microsoft. VS Code may auto-detect software and offer to install extensions for you. ## Open `urc-2023` in VS Code You're almost there. -In VS Code, open the Command Palette (`Ctrl+Shift+P`), search for **Remote-WSL: Open Folder in WSL...** and run that command. A folder browser will pop up - find and select `urc-2023`. This folder browser is showing your WSL2 filesystem, not your Windows filesystem. +In VS Code, open the Command Palette (`F1`), search for **Open Folder in WSL...** and run that command. A folder browser will pop up - find and select `urc-2023`. This folder browser is showing your WSL2 filesystem, not your Windows filesystem. The folder browser might not put you into a familiar WSL2 directory. The correct absolute path should look like `Network > wsl$ > Ubuntu > home > your-linux-username > urc-2023`. If VS Code asks you if you trust the workspace authors, select **Yes, I trust the authors**. -After VS Code loads into WSL2, a notification will tell you that it noticed a Dev Container configuration file. Click the **Reopen in Container** option. If you miss the notification, you can search **Remote-Containers: Reopen in Container** in the Command Palette. +After VS Code loads into WSL2, a notification will tell you that it noticed a Dev Container configuration file. Click the **Reopen in Container** option. If you miss the notification, you can search **Reopen in Container** in the Command Palette. **You're ready to develop now!** 🥳 @@ -103,3 +103,6 @@ Make sure Docker is running (check for the whale icon 🐳 in the system tray) o To leave the container (to work on other projects), run **Remote: Close Remote Connection** from the Command Palette or click the green Remote button in the bottom-left and select **Close Remote Connection**. You can always re-enter WSL2 then reopen in a container with this green button (**Open Folder in WSL** > `urc-2023` > **Reopen in Container**). + +### Building and Testing +To build you can simply run the `./build.sh` command in the Visual Studio Code console. Similarly to launch the code or run tests you can run the `./test.sh` and `./launch.sh`. \ No newline at end of file diff --git a/docs/installing_on_mac.md b/docs/installing_on_mac.md index 85b2b59..fbaf718 100644 --- a/docs/installing_on_mac.md +++ b/docs/installing_on_mac.md @@ -144,3 +144,6 @@ If you close VS Code and reopen it later, it will try to reopen `urc-2023` in a To leave the container (to work on other projects), run **Remote: Close Remote Connection** from the Command Palette or click the green Remote button in the bottom-left and select **Close Remote Connection**. You can always re-enter the container with that green button (**Open Folder in container** > `urc-2023`). + +### Building and Testing +To build you can simply run the `./build.sh` command in the Visual Studio Code console. Similarly to launch the code or run tests you can run the `./test.sh` and `./launch.sh`. \ No newline at end of file diff --git a/docs/python_creating_a_new_node.md b/docs/python_creating_a_new_node.md new file mode 100644 index 0000000..f263f40 --- /dev/null +++ b/docs/python_creating_a_new_node.md @@ -0,0 +1,110 @@ +# Creating a New Node +This will help you create a new node package, set up any dependencies, and get your node to be launched with the rest of the codebase. + +## `Creating a Package` +1. Make sure you are inside your Docker container. See [getting_started.md](./getting_started.md) if you do not know how + +2. Change your directory to `/src` +First determine what directory you are currently in using `pwd` (print working directory). + + Type `ls` (list) to determine what files and directories are in your current working directory +Type `cd ` (change directory) in order to move into a directory, aka a folder + + Do this until you reach `/urc-2023/src` + +3. Create a new Python node package +Run the following command `ros2 pkg create --build-type ament_python ` + + I ran `ros2 pkg create --build-type ament_python example_node` + +## `Setting Up the Node` +4. Make a new Python file under your node's src location. Call it whatever you want, I called it `example.py` + + For me it is under `src/example_node/example_node`. Yes, it is a bit funky why + the two directories have the same name. ¯\\\_(ツ)\_/¯ + +5. Remove the `test_flake8.py` and `test_pep257.py` files under your node's `/test`. We have another linter, so these would interfere + + For me it was in `src/example_node/test` + +6. Open up the `setup.py` file. Leave it open for now, we will get to it later + +## `Writing a Basic Node to Say "Hello World"` +7. You will need to import the ROS Python library, create a class representing your node, create an entry point, and write code to "gracefully-ish" shutdown the node when we press `ctrl-c`. Make sure to read the [formatting.md](./formatting.md) document to make sure you are writing good readable code. + + An important detail to remember is the name of your node: + + `super().__init__("this_is_the_name_of_the_node")` + +``` +import sys + +import rclpy +from rclpy.executors import ExternalShutdownException +from rclpy.node import Node + +from lib.color_codes import ColorCodes, colorStr + + +class ExampleNode(Node): + + def __init__(self) -> None: + super().__init__("my_example_node") + self.get_logger().info(colorStr("Launching example_node node", ColorCodes.BLUE_OK)) + + +def main(args: list[str] | None = None) -> None: + rclpy.init(args=args) + try: + example = ExampleNode() + rclpy.spin(example) + except KeyboardInterrupt: + pass + except ExternalShutdownException: + example.get_logger().info(colorStr("Shutting down example_node node", ColorCodes.BLUE_OK)) + example.destroy_node() + sys.exit(0) +``` + +## `Adding to the List of Launch-able Nodes` +8. Go back to your `setup.py` file. Look at the `console_scripts`, it should look this right now + + ` 'console_scripts': [],` + + Add an entry that points towards your `main()` function found in your Python file that you added. The syntax is the following + + `'console_scripts': [" = .:main"],` + + For me it would be this: + + `'console_scripts': ["myExampleNode = example_node.example:main"],` + +9. Open the file `robot.launch.py` under the folder `/src/viator_launch`. Create a new variable to store your node. The `package` parameter should be the same name as your node package name. The `executable` parameter should be the variable name you chose in the `setup.py` file. The `name` is the name of your node you wrote in the code in the `super().__init__()` method step 7. + + For me, I wrote the following. + + `example_node = Node(package="example_node", executable="myExampleNode", name="my_example_node")` + +11. In the same `robot.launch.py` file, add it to the array in the `generate_launch_description()` function. + + ``` + def generate_launch_description() -> launch.LaunchDescription: # pylint: disable=invalid-name + return launch.LaunchDescription( + [can_moteus_node, drivebase_node, mission_control_updater_node, arm_node, example_node] # <- I added it to the end of the array + ) + ``` + +12. In the `/src/viator_launch` folder, open up the `package.xml` file. Add a new `` entry to tell that your package should be included during build. The content is the name of your node package. + + For me it is this. + + `example_node` + +## `Build and Execute Code` +12. All while in the Docker container, execute the shell scripts `./build.sh` and `./launch.sh` in the command line. You might have to delete the `/build` and `/install` folders. + +13. Congrats, you have made a new node ! Yippie! Further examples of how to use ROS timers, subscribers, and publishers are found in the `/src/example_node/example_node` node; go ahead open it up and read the code. + + + + diff --git a/docs/resources/code_funnel.png b/docs/resources/code_funnel.png new file mode 100644 index 0000000000000000000000000000000000000000..b6e9f6bfecfd2e8f49fd689f578ae644c37bf02c GIT binary patch literal 1421673 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%0A)RQ^zIWFe&yW(JB}$Ds;0+yhG@JJ{V_py` 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 z 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


4XLL(|?(jV+Jv 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

t!8H^=WyIM}GtNBcCv6nU@y5Ikv0v9Qrw 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ν^&ynPf<&tz04*vR_4{@+#hVs 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≺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%0A^OhZnS;U^M-IeMwf`Qp05oLG6qBqo9N+H~!N9 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

#kvr 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 XeNH%<_qH_x_(xJyPNY!iweSA{M)4|c literal 0 HcmV?d00001 diff --git a/docs/resources/moteus_docs.png b/docs/resources/moteus_docs.png deleted file mode 100644 index e819852b416751f4f7a411615e43f4819906da4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 92025 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%0D@HDJ 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%0Dbu~cS}gx_d=}dg{@R67gFI*rne9W41QxE! z6Si`kFvP(XM7$q$n3VLDzdo9bu)KR0@u3dQX7x!Y(C*;UP{c5>IhWdZM5zxZUq^jK zcPVo=R_hx!yGmz)gOvBf{4#d4P@KU5KZkMc;1MEe5Pp;2`n+*ldj0bozJ_vRzB!K` zl-c?ulT8r`{~Y#BE?!QlR+yYWd_Lz^ z4aqiztW)}JV9MR&3hjrXSVQ860rk5bHT`L+#XprAyaiy@hbe<4cWk?x1!Ut4oh&Fd zR&-FxL;;80f3utlXi*csjx)ASMz{LvP$BkVM{(EU3YWl4I*>6e!~z}TEchwoyY08K zlUVHsNjCuxVCfLS$Ff6IYnz9zKMfMHM_ca5g8=)qx$Z^9)ff1~)Aecp1)(|_zI{== zzDaH~V|dze)tUjRWszxx$h9(R3eC`4su%1gOiBAHd`JeqhQ{N7KvEp51-l zDD)$s>5uvF61oCX)xh=*M2dveaeG{0S3Mrw&@Oz5bY=IzyfR(}JQ-7U?5@HJ~(nrY$fs@}sWkuFV9tC#$f+I@`h9fKPf2;e5-|{}6$i99?V2mdOUFNeCS@^4O^~Ld6PUp2C{^ zfC_D0KT2nk)*_w@Y}}-N(Ktkc)+ua?xLA0@S6@eipwLz4sA)vU+l86XW%umt0kx#5 zNAL^MERA!l)H1Zw-fBHy%junxO{_Ds`6T#M=DrgtY2rN9x7h3LblZ(@?~Tw$%bN?p zIxD75R05)_AC>W>j6c0Pa9IINlZDO-0GqCBSqNtl1~$p9L9w^Y@{wK=_>4g7roKVI z6*WU)eWoM0SfK3kzF?ahuN<3Em?3(gz>in8h}@F%O8wIX(-0^yNj_@ybcnEZ5^s?5 zReI9-b565E7~KyhDSn@x4n!m~EgZP(F%1@drGutG*||)p4$gWYF3>-+T}s!NWo$12 zT*i+6H$$4=LZg3IBK}9od;9nwD%^~K?Z+zo|I*1!?tE+|Wr2!Bs~>erpJA?N9>U<( zf;MLHA>%&$$SVjClc)jKUAgRA*?C~51E9~jf>=nkz-s^$%VNpARqjDP^!^SI1O*w3nIBOp+d~?7S~jtQ^TOnwqBtgp#Mk1F!ut(fnA zNl=ZxZv!m>J*F}xe-;c1>mt-HaiRyWZ}bul9OrO+C%XC~jYUrhJki{?(<^+0 z8G76eYW>j%K|kjnVdxur9{ytLsE*`50Qy;1FVruI(-T}+*JdXgval5?zP^*`rRH5E z=p}PW?|rTNc2lX0m%u9?vkYo4J8Xl{y3- zuJZW}F~)I*G4}{y5a=LJ?qX6d0fS(OF$i!LgO5M5(+}KWRD1MU8D&4Bw*1>?N>6q$ znNtkrOUst%HYe^KIIyAQ!sDq=%#vUlP#7Kt4^W?lsQ59qV^N?PG=_X)228f*C$jpb z%N}jFXi8oId{s0>O0aB-dlrm>$zzOTz!uFPV+FyW3Lxo#4O*Eh?N2(6+|*eIKN24V zfJYvH&Hdx+94&(uu%{{eDAs(Ana diff --git a/launch.sh b/launch.sh index 7459dec..aa11a7a 100755 --- a/launch.sh +++ b/launch.sh @@ -3,4 +3,13 @@ source /opt/ros/$ROS_DISTRO/setup.bash source /home/trickfire/urc-2023/install/setup.bash -ros2 launch viator_launch robot.launch.py & ros2 launch rosbridge_server rosbridge_websocket_launch.xml +#modprobe can +#modprobe can_raw +#modprobe mttcan +#ip link set can0 type can bitrate 1000000 dbitrate 5000000 fd on +#ip link set can0 up + +# Add to the python import pathes. Not the best, but will work for now +export PYTHONPATH="/home/trickfire/urc-2023/src/:$PYTHONPATH" + +ros2 launch viator_launch robot.launch.py & ros2 launch rosbridge_server rosbridge_websocket_launch.xml \ No newline at end of file diff --git a/launch_only_docker.sh b/launch_only_docker.sh deleted file mode 100755 index 3d8257a..0000000 --- a/launch_only_docker.sh +++ /dev/null @@ -1,3 +0,0 @@ -#Bind the host machine's urc-2023 root folder to the container's target path. -#Launch the "trickfireimage" image by giving shell control over to the container -docker run --mount type=bind,source="$(pwd)",target="/home/trickfire/urc-2023" -it --privileged -e "DISPLAY=$DISPLAY" -v "$HOME/.Xauthority:/root/.Xauthority:ro" --network host trickfireimage diff --git a/mypy.ini b/mypy.ini new file mode 100644 index 0000000..1b6f265 --- /dev/null +++ b/mypy.ini @@ -0,0 +1,10 @@ +# Myyy is onloy being used to do type checking + +[mypy] +ignore_missing_imports = True +disable_error_code = attr-defined + +disallow_untyped_defs = True +disallow_incomplete_defs = True +check_untyped_defs = True +disallow_untyped_decorators = True diff --git a/src/arm/arm/ResponseStructure.srv b/src/arm/arm/ResponseStructure.srv new file mode 100644 index 0000000..688524b --- /dev/null +++ b/src/arm/arm/ResponseStructure.srv @@ -0,0 +1,3 @@ +int64 input +--- +int64 current_mode \ No newline at end of file diff --git a/src/executor_test/executor_test/__init__.py b/src/arm/arm/__init__.py similarity index 100% rename from src/executor_test/executor_test/__init__.py rename to src/arm/arm/__init__.py diff --git a/src/arm/arm/arm.py b/src/arm/arm/arm.py new file mode 100644 index 0000000..f99ab40 --- /dev/null +++ b/src/arm/arm/arm.py @@ -0,0 +1,85 @@ +import sys +from enum import IntEnum +from typing import Any + +import rclpy +from rclpy.executors import ExternalShutdownException +from rclpy.node import Node +from std_msgs.msg import Int32 + +from custom_interfaces.srv import ArmMode +from lib.color_codes import ColorCodes, colorStr +from lib.configs import MotorConfigs +from lib.interface.robot_interface import RobotInterface + +from .individual_control_vel import IndividualControlVel + + +class ArmModeEnum(IntEnum): + DISABLED = 0 + INDIVIDUAL_MOTOR_CONTROL_VEL = 1 + INDIVIDUAL_MOTOR_CONTROL_POS = 2 + INVERSE_KINEMATICS = 3 + + +class Arm(Node): + def __init__(self) -> None: + super().__init__("arm_node") + self.get_logger().info(colorStr("Launching arm_node", ColorCodes.BLUE_OK)) + + self.change_arm_mode_sub = self.create_subscription( + Int32, "update_arm_mode", self.updateArmMode, 10 + ) + + self.current_mode = ArmModeEnum.DISABLED + + self.mode_service = self.create_service(ArmMode, "get_arm_mode", self.modeServiceHandler) + + self.bot_interface = RobotInterface(self) + + self.individual_control_vel = IndividualControlVel(self, self.bot_interface) + + def modeServiceHandler(self, _: Any, response: ArmMode.Response) -> ArmMode.Response: + response.current_mode = int(self.current_mode) + return response + + def updateArmMode(self, msg: Int32) -> None: + self.current_mode = msg.data + + if self.current_mode == 0: + self.bot_interface.disableMotor(MotorConfigs.ARM_TURNTABLE_MOTOR) + self.bot_interface.disableMotor(MotorConfigs.ARM_SHOULDER_MOTOR) + self.bot_interface.disableMotor(MotorConfigs.ARM_ELBOW_MOTOR) + self.bot_interface.disableMotor(MotorConfigs.ARM_LEFT_WRIST_MOTOR) + self.bot_interface.disableMotor(MotorConfigs.ARM_RIGHT_WRIST_MOTOR) + + self.individual_control_vel.can_send = False + elif self.current_mode == 1: + self.individual_control_vel.can_send = True + elif self.current_mode == 2: + self.individual_control_vel.can_send = False + elif self.current_mode == 3: + self.individual_control_vel.can_send = False + + +def main(args: list[str] | None = None) -> None: + """ + The entry point of the node. + """ + + rclpy.init(args=args) + try: + node = Arm() + rclpy.spin(node) + + except KeyboardInterrupt: + pass + except ExternalShutdownException: + # This is done when we ctrl-c the progam to shut it down + node.get_logger().info(colorStr("Shutting down arm_node node", ColorCodes.BLUE_OK)) + node.destroy_node() + sys.exit(0) + + +if __name__ == "__main__": + main() diff --git a/src/arm/arm/individual_control_vel.py b/src/arm/arm/individual_control_vel.py new file mode 100644 index 0000000..dfefb52 --- /dev/null +++ b/src/arm/arm/individual_control_vel.py @@ -0,0 +1,197 @@ +from rclpy.node import Node +from std_msgs.msg import Float32 + +from lib.configs import MotorConfigs +from lib.interface.robot_interface import RobotInterface + + +class IndividualControlVel: + WRIST_VEL = 0.3 + VEL = 1.0 + + def __init__(self, ros_node: Node, interface: RobotInterface): + self._ros_node = ros_node + self.bot_interface = interface + + self.can_send = False + + # Left wrist motor + self.left_wrist_motor_sub = ros_node.create_subscription( + Float32, "left_wrist_cw", self.leftWristCW, 10 + ) + self.left_wrist_motor_sub = ros_node.create_subscription( + Float32, "left_wrist_ccw", self.leftWristCCW, 10 + ) + + # Right wrist motor + self.left_wrist_motor_sub = ros_node.create_subscription( + Float32, "right_wrist_cw", self.rightWristCW, 10 + ) + self.left_wrist_motor_sub = ros_node.create_subscription( + Float32, "right_wrist_ccw", self.rightWristCCW, 10 + ) + + # Elbow motor + self.elbow_up_sub = ros_node.create_subscription(Float32, "elbow_up", self.elbowUp, 10) + + self.elbow_down_sub = ros_node.create_subscription( + Float32, "elbow_down", self.elbowDown, 10 + ) + + # Shoulder motor + self.shoulder_up_sub = ros_node.create_subscription( + Float32, "shoulder_up", self.shoulderUp, 10 + ) + + self.elboshoulder_down_sub = ros_node.create_subscription( + Float32, "shoulder_down", self.shoulderDown, 10 + ) + + # Turn table + self.turntable_clockwise_sub = ros_node.create_subscription( + Float32, "turntable_cw", self.turntableCW, 10 + ) + + self.turntable_counter_clockwise_sub = ros_node.create_subscription( + Float32, "turntable_ccw", self.turntableCCW, 10 + ) + + def leftWristCW(self, msg: Float32) -> None: + if not self.can_send: + return + + joystick = msg.data + + if joystick > 0: + self._ros_node.get_logger().info("Left Wrist CW" + str(joystick)) + self.bot_interface.runMotorSpeed(MotorConfigs.ARM_LEFT_WRIST_MOTOR, self.WRIST_VEL) + + else: + self._ros_node.get_logger().info("Left Wrist STOP") + self.bot_interface.stopMotor(MotorConfigs.ARM_LEFT_WRIST_MOTOR) + + def leftWristCCW(self, msg: Float32) -> None: + if not self.can_send: + return + + joystick = msg.data + + if joystick > 0: + self._ros_node.get_logger().info("Left Wrist CCW" + str(joystick)) + self.bot_interface.runMotorSpeed(MotorConfigs.ARM_LEFT_WRIST_MOTOR, -self.WRIST_VEL) + + else: + self._ros_node.get_logger().info("Left Wrist STOP") + self.bot_interface.stopMotor(MotorConfigs.ARM_LEFT_WRIST_MOTOR) + + def rightWristCW(self, msg: Float32) -> None: + if not self.can_send: + return + + joystick = msg.data + + if joystick > 0: + self._ros_node.get_logger().info("Right Wrist CW" + str(joystick)) + self.bot_interface.runMotorSpeed(MotorConfigs.ARM_RIGHT_WRIST_MOTOR, -self.WRIST_VEL) + + else: + self._ros_node.get_logger().info("Right Wrist STOP") + self.bot_interface.stopMotor(MotorConfigs.ARM_RIGHT_WRIST_MOTOR) + + def rightWristCCW(self, msg: Float32) -> None: + if not self.can_send: + return + + joystick = msg.data + + if joystick > 0: + self._ros_node.get_logger().info("Right Wrist CCW" + str(joystick)) + self.bot_interface.runMotorSpeed(MotorConfigs.ARM_RIGHT_WRIST_MOTOR, -self.WRIST_VEL) + + else: + self._ros_node.get_logger().info("Right Wrist STOP") + self.bot_interface.stopMotor(MotorConfigs.ARM_RIGHT_WRIST_MOTOR) + + def elbowUp(self, msg: Float32) -> None: + if not self.can_send: + return + + data = msg.data + + if data > 0: + self._ros_node.get_logger().info("Elbow up" + str(data)) + self.bot_interface.runMotorSpeed(MotorConfigs.ARM_ELBOW_MOTOR, -self.VEL) + + else: + self._ros_node.get_logger().info("Elbow down STOP") + self.bot_interface.stopMotor(MotorConfigs.ARM_ELBOW_MOTOR) + + def elbowDown(self, msg: Float32) -> None: + if not self.can_send: + return + + data = msg.data + + if data > 0: + self._ros_node.get_logger().info("Elbow down" + str(data)) + self.bot_interface.runMotorSpeed(MotorConfigs.ARM_ELBOW_MOTOR, self.VEL) + + else: + self._ros_node.get_logger().info("Elbow down STOP") + self.bot_interface.stopMotor(MotorConfigs.ARM_ELBOW_MOTOR) + + def shoulderUp(self, msg: Float32) -> None: + if not self.can_send: + return + + data = msg.data + + if data > 0: + self._ros_node.get_logger().info("Shoulder up" + str(data)) + self.bot_interface.runMotorSpeed(MotorConfigs.ARM_SHOULDER_MOTOR, -self.VEL) + + else: + self._ros_node.get_logger().info("Shoulder STOP") + self.bot_interface.stopMotor(MotorConfigs.ARM_SHOULDER_MOTOR) + + def shoulderDown(self, msg: Float32) -> None: + if not self.can_send: + return + + data = msg.data + + if data > 0: + self._ros_node.get_logger().info("Shoulder down" + str(data)) + self.bot_interface.runMotorSpeed(MotorConfigs.ARM_SHOULDER_MOTOR, self.VEL) + + else: + self._ros_node.get_logger().info("Shoulder STOP") + self.bot_interface.stopMotor(MotorConfigs.ARM_SHOULDER_MOTOR) + + def turntableCW(self, msg: Float32) -> None: + if not self.can_send: + return + + data = msg.data + + if data > 0: + self._ros_node.get_logger().info("Turntable clock wise") + self.bot_interface.runMotorSpeed(MotorConfigs.ARM_TURNTABLE_MOTOR, self.VEL) + + else: + self._ros_node.get_logger().info("Turntable STOP") + self.bot_interface.stopMotor(MotorConfigs.ARM_TURNTABLE_MOTOR) + + def turntableCCW(self, msg: Float32) -> None: + if not self.can_send: + return + + data = msg.data + + if data > 0: + self._ros_node.get_logger().info("Turntable counter clock wise") + self.bot_interface.runMotorSpeed(MotorConfigs.ARM_TURNTABLE_MOTOR, -self.VEL) + + else: + self._ros_node.get_logger().info("Turntable STOP") + self.bot_interface.stopMotor(MotorConfigs.ARM_TURNTABLE_MOTOR) diff --git a/src/arm/package.xml b/src/arm/package.xml index d56ee9d..97ba82a 100644 --- a/src/arm/package.xml +++ b/src/arm/package.xml @@ -4,15 +4,17 @@ arm 0.0.0 TODO: Package description - trickfire + trickfire TODO: License declaration - ament_cmake + custom_interfaces - ament_lint_auto - ament_lint_common + ament_copyright + ament_flake8 + ament_pep257 + python3-pytest - ament_cmake + ament_python diff --git a/src/executor_test/resource/executor_test b/src/arm/resource/arm similarity index 100% rename from src/executor_test/resource/executor_test rename to src/arm/resource/arm diff --git a/src/arm/setup.cfg b/src/arm/setup.cfg new file mode 100644 index 0000000..fd4e52c --- /dev/null +++ b/src/arm/setup.cfg @@ -0,0 +1,4 @@ +[develop] +script_dir=$base/lib/arm +[install] +install_scripts=$base/lib/arm diff --git a/src/arm/setup.py b/src/arm/setup.py new file mode 100644 index 0000000..e475a24 --- /dev/null +++ b/src/arm/setup.py @@ -0,0 +1,23 @@ +from setuptools import find_packages, setup + +package_name = "arm" + +setup( + name=package_name, + version="0.0.0", + packages=find_packages(exclude=["test"]), + data_files=[ + ("share/ament_index/resource_index/packages", ["resource/" + package_name]), + ("share/" + package_name, ["package.xml"]), + ], + install_requires=["setuptools"], + zip_safe=True, + maintainer="trickfire", + maintainer_email="vladimirkupryukhin@gmail.com", + description="TODO: Package description", + license="TODO: License declaration", + tests_require=["pytest"], + entry_points={ + "console_scripts": ["arm = arm.arm:main"], + }, +) diff --git a/src/arm/src/my_node.cpp b/src/arm/src/my_node.cpp deleted file mode 100644 index bc707ca..0000000 --- a/src/arm/src/my_node.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include - -int main(int argc, char ** argv) -{ - (void) argc; - (void) argv; - - printf("hello world arm package\n"); - return 0; -} diff --git a/src/life_detection/test/test_copyright.py b/src/arm/test/test_copyright.py similarity index 74% rename from src/life_detection/test/test_copyright.py rename to src/arm/test/test_copyright.py index cc8ff03..95f0381 100644 --- a/src/life_detection/test/test_copyright.py +++ b/src/arm/test/test_copyright.py @@ -16,8 +16,10 @@ import pytest +# Remove the `skip` decorator once the source file(s) have a copyright header +@pytest.mark.skip(reason="No copyright header has been placed in the generated source file.") @pytest.mark.copyright @pytest.mark.linter def test_copyright(): - rc = main(argv=['.', 'test']) - assert rc == 0, 'Found errors' + rc = main(argv=[".", "test"]) + assert rc == 0, "Found errors" diff --git a/src/camera/camera/roscamera.py b/src/camera/camera/roscamera.py index 791f55c..f92c21f 100644 --- a/src/camera/camera/roscamera.py +++ b/src/camera/camera/roscamera.py @@ -7,8 +7,10 @@ from pathlib import Path from std_msgs.msg import String -# returns a list of working camera ids to capture every camera connected to the robot -def get_cameras() -> list[int]: +""" +Function returns a list of working camera IDs to capture every camera connected to the robot +""" +def getCameras() -> list[int]: nonWorkingPorts = 0 devPort = 0 workingPorts = [] @@ -28,6 +30,7 @@ def get_cameras() -> list[int]: return workingPorts + class RosCamera(Node): def __init__(self, topicName: str, camera: int): @@ -41,14 +44,14 @@ def __init__(self, topicName: str, camera: int): # Create a subscription to read 'camera_control' topic from # mission control. Topic messages are Strings. - # ex. topic message: "toggle arm_camera, ID: 0" + # ex. topic message: "0 off", "0 on" # The topic message should always have the corresponding camera number - # at the last index of each message. + # at the first index of each message. subTopicName = "camera_control" self.subscription = self.create_subscription( String, subTopicName, - self.toggle_camera, + self.setCameraState, 10) self.subscription self.get_logger().info("Created Subscription to" + subTopicName) @@ -58,7 +61,7 @@ def __init__(self, topicName: str, camera: int): timer_period = 2 # seconds # Create the timer - self.timer = self.create_timer(timer_period, self.timer_callback) + self.timer = self.create_timer(timer_period, self.publishCameraFrame) # Create a VideoCapture object # The argument '0' gets the default webcam. @@ -71,50 +74,72 @@ def __init__(self, topicName: str, camera: int): # Declare parameters for each 'ros_camera' node thread self.declare_parameter("cameraNumber", camera) self.declare_parameter("isOn", True) + - def timer_callback(self): - """ - Callback function. - This function gets called every 0.1 seconds. - """ + """ + Callback function publishes a frame captured from a camera to /video_framesX (X is specific + camera ID) every 0.1 seconds + """ + def publishCameraFrame(self): # Capture frame-by-frame - # This method returns True/False as well - # as the video frame. + # This method returns True/False as well as the video frame. ret, frame = self.cap.read() - # Get 'ros_camera' parameter, isOn, then check the state of the camera to publish frame or not + # Get bool parameter, isOn, and check the state of the camera to publish frame or not + # Value of isOn is controlled by setCameraState() isOn = bool(self.get_parameter("isOn")._value) if ret and isOn: # Publish the image. self._publisher.publish(self.br.cv2_to_compressed_imgmsg(frame)) + + + """ + Function reads str msgs from topic, 'camera_control' (published by mission control), and + turns on/off the periodic publishing of frames by a certain camera - # Display the message on the console - # self.get_logger().info('Publishing compressed video frame') - - def toggle_camera(self, msg) -> None: - # Read the last index of the message and check whether mission control is targeting this - # instance of 'ros_camera' + Function is called whenever a msg is published to 'camera_control' + + Function assumes str msgs sent to 'camera_control' begin with a number and ends with an 'f' + (meaning off) or 'n' (meaning on) + ex. + "0 off" -> to turn off camera with id=0 + "2 on" -> to turn on camera with id=2 + """ + def setCameraState(self, msg) -> None: + # Check if this specific camera is targeted by mission control, stop the function otherwise cameraNumber = int(self.get_parameter("cameraNumber")._value) - if (int(msg.data[-1]) != cameraNumber): + if (int(msg.data[0]) != cameraNumber): + return + + # Check if the desired camera state is already fulfilled, print and stop the function if so + cameraOn = bool(self.get_parameter("isOn")._value) + if (str(msg.data[-1]) == 'f' and not cameraOn): + self.get_logger().info("camera" + str(cameraNumber) + " is already off!") + return + elif (str(msg.data[-1]) == 'n' and cameraOn): + self.get_logger().info("camera" + str(cameraNumber) + " is already on!") return - # Toggle by not'ing the bool value - isOn = bool(self.get_parameter("isOn")._value) + # Set isOn bool parameter to either stop or restart the publishing of frames self.undeclare_parameter("isOn") - self.declare_parameter("isOn", not isOn) + if (str(msg.data[-1]) == 'f'): + # self.get_logger().info("turning camera" + str(cameraNumber) + " off!") + self.declare_parameter("isOn", False) + else: + # self.get_logger().info("turning camera" + str(cameraNumber) + " on!") + self.declare_parameter("isOn", True) + def main(args=None): rclpy.init(args=args) try: - """ - we need an executor because running .spin() is a blocking function. - using the MultiThreadedExecutor, we can control multiple nodes - """ + # We need an executor because running .spin() is a blocking function. + # using the MultiThreadedExecutor, we can control multiple nodes executor = MultiThreadedExecutor() nodes = [] cameraNum = 0 - for cameraID in get_cameras(): + for cameraID in getCameras(): node = RosCamera("video_frames" + str(cameraNum), cameraID) nodes.append(node) executor.add_node(node) diff --git a/src/camera/package.xml b/src/camera/package.xml index cabb39a..771a9c8 100644 --- a/src/camera/package.xml +++ b/src/camera/package.xml @@ -4,14 +4,9 @@ camera 0.0.0 TODO: Package description - trickfire + trickfire TODO: License declaration - rclpy - std_msgs - cv2 - cv_bridge - ament_copyright ament_flake8 ament_pep257 diff --git a/src/camera/setup.py b/src/camera/setup.py index 7e977a1..318a38e 100644 --- a/src/camera/setup.py +++ b/src/camera/setup.py @@ -14,13 +14,11 @@ install_requires=['setuptools'], zip_safe=True, maintainer='trickfire', - maintainer_email='vladimirkupryukhin@gmail.com', + maintainer_email='kimdavid2222@gmail.com', description='TODO: Package description', license='TODO: License declaration', tests_require=['pytest'], entry_points={ - 'console_scripts': [ - 'roscamera = camera.roscamera:main' - ], + 'console_scripts': ['roscamera = camera.roscamera:main'], }, ) diff --git a/src/camera/test/test_flake8.py b/src/camera/test/test_flake8.py deleted file mode 100644 index 27ee107..0000000 --- a/src/camera/test/test_flake8.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2017 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_flake8.main import main_with_errors -import pytest - - -@pytest.mark.flake8 -@pytest.mark.linter -def test_flake8(): - rc, errors = main_with_errors(argv=[]) - assert rc == 0, \ - 'Found %d code style errors / warnings:\n' % len(errors) + \ - '\n'.join(errors) diff --git a/src/camera/test/test_pep257.py b/src/camera/test/test_pep257.py deleted file mode 100644 index b234a38..0000000 --- a/src/camera/test/test_pep257.py +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright 2015 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_pep257.main import main -import pytest - - -@pytest.mark.linter -@pytest.mark.pep257 -def test_pep257(): - rc = main(argv=['.', 'test']) - assert rc == 0, 'Found code style errors / warnings' diff --git a/src/can/CMakeLists.txt b/src/can/CMakeLists.txt deleted file mode 100644 index e5a0925..0000000 --- a/src/can/CMakeLists.txt +++ /dev/null @@ -1,34 +0,0 @@ -cmake_minimum_required(VERSION 3.8) -project(can) - -if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") - add_compile_options(-Wall -Wextra -Wpedantic) -endif() - -# find dependencies -find_package(ament_cmake REQUIRED) -# uncomment the following section in order to fill in -# further dependencies manually. -# find_package( REQUIRED) - -add_executable(my_node src/my_node.cpp) -target_include_directories(my_node PUBLIC - $ - $) -target_compile_features(my_node PUBLIC c_std_99 cxx_std_17) # Require C99 and C++17 - -install(TARGETS my_node - DESTINATION lib/${PROJECT_NAME}) - -if(BUILD_TESTING) - find_package(ament_lint_auto REQUIRED) - # the following line skips the linter which checks for copyrights - # uncomment the line when a copyright and license is not present in all source files - #set(ament_cmake_copyright_FOUND TRUE) - # the following line skips cpplint (only works in a git repo) - # uncomment the line when this package is not in a git repo - #set(ament_cmake_cpplint_FOUND TRUE) - ament_lint_auto_find_test_dependencies() -endif() - -ament_package() diff --git a/src/can/package.xml b/src/can/package.xml deleted file mode 100644 index 346c308..0000000 --- a/src/can/package.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - can - 0.0.0 - TODO: Package description - trickfire - TODO: License declaration - - ament_cmake - - ament_lint_auto - ament_lint_common - - - ament_cmake - - diff --git a/src/can/src/my_node.cpp b/src/can/src/my_node.cpp deleted file mode 100644 index 59a3239..0000000 --- a/src/can/src/my_node.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include - -int main(int argc, char ** argv) -{ - (void) argc; - (void) argv; - - printf("hello world can package\n"); - return 0; -} diff --git a/src/can_moteus/can_moteus/moteus_motor.py b/src/can_moteus/can_moteus/moteus_motor.py old mode 100755 new mode 100644 index db8b38b..b2b5c67 --- a/src/can_moteus/can_moteus/moteus_motor.py +++ b/src/can_moteus/can_moteus/moteus_motor.py @@ -1,149 +1,104 @@ -import moteus -import std_msgs.msg -import asyncio -from multiprocessing import Queue, Process, Pipe -from std_msgs.msg import Float32 -import math +from threading import Lock +import std_msgs.msg +from moteus.moteus import Result +from rclpy.node import Node +from rclpy.publisher import Publisher +from rclpy.subscription import Subscription +from std_msgs.msg import String -class Mode: - POSITION = 0 # Asks for float. Measured in revolutions - VELOCITY = 1 # Asks float. Measured in revolutions per second +from lib.configs import MoteusMotorConfig +from lib.moteus_motor_state import MoteusMotorState, MoteusRunSettings class MoteusMotor: - """Connects to a moteus controller. Publishes desired register's values from controller""" - - def __init__(self, canID, name, motorMode, moteusPubList, queueToMoteus, toPublisherQueue, rosNode): - """ - Parameters - ---------- - canID : int - Can ID of the moteus controller you are trying to connect to - name : str - The name of the controller. This string is used in the topic - names of both subscribers and publishers - motorMode : Mode - The mode of this controller. This effects what kind of data - the object expects and what data the object will send to the - moteus controller - moteusPubList : moteus.Register[] - Determines what data from the motor will be published to ROS - """ - - rosNode.get_logger().info("Creating motor with name: " + name) - self._canID = canID - self._name = name - self._moteusRegToPubObjHashmap = {} - self._rosNode = rosNode - self._motorMode = motorMode - self._queueToMoteus = queueToMoteus - self._toPublisherQueue = toPublisherQueue - self._moteusPubList = moteusPubList - - # Create subscribers and publishers - self._createPublishers(moteusPubList) - self._createSubscribers() - - rosNode.create_timer(0.02, self._readFromMoteusQueue) - - - def _readFromMoteusQueue(self): - """Recieve data from multiprocess and publish it to the corresponding register topic""" - - if (self._toPublisherQueue != None) and (not self._toPublisherQueue.empty()): - dataRecieved = self._toPublisherQueue.get() - register = dataRecieved[0] # is a moteus.Register enum - data = dataRecieved[1] # is a floating point number - - publisher = self._moteusRegToPubObjHashmap[register] - msg = Float32() - msg.data = data - - publisher.publish(msg) + def __init__(self, config: MoteusMotorConfig, ros_node: Node) -> None: + """ + Create a logical representation of a motor that is using + a Moteus controller. Contains a list of variables that should be + sent to the Moteus controller. Subscribes to input and publishes output + + Paramaters + ------- + config : MoteusMotorConfig + The config of the motor. + rosNode : Node + The ROS node used to create the ros_moteus_bridge.py + """ - def _createPublishers(self, moteusPubList): - """Create a publisher for data for each moteus register + self.config = config + self._ros_node = ros_node + self._subscriber = self._createSubscriber() + self._publisher = self._createPublisher() - For each register that we want to publish to ROS, create - a specific publisher topic for it. + # Mutex - used to protect writing/reading the state of the motor + self.mutex_lock = Lock() - The format of the publisher is: - __from_can - Example: - /frontleftdrivemotor_velocity_from_can - or - /turntable_position_from_can + # The settings we can send to the moteus controller + # using the make_position() method + self.run_settings: MoteusRunSettings = MoteusRunSettings() + # By default, the motor is shutoff + self.set_stop = True - Parameters - ---------- - moteusPubList : array of moteus.Register - Determines what data from the motor will be published to ROS + def _createSubscriber(self) -> Subscription: """ - - for register in moteusPubList: - topicName = self._name + "_" + \ - str(register).replace("Register.", "").lower() + "_from_can" - publisher = self._rosNode.create_publisher( - std_msgs.msg.Float32, topicName, 10) - - self._moteusRegToPubObjHashmap[register] = publisher - - def _createSubscribers(self): - """Create subscriber for the corresponding mode - - The format of the subscriber is: - __from_robot_interface - Example: - /frontleftdrivemotor_velocity_from_robot_interface - or - /turntable_position_from_robot_interface + The subscriber to get data from. + The format of the topic is the following: moteusmotor__from_interface """ - - dataName = "" - callbackFunction = None - - if (self._motorMode == Mode.POSITION): - dataName = "position" - callbackFunction = self._positionCallback - elif (self._motorMode == Mode.VELOCITY): - dataName = "velocity" - callbackFunction = self._velocityCallback - - topicName = self._name + "_" + dataName + "_from_robot_interface" - - self._rosNode.subscription = self._rosNode.create_subscription( - std_msgs.msg.Float32, - topicName, - callbackFunction, - 10 + topic_name = self.config.getInterfaceTopicName() + subscriber = self._ros_node.create_subscription( + std_msgs.msg.String, + topic_name, + self.dataInCallback, + 1, # Size of queue is 1. All additional ones are dropped ) - def _positionCallback(self, msg): - """Send the data to the multiprocess for position - msg : Float32 - This is sent from from the subscriber. - """ + return subscriber - if self._queueToMoteus != None: - # [0] can ID - # [1] data value - toMultiprocess = [self._canID,msg.data] - self._queueToMoteus.put(toMultiprocess) + def _createPublisher(self) -> Publisher: + """ + The publisher to send data to. + The format of the topic is the following: moteusmotor__from_can + """ + topic_name = self.config.getCanTopicName() + # Size of queue is 1. All additional ones are dropped + publisher = self._ros_node.create_publisher(std_msgs.msg.String, topic_name, 1) - # self._ros_pipe_conn.send(self._modeData) + return publisher - def _velocityCallback(self, msg): - """Send the data to the multiprocess for velocity - msg : Float32 - This is sent from from the subscriber. + def dataInCallback(self, msg: String) -> None: """ + Update the motor state. Mutex protected, + meaning that no one can go into any other "critical section" + of code that also has a mutex protecting it. + """ + with self.mutex_lock: + self.run_settings = MoteusRunSettings.fromJsonMsg(msg) - if self._queueToMoteus != None: - # [0] can ID - # [1] data value - toMultiprocess = [self._canID,msg.data] - self._queueToMoteus.put(toMultiprocess) + def publishData(self, moteus_data: Result) -> None: + """ + Publishes the data from the moteus controller + """ + with self.mutex_lock: + try: + if not self._ros_node.context.ok(): + return + + # self._rosNode.get_logger().info(str(moteusData.values)) + + # TODO: We need to update firmware to get POWER information (7/1/2024) + # https://github.com/mjbots/moteus/releases + # https://discord.com/channels/633996205759791104/722434939676786688/1252380387783610428 + # self._rosNode.get_logger().info(str(moteusData.values.keys())) + + state = MoteusMotorState.fromMoteusData(self.config.can_id, moteus_data) + self._publisher.publish(state.toMsg()) + except Exception as error: # pylint: disable=broad-exception-caught + # This is used to handle any errors in order to prevent the thread from dying + # Specifically, when we crtl-c we want the motors to be set_stop(), but if this + # thread crashes we cannot do that. So we catch any errors + self._ros_node.get_logger().info("Failed to publish motor data") + self._ros_node.get_logger().info(str(error)) diff --git a/src/can_moteus/can_moteus/moteus_multiprocess.py b/src/can_moteus/can_moteus/moteus_multiprocess.py deleted file mode 100644 index 7f3b129..0000000 --- a/src/can_moteus/can_moteus/moteus_multiprocess.py +++ /dev/null @@ -1,208 +0,0 @@ -import moteus -import asyncio -from multiprocessing import Queue, Process -import math -from . import moteus_motor - - -class _MotorData: - canID = -1 - mode = None - toPublisherQueue = None # [0] Register [1] data - moteusPubList = None - data = 0 - moteusController = None - -class MoteusMultiprocess: - """Connects to moteus controllers and sends data to each controller in order - - ------ - This will create a multiprocess queue for each moteus motor to send - data that it should publish. There will be one queue that all the motors - will push to. - """ - - def __init__(self, rosNode): - """ - Parameters - ---------- - rosNode : Node - This is used, and should only be used, as a way to print logging - information to the console. - """ - - self._queueToMoteus = Queue() - self._canIDToMotorData = {} - self._rosNode = rosNode - - - - def addMotor(self, canID, name, motorMode, moteusPubList): - """ - Parameters - ---------- - canID : int - Can ID of the moteus controller you are trying to connect to - name : str - The name of the controller. This string is used in the topic - names of both subscribers and publishers - motorMode : moteus_controller.Mode - The mode of this controller. This effects what kind of data - the object expects and what data the object will send to the - moteus controller - moteusPubList : moteus.Register[] - Determines what data from the motor will be published to ROS - - """ - toPublisherQueue = Queue() - - # Create motor - motor = moteus_motor.MoteusMotor( - canID, - name, - motorMode, - moteusPubList, - self._queueToMoteus, - toPublisherQueue, - self._rosNode - ) - - # Create motor data - motorData = _MotorData() - motorData.canID = canID - motorData.mode = motorMode - motorData.toPublisherQueue = toPublisherQueue - motorData.moteusPubList = moteusPubList - - # Add this to the map - self._canIDToMotorData[canID] = motorData - - - # Multiprocess realm - - def start(self): - """ - Starts the multiprocess. Call this after you added all the motors - """ - moteusAsyncProcess = Process(target=self._startLoop, args=(self._queueToMoteus,)) - moteusAsyncProcess.start() - - - def _startLoop(self,queueToMoteus): - """ - This is now inside the multiprocess. Do any setup here - that does not depend on asyncio - - Parameters - ---------- - queueToMoteus : Queue - This queue is what the multiprocess will read from to update - its internal data for each motor - """ - asyncio.run(self._loop(queueToMoteus)) - - - async def _loop(self,queueToMoteus): - """ - Connect to the motors and start the loop. For each - motor, call the correct moteus method and send - the correct data - - Parameters - ---------- - queueToMoteus : Queue - This queue is what the multiprocess will read from to update - its internal data for each motor - """ - - - await self._connectToMoteusControllers() - - while True: - self._readqueueToMoteus(queueToMoteus) - - for canID in self._canIDToMotorData: - motorData = self._canIDToMotorData[canID] - - if (motorData.mode == moteus_motor.Mode.POSITION): - resultFromMoteus = await motorData.moteusController.set_position(position=motorData.data, query=True) - elif (motorData.mode == moteus_motor.Mode.VELOCITY): - # moteus controllers will only go a velocity only if it - # has reached its given position OR we give it math.nan - resultFromMoteus = await motorData.moteusController.set_position(position=math.nan, velocity=motorData.data, query=True) - - self._sendDataToMotor(canID, resultFromMoteus) - - - - await asyncio.sleep(0.02) - - - - def _sendDataToMotor(self, canID, moteusResult): - """ - Send the requested data for the specified motor via its canID - - Parameters - ---------- - canID : int - The canID for the motor - moteusResult : moteus.Result - The data returned from the moteus motor - """ - - # Get the motor from the can ID - motorData = self._canIDToMotorData[canID] - - # Goe through all the registers we want to publish - for register in motorData.moteusPubList: - dataToMotor = [register, moteusResult.values[register]] - - motorData.toPublisherQueue.put(dataToMotor) - - - def _readqueueToMoteus(self,queueToMoteus): - """ - Reads one value from the queue to the moteus multiprocess - - Process - ------- - queueToMoteus : Queue - The queue that every motor will send their data to - - """ - - - if not queueToMoteus.empty(): - dataRecieved = queueToMoteus.get() - canID = dataRecieved[0] # is the canID of the motor - data = dataRecieved[1] # is a floating point data - - motorData = self._canIDToMotorData[canID] - motorData.data = data - - - async def _connectToMoteusControllers(self): - """ - Attempts to connect to every moteus controller. - If an attempt fails, it is removed from the dictionary - - - """ - - for canID in list(self._canIDToMotorData): - motorData = self._canIDToMotorData[canID] - - moteusMotorController = moteus.Controller(motorData.canID) - - try: - # Reset the controller - await moteusMotorController.set_stop() - motorData.moteusController = moteusMotorController - - except RuntimeError as error: - self._rosNode.get_logger().error( - "FAILED TO CONNECT TO MOTEUS CONTROLLER WITH CAN ID " + str(motorData.canID)) - self._rosNode.get_logger().error(error.__str__()) - - del self._canIDToMotorData[canID] diff --git a/src/can_moteus/can_moteus/moteus_thread_manager.py b/src/can_moteus/can_moteus/moteus_thread_manager.py new file mode 100644 index 0000000..96ac3a8 --- /dev/null +++ b/src/can_moteus/can_moteus/moteus_thread_manager.py @@ -0,0 +1,260 @@ +import asyncio +import threading + +import moteus +from moteus.moteus import Result +from rclpy.node import Node + +from lib.color_codes import ColorCodes, colorStr +from lib.configs import MoteusMotorConfig + +from .moteus_motor import MoteusMotor + + +class MoteusThreadManager: + CONNECTION_TIMEOUT_IN_SECONDS = 0.1 + GENERAL_TIMEOUT = 0.05 + + """ + This creates a new thread called "moteus_thread" to run all + of the asyncio methods required by the Moteus library + """ + + def __init__(self, ros_node: Node): + self._id_to_moteus_motor: dict[int, MoteusMotor] = {} + self._id_to_moteus_controller: dict[int, moteus.Controller] = {} # Used by the thread + self._ros_node = ros_node + self._moteus_thread: threading.Thread | None = None + self._should_moteus_thread_loop = True # No thread safety, but it works lololol + self._should_reconnect = True # No thread safety, but it works lololol + + def addMotor(self, config: MoteusMotorConfig) -> None: + """ + Adds a motor to the list to attempt to connect to it. + """ + if self._moteus_thread is not None: + self._ros_node.get_logger().error("Attempted to add motor after thread was started!") + return + + # Create motor + motor = MoteusMotor(config, self._ros_node) + self._id_to_moteus_motor[config.can_id] = motor + + def start(self) -> None: + """ + Starts a new thread. New motors cannot be added after this is called + """ + + self._moteus_thread = threading.Thread( + target=self.threadEntry, name="moteus_thread", daemon=True + ) + self._moteus_thread.start() + + def reconnectMotors(self) -> None: + self._should_reconnect = True + + def terminateAllThreads(self) -> None: + """ + Gracefully shuts down the motors by calling set_stop(). + Terminates the thread. + Does not clean up this class + """ + self._should_moteus_thread_loop = False + if self._moteus_thread is not None: + self._moteus_thread.join() + + def threadEntry(self) -> None: + """ + The entry of the thread that launches the asyncio loop + """ + self._ros_node.get_logger().info(colorStr("Moteus Thread Launched", ColorCodes.BLUE_OK)) + asyncio.run(self.startLoop()) + + async def tryToShutdownMotor(self, can_id: int) -> None: + self._ros_node.get_logger().info( + colorStr(f"Unexpectedly trying to turn off motor: {can_id}", ColorCodes.WARNING_YELLOW) + ) + + try: + await asyncio.wait_for( + self._id_to_moteus_controller[can_id].set_stop(), + timeout=self.GENERAL_TIMEOUT, + ) + self._ros_node.get_logger().info( + colorStr(f"Stopped motor: {can_id}", ColorCodes.GREEN_OK) + ) + except asyncio.TimeoutError: + self._ros_node.get_logger().info( + colorStr(f'FAILED TO "set_stop" MOTOR. TIMED OUT {can_id}', ColorCodes.FAIL_RED) + ) + del self._id_to_moteus_controller[can_id] + del self._id_to_moteus_motor[can_id] + except RuntimeError as error: + self._ros_node.get_logger().info(colorStr(str(error), ColorCodes.FAIL_RED)) + del self._id_to_moteus_controller[can_id] + del self._id_to_moteus_motor[can_id] + + async def startLoop(self) -> None: + """ + The main loop of the whole system. + Reads/sends data to/from the Moteus controllers. + + This can handle the following edge cases + ---------- + 1) Motor faults + A) set_stop() the motor or + B) Remove the motor from the list of motors + 2) CAN Bus disconnection + A) Remove the motor from the list of motors + 3) Reconnect to Moteus Controllers + + + """ + # Connect the motor for the first time + await self.connectToMoteusControllers() + + while self._should_moteus_thread_loop: + if self._should_reconnect: + await self.connectToMoteusControllers() + + # Go through each Moteus Controller to send data + for can_id, controller in self._id_to_moteus_controller.copy().items(): + motor = self._id_to_moteus_motor[can_id] + + try: + # Check for faults + result_from_moteus: Result = await asyncio.wait_for( + controller.query(), self.GENERAL_TIMEOUT + ) + + if result_from_moteus.values[moteus.Register.FAULT] != 0: + self._ros_node.get_logger().info( + colorStr( + f"FAULT CODE: {result_from_moteus.values[moteus.Register.FAULT]} " + f"FOR {motor.config.can_id}", + ColorCodes.FAIL_RED, + ) + ) + await self.tryToShutdownMotor(can_id) + continue + + if motor.run_settings.set_stop is True: + await asyncio.wait_for(controller.set_stop(), self.GENERAL_TIMEOUT) + + else: + result_from_moteus = await asyncio.wait_for( + controller.set_position( + position=motor.run_settings.position, + velocity=motor.run_settings.velocity, + feedforward_torque=motor.run_settings.feedforward_torque, + kp_scale=motor.run_settings.kp_scale, + kd_scale=motor.run_settings.kd_scale, + maximum_torque=motor.run_settings.max_torque, + watchdog_timeout=motor.run_settings.watchdog_timeout, + velocity_limit=motor.run_settings.velocity_limit, + accel_limit=motor.run_settings.accel_limit, + fixed_voltage_override=motor.run_settings.fixed_voltage_override, + query=True, + ), + self.GENERAL_TIMEOUT, + ) + + motor.publishData(result_from_moteus) + + except asyncio.TimeoutError: + self._ros_node.get_logger().info( + colorStr( + f"FAILED TO SEND/READ DATA TO MOTEUS MOTOR: {can_id} " + + "CAN-FD bus disconnected?", + ColorCodes.FAIL_RED, + ), + ) + del self._id_to_moteus_controller[can_id] + del self._id_to_moteus_motor[can_id] + + await asyncio.sleep(0.02) + + # When we exit the while loop, via ctrl-c, we set_stop() all the motors + # Watch out for the arm + for can_id, controller in self._id_to_moteus_controller.items(): + await controller.set_stop() + + async def connectToMoteusControllers(self) -> None: + """ + Connect to the Moteus motors. + There is a timeout until we give up trying to connect + """ + self._id_to_moteus_controller = {} + self._should_reconnect = False + + for can_id, motor in self._id_to_moteus_motor.items(): + qr = moteus.QueryResolution() + qr.power = moteus.F32 + qr.q_current = moteus.F32 + qr.d_current = moteus.F32 + controller = moteus.Controller(motor.config.can_id, query_resolution=qr) + + try: + # Reset the controller + self._ros_node.get_logger().info("Connecting to motor with id: " + str(can_id)) + await asyncio.wait_for( + controller.query(), timeout=self.CONNECTION_TIMEOUT_IN_SECONDS + ) # Try to get data, if timeout then cannot connect + self._id_to_moteus_controller[can_id] = controller + await controller.set_stop() + self._ros_node.get_logger().info( + colorStr( + f"Moteus motor controller connected: {motor.config.can_id}", + ColorCodes.GREEN_OK, + ) + ) + + except asyncio.TimeoutError: + self._ros_node.get_logger().info( + colorStr( + "FAILED TO CONNECT TO MOTEUS CONTROLLER WITH CANID " + + str(motor.config.can_id), + ColorCodes.FAIL_RED, + ) + ) + continue + except RuntimeError as error: + self._ros_node.get_logger().info( + colorStr( + "ERROR WHEN set_stop() IS CALLED. MOST LIKELY CANNOT FIND CANBUS", + ColorCodes.FAIL_RED, + ) + ) + self._ros_node.get_logger().info( + colorStr(str(error.with_traceback(None)), ColorCodes.FAIL_RED) + ) + continue + + stream = moteus.Stream(controller, verbose=True) + try: + await asyncio.wait_for( + stream.command("conf load".encode(encoding="utf-8")), + timeout=self.CONNECTION_TIMEOUT_IN_SECONDS + ) + for key, value in motor.config.config.items(): + if key == "id.id": + continue + await asyncio.wait_for( + stream.command(f"conf set {key} {value}".encode(encoding="utf-8")), + timeout=self.CONNECTION_TIMEOUT_IN_SECONDS + ) + except asyncio.TimeoutError: + self._ros_node.get_logger().info( + colorStr( + "FAILED TO SET CONFIG ON MOTOR: " + + str(motor.config.can_id), + ColorCodes.FAIL_RED, + ) + ) + except RuntimeError as error: + self._ros_node.get_logger().info( + colorStr("ERROR WHEN SETTING CONFIG.", ColorCodes.FAIL_RED) + ) + self._ros_node.get_logger().info( + colorStr(str(error.with_traceback(None)), ColorCodes.FAIL_RED) + ) diff --git a/src/can_moteus/can_moteus/ros_moteus_bridge.py b/src/can_moteus/can_moteus/ros_moteus_bridge.py old mode 100755 new mode 100644 index 18457e1..595a279 --- a/src/can_moteus/can_moteus/ros_moteus_bridge.py +++ b/src/can_moteus/can_moteus/ros_moteus_bridge.py @@ -1,64 +1,106 @@ +import sys + import rclpy -from . import moteus_motor -from . import moteus_multiprocess +from rclpy.executors import ExternalShutdownException from rclpy.node import Node -import moteus -from multiprocessing import Queue - - -class RosMotuesBridge(Node): - - def __init__(self): - super().__init__("can_motues_node") - self.get_logger().info("Launching can_motues node") - self.createMoteusMotors() - - def createMoteusMotors(self): - self.get_logger().info("Creating motors") - - - moteusMultiprocess = moteus_multiprocess.MoteusMultiprocess(self) - +from std_msgs.msg import Float32 +from usb.core import find as finddev - #EXAMPLES - # moteusPubList = [moteus.Register.VELOCITY] - # moteusMultiprocess.addMotor( - # 3, - # "topmotor", - # moteus_motor.Mode.VELOCITY, - # moteusPubList, - # ) +from lib.color_codes import ColorCodes, colorStr +from lib.configs import MotorConfigs - # moteusPubList2 = [moteus.Register.POSITION] - # moteusMultiprocess.addMotor( - # 2, - # "middlemotor", - # moteus_motor.Mode.POSITION, - # moteusPubList2, - # ) +from . import moteus_thread_manager - # moteusPubList3 = [moteus.Register.POSITION] - # moteusMultiprocess.addMotor( - # 1, - # "bottommotor", - # moteus_motor.Mode.POSITION, - # moteusPubList3, - # ) - - - - - - - moteusMultiprocess.start() +class RosMotuesBridge(Node): + """ + This is the node that connects the Moteus Motor Controllers + with the rest of the ROS codebase. You can easily add new + motors using the addMotor() function from the self.threadManager. + + You can attempt to reconnect to the Moteus Controllers during runtime. + The CANFD-USB is reset every time the code is execute from the ./launch.sh + """ + + def __init__(self) -> None: + super().__init__("can_moteus_node") + self.get_logger().info(colorStr("Launching can_moteus node", ColorCodes.BLUE_OK)) + + # Reset the CANFD-USB + # run "lsusb" in cmd with the CANFD-USB connected + # to find the idVendor and the idProduct + dev = finddev(idVendor=0x0483, idProduct=0x5740) + + if dev is not None: + dev.reset() + self.thread_manager: moteus_thread_manager.MoteusThreadManager | None = None + + self.reconnect_to_moteus_sub = self.create_subscription( + Float32, "reconnectMoteusControllers", self.reconnect, 1 + ) + + self.createMoteusMotors() + else: + self.get_logger().info( + colorStr( + "Failed to find CANFD-USB usb device. Is it plugged in?", ColorCodes.FAIL_RED + ) + ) + + def reconnect(self, _: Float32) -> None: + """ + Gracefully shuts down the threadManager and creates a new instance of + the threadManager object. + + """ + self.get_logger().info("Reconnecting") + if self.thread_manager is not None: + self.thread_manager.reconnectMotors() + + def createMoteusMotors(self) -> None: + """ + Creates the threadManager and adds all the moteus motors + """ + + self.thread_manager = moteus_thread_manager.MoteusThreadManager(self) + + # Drivebase + self.thread_manager.addMotor(MotorConfigs.REAR_RIGHT_DRIVE_MOTOR) + self.thread_manager.addMotor(MotorConfigs.MID_RIGHT_DRIVE_MOTOR) + self.thread_manager.addMotor(MotorConfigs.FRONT_RIGHT_DRIVE_MOTOR) + self.thread_manager.addMotor(MotorConfigs.REAR_LEFT_DRIVE_MOTOR) + self.thread_manager.addMotor(MotorConfigs.MID_LEFT_DRIVE_MOTOR) + self.thread_manager.addMotor(MotorConfigs.FRONT_LEFT_DRIVE_MOTOR) + + # Arm + self.thread_manager.addMotor(MotorConfigs.ARM_TURNTABLE_MOTOR) + self.thread_manager.addMotor(MotorConfigs.ARM_SHOULDER_MOTOR) + self.thread_manager.addMotor(MotorConfigs.ARM_ELBOW_MOTOR) + self.thread_manager.addMotor(MotorConfigs.ARM_LEFT_WRIST_MOTOR) + self.thread_manager.addMotor(MotorConfigs.ARM_RIGHT_WRIST_MOTOR) + + self.thread_manager.start() + + +def main(args: list[str] | None = None) -> None: + """ + The entry point of the node. + """ -def main(args=None): rclpy.init(args=args) - node = RosMotuesBridge() - rclpy.spin(node) - node.destroy_node() - rclpy.shutdown() + try: + node = RosMotuesBridge() + rclpy.spin(node) + + except KeyboardInterrupt: + pass + except ExternalShutdownException: + # This is done when we ctrl-c the progam to shut it down + node.get_logger().info(colorStr("Shutting down can_moteus", ColorCodes.BLUE_OK)) + if node.thread_manager is not None: + node.thread_manager.terminateAllThreads() + node.destroy_node() + sys.exit(0) if __name__ == "__main__": diff --git a/src/can_moteus/setup.py b/src/can_moteus/setup.py index 05a9844..38aceb4 100644 --- a/src/can_moteus/setup.py +++ b/src/can_moteus/setup.py @@ -1,31 +1,27 @@ import os from glob import glob + from setuptools import setup -package_name = 'can_moteus' +package_name = "can_moteus" setup( name=package_name, - version='0.0.0', + version="0.0.0", packages=[package_name], data_files=[ - ('share/ament_index/resource_index/packages', - ['resource/' + package_name]), - ('share/' + package_name, ['package.xml']), - (os.path.join('share', package_name), glob('launch/*launch.[pxy][yma]*')) + ("share/ament_index/resource_index/packages", ["resource/" + package_name]), + ("share/" + package_name, ["package.xml"]), + (os.path.join("share", package_name), glob("launch/*launch.[pxy][yma]*")), ], - install_requires=['setuptools'], + install_requires=["setuptools"], zip_safe=True, - maintainer='trickfire', - maintainer_email='trickfire@todo.todo', - description='TODO: Package description', - license='TODO: License declaration', - tests_require=['pytest'], + maintainer="trickfire", + maintainer_email="trickfire@todo.todo", + description="TODO: Package description", + license="TODO: License declaration", + tests_require=["pytest"], entry_points={ - 'console_scripts': [ - 'can_moteus = can_moteus.ros_moteus_bridge:main' - ], - + "console_scripts": ["can_moteus = can_moteus.ros_moteus_bridge:main"], }, - ) diff --git a/src/can_moteus/test/test_copyright.py b/src/can_moteus/test/test_copyright.py index 97a3919..60c2d1e 100644 --- a/src/can_moteus/test/test_copyright.py +++ b/src/can_moteus/test/test_copyright.py @@ -12,14 +12,14 @@ # See the License for the specific language governing permissions and # limitations under the License. -from ament_copyright.main import main import pytest +from ament_copyright.main import main # Remove the `skip` decorator once the source file(s) have a copyright header -@pytest.mark.skip(reason='No copyright header has been placed in the generated source file.') +@pytest.mark.skip(reason="No copyright header has been placed in the generated source file.") @pytest.mark.copyright @pytest.mark.linter def test_copyright(): - rc = main(argv=['.', 'test']) - assert rc == 0, 'Found errors' + rc = main(argv=[".", "test"]) + assert rc == 0, "Found errors" diff --git a/src/can_moteus/test/test_flake8.py b/src/can_moteus/test/test_flake8.py deleted file mode 100644 index 27ee107..0000000 --- a/src/can_moteus/test/test_flake8.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2017 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_flake8.main import main_with_errors -import pytest - - -@pytest.mark.flake8 -@pytest.mark.linter -def test_flake8(): - rc, errors = main_with_errors(argv=[]) - assert rc == 0, \ - 'Found %d code style errors / warnings:\n' % len(errors) + \ - '\n'.join(errors) diff --git a/src/can_moteus/test/test_pep257.py b/src/can_moteus/test/test_pep257.py deleted file mode 100644 index b234a38..0000000 --- a/src/can_moteus/test/test_pep257.py +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright 2015 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_pep257.main import main -import pytest - - -@pytest.mark.linter -@pytest.mark.pep257 -def test_pep257(): - rc = main(argv=['.', 'test']) - assert rc == 0, 'Found code style errors / warnings' diff --git a/src/communication/CMakeLists.txt b/src/communication/CMakeLists.txt deleted file mode 100644 index f235dca..0000000 --- a/src/communication/CMakeLists.txt +++ /dev/null @@ -1,34 +0,0 @@ -cmake_minimum_required(VERSION 3.8) -project(communication) - -if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") - add_compile_options(-Wall -Wextra -Wpedantic) -endif() - -# find dependencies -find_package(ament_cmake REQUIRED) -# uncomment the following section in order to fill in -# further dependencies manually. -# find_package( REQUIRED) - -add_executable(my_node src/my_node.cpp) -target_include_directories(my_node PUBLIC - $ - $) -target_compile_features(my_node PUBLIC c_std_99 cxx_std_17) # Require C99 and C++17 - -install(TARGETS my_node - DESTINATION lib/${PROJECT_NAME}) - -if(BUILD_TESTING) - find_package(ament_lint_auto REQUIRED) - # the following line skips the linter which checks for copyrights - # uncomment the line when a copyright and license is not present in all source files - #set(ament_cmake_copyright_FOUND TRUE) - # the following line skips cpplint (only works in a git repo) - # uncomment the line when this package is not in a git repo - #set(ament_cmake_cpplint_FOUND TRUE) - ament_lint_auto_find_test_dependencies() -endif() - -ament_package() diff --git a/src/communication/package.xml b/src/communication/package.xml deleted file mode 100644 index a042f1a..0000000 --- a/src/communication/package.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - communication - 0.0.0 - TODO: Package description - trickfire - TODO: License declaration - - ament_cmake - - ament_lint_auto - ament_lint_common - - - ament_cmake - - diff --git a/src/communication/src/my_node.cpp b/src/communication/src/my_node.cpp deleted file mode 100644 index 158606b..0000000 --- a/src/communication/src/my_node.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include - -int main(int argc, char ** argv) -{ - (void) argc; - (void) argv; - - printf("hello world communication package\n"); - return 0; -} diff --git a/src/arm/CMakeLists.txt b/src/custom_interfaces/CMakeLists.txt similarity index 52% rename from src/arm/CMakeLists.txt rename to src/custom_interfaces/CMakeLists.txt index 05489da..9d3734e 100644 --- a/src/arm/CMakeLists.txt +++ b/src/custom_interfaces/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.8) -project(arm) +project(custom_interfaces) if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") add_compile_options(-Wall -Wextra -Wpedantic) @@ -11,23 +11,21 @@ find_package(ament_cmake REQUIRED) # further dependencies manually. # find_package( REQUIRED) -add_executable(my_node src/my_node.cpp) -target_include_directories(my_node PUBLIC - $ - $) -target_compile_features(my_node PUBLIC c_std_99 cxx_std_17) # Require C99 and C++17 +find_package(rosidl_default_generators REQUIRED) -install(TARGETS my_node - DESTINATION lib/${PROJECT_NAME}) +rosidl_generate_interfaces(${PROJECT_NAME} + "srv/ArmMode.srv" + ) if(BUILD_TESTING) find_package(ament_lint_auto REQUIRED) # the following line skips the linter which checks for copyrights - # uncomment the line when a copyright and license is not present in all source files - #set(ament_cmake_copyright_FOUND TRUE) + # comment the line when a copyright and license is added to all source files + set(ament_cmake_copyright_FOUND TRUE) # the following line skips cpplint (only works in a git repo) - # uncomment the line when this package is not in a git repo - #set(ament_cmake_cpplint_FOUND TRUE) + # comment the line when this package is in a git repo and when + # a copyright and license is added to all source files + set(ament_cmake_cpplint_FOUND TRUE) ament_lint_auto_find_test_dependencies() endif() diff --git a/src/hello_world/package.xml b/src/custom_interfaces/package.xml similarity index 64% rename from src/hello_world/package.xml rename to src/custom_interfaces/package.xml index 907826d..53deff3 100644 --- a/src/hello_world/package.xml +++ b/src/custom_interfaces/package.xml @@ -1,16 +1,19 @@ - hello_world + custom_interfaces 0.0.0 TODO: Package description - trickfire + trickfire TODO: License declaration ament_cmake - rclcpp - rclcpp_components + rosidl_default_generators + + rosidl_default_runtime + + rosidl_interface_packages ament_lint_auto ament_lint_common diff --git a/src/custom_interfaces/srv/ArmMode.srv b/src/custom_interfaces/srv/ArmMode.srv new file mode 100644 index 0000000..688524b --- /dev/null +++ b/src/custom_interfaces/srv/ArmMode.srv @@ -0,0 +1,3 @@ +int64 input +--- +int64 current_mode \ No newline at end of file diff --git a/src/drivebase/drivebase/drivebase.py b/src/drivebase/drivebase/drivebase.py index c4c7df7..a9a2321 100644 --- a/src/drivebase/drivebase/drivebase.py +++ b/src/drivebase/drivebase/drivebase.py @@ -1,6 +1,66 @@ -def main(): - print('Hi from drivebase.') +import sys +import rclpy +from rclpy.executors import ExternalShutdownException +from rclpy.node import Node +from std_msgs.msg import Float32 -if __name__ == '__main__': +from lib.color_codes import ColorCodes, colorStr +from lib.configs import MotorConfigs +from lib.interface.robot_interface import RobotInterface + + +class Drivebase(Node): + SPEED = 6.28 * 1.5 + + def __init__(self) -> None: + super().__init__("drivebase") + self.get_logger().info(colorStr("Launching drivebase node", ColorCodes.BLUE_OK)) + self.bot_interface = RobotInterface(self) + + self.left_subscription = self.create_subscription( + Float32, "move_left_drivebase_side_message", self.moveLeftSide, 10 + ) + self.right_subscription = self.create_subscription( + Float32, "move_right_drivebase_side_message", self.moveRightSide, 10 + ) + + def moveLeftSide(self, msg: Float32) -> None: + vel = msg.data * self.SPEED + self.bot_interface.runMotorSpeed(MotorConfigs.FRONT_LEFT_DRIVE_MOTOR, -vel) + self.bot_interface.runMotorSpeed(MotorConfigs.MID_LEFT_DRIVE_MOTOR, -vel) + self.bot_interface.runMotorSpeed(MotorConfigs.REAR_LEFT_DRIVE_MOTOR, -vel) + + def moveRightSide(self, msg: Float32) -> None: + vel = msg.data * self.SPEED + self.bot_interface.runMotorSpeed(MotorConfigs.FRONT_RIGHT_DRIVE_MOTOR, vel) + self.bot_interface.runMotorSpeed(MotorConfigs.MID_RIGHT_DRIVE_MOTOR, vel) + self.bot_interface.runMotorSpeed(MotorConfigs.REAR_RIGHT_DRIVE_MOTOR, vel) + + def turnLeft(self, msg: Float32) -> None: + self.moveLeftSide(msg) + self.moveRightSide(-msg) + + def turnRight(self, msg: Float32) -> None: + self.moveLeftSide(-msg) + self.moveRightSide(msg) + + +def main(args: list[str] | None = None) -> None: + rclpy.init(args=args) + try: + drivebase = Drivebase() + rclpy.spin(drivebase) # prints callbacks + except KeyboardInterrupt: + pass + except ExternalShutdownException: + # Destroy the node explicitly + # (optional - otherwise it will be done automatically + # when the garbage collector destroys the node object) + drivebase.get_logger().info(colorStr("Shutting down drivebase", ColorCodes.BLUE_OK)) + drivebase.destroy_node() + sys.exit(0) + + +if __name__ == "__main__": main() diff --git a/src/drivebase/package.xml b/src/drivebase/package.xml index fde8555..474fac5 100644 --- a/src/drivebase/package.xml +++ b/src/drivebase/package.xml @@ -3,8 +3,8 @@ drivebase 0.0.0 - TODO: Package description - trickfire + Connects the controller to the wheel motors + trickfire TODO: License declaration ament_copyright diff --git a/src/drivebase/setup.py b/src/drivebase/setup.py index 39fe297..36d76aa 100644 --- a/src/drivebase/setup.py +++ b/src/drivebase/setup.py @@ -1,26 +1,23 @@ from setuptools import setup -package_name = 'drivebase' +package_name = "drivebase" setup( name=package_name, - version='0.0.0', + version="0.0.0", packages=[package_name], data_files=[ - ('share/ament_index/resource_index/packages', - ['resource/' + package_name]), - ('share/' + package_name, ['package.xml']), + ("share/ament_index/resource_index/packages", ["resource/" + package_name]), + ("share/" + package_name, ["package.xml"]), ], - install_requires=['setuptools'], + install_requires=["setuptools"], zip_safe=True, - maintainer='trickfire', - maintainer_email='aimeilicke@gmail.com', - description='TODO: Package description', - license='TODO: License declaration', - tests_require=['pytest'], + maintainer="trickfire", + maintainer_email="cklay@uw.edu", + description="Connects the controller to the wheel motors", + license="TODO: License declaration", + tests_require=["pytest"], entry_points={ - 'console_scripts': [ - 'drivebase = drivebase.drivebase:main' - ], + "console_scripts": ["drivebase = drivebase.drivebase:main"], }, ) diff --git a/src/drivebase/test/test_copyright.py b/src/drivebase/test/test_copyright.py index cc8ff03..f46f861 100644 --- a/src/drivebase/test/test_copyright.py +++ b/src/drivebase/test/test_copyright.py @@ -19,5 +19,5 @@ @pytest.mark.copyright @pytest.mark.linter def test_copyright(): - rc = main(argv=['.', 'test']) - assert rc == 0, 'Found errors' + rc = main(argv=[".", "test"]) + assert rc == 0, "Found errors" diff --git a/src/drivebase/test/test_flake8.py b/src/drivebase/test/test_flake8.py deleted file mode 100644 index 27ee107..0000000 --- a/src/drivebase/test/test_flake8.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2017 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_flake8.main import main_with_errors -import pytest - - -@pytest.mark.flake8 -@pytest.mark.linter -def test_flake8(): - rc, errors = main_with_errors(argv=[]) - assert rc == 0, \ - 'Found %d code style errors / warnings:\n' % len(errors) + \ - '\n'.join(errors) diff --git a/src/drivebase/test/test_pep257.py b/src/drivebase/test/test_pep257.py deleted file mode 100644 index b234a38..0000000 --- a/src/drivebase/test/test_pep257.py +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright 2015 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_pep257.main import main -import pytest - - -@pytest.mark.linter -@pytest.mark.pep257 -def test_pep257(): - rc = main(argv=['.', 'test']) - assert rc == 0, 'Found code style errors / warnings' diff --git a/src/life_detection/life_detection/__init__.py b/src/example_node/example_node/__init__.py similarity index 100% rename from src/life_detection/life_detection/__init__.py rename to src/example_node/example_node/__init__.py diff --git a/src/example_node/example_node/example.py b/src/example_node/example_node/example.py new file mode 100644 index 0000000..00f4970 --- /dev/null +++ b/src/example_node/example_node/example.py @@ -0,0 +1,89 @@ +import sys + + +import rclpy # Import the package +from rclpy.executors import ExternalShutdownException +from rclpy.node import Node + +from std_msgs.msg import String + +from lib.color_codes import ColorCodes, colorStr # Import yummy colors +from lib.interface.robot_info import RobotInfo # Read data +from lib.configs import MotorConfigs +from lib.interface.robot_interface import RobotInterface # Send data + + +class ExampleNode(Node): + + def __init__(self) -> None: + # Call the parent's constructor and pass in the node's name + super().__init__("my_example_node") + + # Print to the console with the color blue. Regular print() does not work + self.get_logger().info(colorStr("Launching example_node node", ColorCodes.BLUE_OK)) + + self.robotInfo = RobotInfo(self) + self.robotInterface = RobotInterface(self) + + self.drivebaseSpeedInRadians = 6.28 # 6.28 rad/sec = 1.0 rev/sec + + # --- ROS TIMER EXAMPLE --- + # Half a second delay between the calls to the method timer_callback() + self.create_timer(0.5, self.timer_callback) + + # --- SUBSCRIBER EXAMPLE --- + self.example_sub = self.create_subscription( + String, "example_topic", self.example_sub_callback, 10 + ) + + # --- PUBLISHER EXAMPLE --- + self.example_pub = self.create_publisher(String, "example_topic", 10) + self.example_pub_timer = self.create_timer(1.0, self.publishData) + + def timer_callback(self) -> None: + # Tell the motor to move at a speed. We skip having to create a run config + # Take a look at the runMotor() to see the config + # In this case, runMotorSpeed() takes speed as in input in radians per second + self.robotInterface.runMotorSpeed( + MotorConfigs.FRONT_LEFT_DRIVE_MOTOR, self.drivebaseSpeedInRadians + ) + + # Get the motor's position + motorPosition = self.robotInfo.getMotorState(MotorConfigs.FRONT_LEFT_DRIVE_MOTOR).position + + self.get_logger().info( + "Example timer callback called with motor position " + str(motorPosition) + ) + + def example_sub_callback(self, msg: String) -> None: + contents = msg.data + self.get_logger().info("Example Subscriber Callback got the data: " + str(contents)) + + def publishData(self) -> None: + contents = "Hello this is data from example_topic" + msg = String() # Create the message + msg.data = contents # Fill in the payload + self.example_pub.publish(msg) + + +def main(args: list[str] | None = None) -> None: + rclpy.init(args=args) + try: + # Create a new instance of our class + example = ExampleNode() + + # Have ROS spin this node, meaning that this object will continuously + # be part of the ROS event loop and such. + rclpy.spin(example) + except KeyboardInterrupt: # Detects ctrl-c + pass + except ExternalShutdownException: + # If needed, we could call methods from the instance we made + # in order to shut somethings down before destroying the node + example.get_logger().info(colorStr("Shutting down example_node node", ColorCodes.BLUE_OK)) + example.destroy_node() + sys.exit(0) + + +if __name__ == "__main__": + main() diff --git a/src/life_detection/package.xml b/src/example_node/package.xml similarity index 84% rename from src/life_detection/package.xml rename to src/example_node/package.xml index 8408c6f..ff37b33 100644 --- a/src/life_detection/package.xml +++ b/src/example_node/package.xml @@ -1,10 +1,10 @@ - life_detection + example_node 0.0.0 TODO: Package description - trickfire + trickfire TODO: License declaration ament_copyright diff --git a/src/life_detection/resource/life_detection b/src/example_node/resource/example_node similarity index 100% rename from src/life_detection/resource/life_detection rename to src/example_node/resource/example_node diff --git a/src/example_node/setup.cfg b/src/example_node/setup.cfg new file mode 100644 index 0000000..59dbc8a --- /dev/null +++ b/src/example_node/setup.cfg @@ -0,0 +1,4 @@ +[develop] +script_dir=$base/lib/example_node +[install] +install_scripts=$base/lib/example_node diff --git a/src/executor_test/setup.py b/src/example_node/setup.py similarity index 73% rename from src/executor_test/setup.py rename to src/example_node/setup.py index 81d6d04..571f53b 100644 --- a/src/executor_test/setup.py +++ b/src/example_node/setup.py @@ -1,6 +1,6 @@ from setuptools import find_packages, setup -package_name = 'executor_test' +package_name = 'example_node' setup( name=package_name, @@ -13,13 +13,12 @@ ], install_requires=['setuptools'], zip_safe=True, - maintainer='root', - maintainer_email='root@todo.todo', + maintainer='trickfire', + maintainer_email='vladimirkupryukhin@gmail.com', description='TODO: Package description', license='TODO: License declaration', tests_require=['pytest'], entry_points={ - 'console_scripts': [ - ], + 'console_scripts': ["myExampleNode = example_node.example:main"], }, ) diff --git a/src/executor_test/test/test_copyright.py b/src/example_node/test/test_copyright.py similarity index 100% rename from src/executor_test/test/test_copyright.py rename to src/example_node/test/test_copyright.py diff --git a/src/executor_test/executor_test/executor_test.py b/src/executor_test/executor_test/executor_test.py deleted file mode 100644 index 023355d..0000000 --- a/src/executor_test/executor_test/executor_test.py +++ /dev/null @@ -1,23 +0,0 @@ -from .utils import CameraExecutor, CameraNode -import rclpy - -def main(args=None): - rclpy.init(args=args) - try: - node1 = CameraNode(0) - node2 = CameraNode(1) - - executor = CameraExecutor() - executor.add_node(node1) - executor.add_node(node2) - try: - executor.spin() - finally: - executor.shutdown() - node1.destroy_node() - node2.destroy_node() - finally: - rclpy.shutdown() - -if __name__ == '__main__': - main() \ No newline at end of file diff --git a/src/executor_test/executor_test/utils.py b/src/executor_test/executor_test/utils.py deleted file mode 100644 index 801913d..0000000 --- a/src/executor_test/executor_test/utils.py +++ /dev/null @@ -1,51 +0,0 @@ -from rclpy.executors import Executor -from concurrent.futures import ThreadPoolExecutor -from rclpy.node import Node -from std_msgs.msg import String -import os - -""" -This class is useful for the camera service and topics. -Service to shut down topics should be put as the priority node -and all camera publishers should be low priority. -Service gets its own thread and publishers get more -""" -class CameraExecutor(Executor): - def __init__(self): - super().__init__() - self.high_priority_nodes = set() - self.hp_executor = ThreadPoolExecutor(max_workers = 1) - self.lp_executor = ThreadPoolExecutor(max_workers = os.cpu_count() or 4) - - def add_hp_node(self, node): - self.high_priority_nodes.add(node) - self.add_node(node) # inherited - - # Function override. - # Executes the callbacks - def spin_once(self, timeout_sec=None): - try: - handler, group, node = self.wait_for_ready_callbacks(timeout_sec=timeout_sec) - except StopIteration: - pass - else: - if node in self.high_priority_nodes: - self.hp_executor.submit(handler) - else: - self.lp_executor.submit(handler) - - -class CameraNode(Node): - def __init__(self, topic_id: int): - super().__init_("executor_camera_test_node") - - self.i = 0 - self.pub = self.create_publisher(String, '/exec_frames' + str(topic_id) + 10) - - self.timer = self.create_timer(2, self.timer_callback) - - def timer_callback(self): - msg = String() - msg.data = "Hello World: {0}".format(self.i) - self.i += 1 - self.pub.publish(msg) \ No newline at end of file diff --git a/src/executor_test/package.xml b/src/executor_test/package.xml deleted file mode 100644 index 763128e..0000000 --- a/src/executor_test/package.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - executor_test - 0.0.0 - TODO: Package description - root - TODO: License declaration - - ament_copyright - ament_flake8 - ament_pep257 - python3-pytest - - - ament_python - - diff --git a/src/executor_test/setup.cfg b/src/executor_test/setup.cfg deleted file mode 100644 index a6ba7b9..0000000 --- a/src/executor_test/setup.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[develop] -script_dir=$base/lib/executor_test -[install] -install_scripts=$base/lib/executor_test diff --git a/src/executor_test/test/test_flake8.py b/src/executor_test/test/test_flake8.py deleted file mode 100644 index 27ee107..0000000 --- a/src/executor_test/test/test_flake8.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2017 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_flake8.main import main_with_errors -import pytest - - -@pytest.mark.flake8 -@pytest.mark.linter -def test_flake8(): - rc, errors = main_with_errors(argv=[]) - assert rc == 0, \ - 'Found %d code style errors / warnings:\n' % len(errors) + \ - '\n'.join(errors) diff --git a/src/executor_test/test/test_pep257.py b/src/executor_test/test/test_pep257.py deleted file mode 100644 index b234a38..0000000 --- a/src/executor_test/test/test_pep257.py +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright 2015 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_pep257.main import main -import pytest - - -@pytest.mark.linter -@pytest.mark.pep257 -def test_pep257(): - rc = main(argv=['.', 'test']) - assert rc == 0, 'Found code style errors / warnings' diff --git a/src/hello_world/CMakeLists.txt b/src/hello_world/CMakeLists.txt deleted file mode 100644 index 43e6fdd..0000000 --- a/src/hello_world/CMakeLists.txt +++ /dev/null @@ -1,48 +0,0 @@ -cmake_minimum_required(VERSION 3.16) -project(hello_world) - -find_package(ament_cmake REQUIRED) -find_package(rclcpp REQUIRED) -find_package(rclcpp_components REQUIRED) - -add_library(hello_node_component SHARED - src/hello_node.cpp -) - -ament_target_dependencies(hello_node_component - rclcpp - rclcpp_components -) - -rclcpp_components_register_node(hello_node_component - PLUGIN "hello_world::hello_node" - EXECUTABLE hello_node -) - -target_include_directories(hello_node_component - PUBLIC - $ - $ -) - -install(TARGETS - hello_node_component - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib - RUNTIME DESTINATION bin -) - -if(BUILD_TESTING) - find_package(ament_lint_auto REQUIRED) - ament_lint_auto_find_test_dependencies() - - # the following line skips the linter which checks for copyrights - # uncomment the line when a copyright and license is not present in all source files - #set(ament_cmake_copyright_FOUND TRUE) - # the following line skips cpplint (only works in a git repo) - # uncomment the line when this package is not in a git repo - #set(ament_cmake_cpplint_FOUND TRUE) - ament_lint_auto_find_test_dependencies() -endif() - -ament_package() diff --git a/src/hello_world/include/hello_world/hello_node.hpp b/src/hello_world/include/hello_world/hello_node.hpp deleted file mode 100644 index 4f37a36..0000000 --- a/src/hello_world/include/hello_world/hello_node.hpp +++ /dev/null @@ -1,14 +0,0 @@ -#pragma once - -#include "rclcpp/rclcpp.hpp" - -namespace hello_world -{ - -class hello_node : public rclcpp::Node -{ -public: - hello_node(const rclcpp::NodeOptions & options); -}; - -} // namespace hello_world diff --git a/src/hello_world/src/hello_node.cpp b/src/hello_world/src/hello_node.cpp deleted file mode 100644 index ebd2f58..0000000 --- a/src/hello_world/src/hello_node.cpp +++ /dev/null @@ -1,15 +0,0 @@ -#include "hello_world/hello_node.hpp" - -namespace hello_world -{ - -hello_node::hello_node(const rclcpp::NodeOptions & options) -: Node("hello_node", options) -{ - RCLCPP_INFO(this->get_logger(), "Hello World!"); -} - -} // namespace hello_world - -#include "rclcpp_components/register_node_macro.hpp" -RCLCPP_COMPONENTS_REGISTER_NODE(hello_world::hello_node) diff --git a/src/interface/CMakeLists.txt b/src/interface/CMakeLists.txt deleted file mode 100644 index 5f0c51f..0000000 --- a/src/interface/CMakeLists.txt +++ /dev/null @@ -1,34 +0,0 @@ -cmake_minimum_required(VERSION 3.8) -project(interface) - -if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") - add_compile_options(-Wall -Wextra -Wpedantic) -endif() - -# find dependencies -find_package(ament_cmake REQUIRED) -# uncomment the following section in order to fill in -# further dependencies manually. -# find_package( REQUIRED) - -add_executable(my_node src/my_node.cpp) -target_include_directories(my_node PUBLIC - $ - $) -target_compile_features(my_node PUBLIC c_std_99 cxx_std_17) # Require C99 and C++17 - -install(TARGETS my_node - DESTINATION lib/${PROJECT_NAME}) - -if(BUILD_TESTING) - find_package(ament_lint_auto REQUIRED) - # the following line skips the linter which checks for copyrights - # uncomment the line when a copyright and license is not present in all source files - #set(ament_cmake_copyright_FOUND TRUE) - # the following line skips cpplint (only works in a git repo) - # uncomment the line when this package is not in a git repo - #set(ament_cmake_cpplint_FOUND TRUE) - ament_lint_auto_find_test_dependencies() -endif() - -ament_package() diff --git a/src/interface/package.xml b/src/interface/package.xml deleted file mode 100644 index d05f957..0000000 --- a/src/interface/package.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - interface - 0.0.0 - TODO: Package description - trickfire - TODO: License declaration - - ament_cmake - - ament_lint_auto - ament_lint_common - - - ament_cmake - - diff --git a/src/interface/src/my_node.cpp b/src/interface/src/my_node.cpp deleted file mode 100644 index 8e434c1..0000000 --- a/src/interface/src/my_node.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include - -int main(int argc, char ** argv) -{ - (void) argc; - (void) argv; - - printf("hello world interface package\n"); - return 0; -} diff --git a/src/lib/color_codes.py b/src/lib/color_codes.py new file mode 100644 index 0000000..96e3bbd --- /dev/null +++ b/src/lib/color_codes.py @@ -0,0 +1,44 @@ +""" +This module contains classes and functions related to coloring text in consoles that support ANSI. +""" + +from enum import Enum + +# "Borrowed" from here: +# https://stackoverflow.com/questions/287871/how-do-i-print-colored-text-to-the-terminal + + +# The str mixin type on Enums is subpar as it has some serialization issues, but will work more than +# well enough for our purposes +class ColorCodes(str, Enum): + """ + An enum whose values represent color tags when printed to a console that supports ANSI + """ + + PINK = "\033[95m" + BLUE_OK = "\033[94m" + CYAN_OK = "\033[96m" + GREEN_OK = "\033[92m" + WARNING_YELLOW = "\033[93m" + FAIL_RED = "\033[91m" + ENDC = "\033[0m" + BOLD = "\033[1m" + UNDERLINE = "\033[4m" + + +def colorStr(text: str, color: ColorCodes) -> str: + """ + Colors the given string with the given color when printed to console + + Parameters + ------ + text: str + The string to color + color: Color + The color to color the string with + + Returns + ------ + A string that will be colored when printed + """ + return color + text + ColorCodes.ENDC diff --git a/src/lib/configs.py b/src/lib/configs.py new file mode 100644 index 0000000..77a6dce --- /dev/null +++ b/src/lib/configs.py @@ -0,0 +1,192 @@ +""" +This module contains all the relevant configs for the rover, and any classes needed to hold the +configs. +""" + +import math +from dataclasses import dataclass +from typing import Any + + +@dataclass(frozen=True) +class MoteusMotorConfig: + """ + A dataclass that contains config values relating to moteus motors connected via the can bus. + """ + + can_id: int + """ + The can id of the motor. + """ + + config: dict[str, float | int] + """ + The config of the motor. See: + https://github.com/mjbots/moteus/blob/main/docs/reference.md#c-configurable-values + + The `id.id` will be ignored. + """ + + def getCanTopicName(self) -> str: + """ + Gets the motor's topic name for data sourced from can. + + Returns the following format: `moteusmotor__from_can` + """ + return f"moteusmotor_{self.can_id}_from_can" + + def getInterfaceTopicName(self) -> str: + """ + Gets the motor's topic name for data sourced from robot interface. + + Returns the following format: `moteusmotor__from_interface` + """ + return f"moteusmotor_{self.can_id}_from_interface" + + +class MotorConfigs: + """ + A constants class that contains motor constants. + """ + + # Drivebase + REAR_RIGHT_DRIVE_MOTOR = MoteusMotorConfig( + can_id=20, + config={ + "servo.pwm_rate_hz": 50000, + "servo.pid_position.kp": 20.0, + "servo.pid_position.ki": 0.0, + "servo.pid_position.kd": 0.0, + "servo.default_timeout_s": 0.5, + "servo.max_current_A": 10.0, + "servo.max_velocity": 100.0, + "servopos.position_min": math.nan, + "servopos.position_max": math.nan, + }, + ) + MID_RIGHT_DRIVE_MOTOR = MoteusMotorConfig( + can_id=21, + config={ + "servo.pwm_rate_hz": 50000, + "servo.pid_position.kp": 20.0, + "servo.pid_position.ki": 0.0, + "servo.pid_position.kd": 0.0, + "servo.default_timeout_s": 0.5, + "servo.max_current_A": 10.0, + "servo.max_velocity": 100.0, + "servopos.position_min": math.nan, + "servopos.position_max": math.nan, + }, + ) + FRONT_RIGHT_DRIVE_MOTOR = MoteusMotorConfig( + can_id=22, + config={ + "servo.pid_position.kp": 20.0, + "servo.pid_position.ki": 0.0, + "servo.pid_position.kd": 0.0, + "servo.default_timeout_s": 0.5, + "servo.max_current_A": 10.0, + "servo.max_velocity": 100.0, + "servopos.position_min": math.nan, + "servopos.position_max": math.nan, + }, + ) + + REAR_LEFT_DRIVE_MOTOR = MoteusMotorConfig( + can_id=23, + config={ + "servo.pwm_rate_hz": 50000, + "servo.pid_position.kp": 20.0, + "servo.pid_position.ki": 0.0, + "servo.pid_position.kd": 0.0, + "servo.default_timeout_s": 0.5, + "servo.max_current_A": 10.0, + "servo.max_velocity": 100.0, + "servopos.position_min": math.nan, + "servopos.position_max": math.nan, + }, + ) + MID_LEFT_DRIVE_MOTOR = MoteusMotorConfig( + can_id=24, + config={ + "servo.pwm_rate_hz": 50000, + "servo.pid_position.kp": 20.0, + "servo.pid_position.ki": 0.0, + "servo.pid_position.kd": 0.0, + "servo.default_timeout_s": 0.5, + "servo.max_current_A": 10.0, + "servo.max_velocity": 100.0, + "servopos.position_min": math.nan, + "servopos.position_max": math.nan, + }, + ) + FRONT_LEFT_DRIVE_MOTOR = MoteusMotorConfig( + can_id=25, + config={ + "servo.pwm_rate_hz": 50000, + "servo.pid_position.kp": 20.0, + "servo.pid_position.ki": 0.0, + "servo.pid_position.kd": 0.0, + "servo.default_timeout_s": 0.5, + "servo.max_current_A": 10.0, + "servo.max_velocity": 100.0, + "servopos.position_min": math.nan, + "servopos.position_max": math.nan, + }, + ) + + # Arm + ARM_SHOULDER_MOTOR = MoteusMotorConfig( + can_id=1, + config={ + "servo.max_voltage": 56.0, + "servopos.position_min": math.nan, + "servopos.position_max": math.nan, + }, + ) + ARM_ELBOW_MOTOR = MoteusMotorConfig( + can_id=2, + config={ + "motor_position.rotor_to_output_ratio": 0.01666, + "servo.pwm_rate_hz": 60000, + "servo.pid_position.kp": 10000.0, + "servo.pid_position.ki": 0.0, + "servo.pid_position.kd": 0.0, + "servo.default_timeout_s": 1.0, + "servo.max_current_A": 6.0, + "servo.max_velocity": 0.1, + "servopos.position_min": -0.5, + "servopos.position_max": 0.0, + }, + ) + ARM_LEFT_WRIST_MOTOR = MoteusMotorConfig(can_id=3, config={}) + ARM_RIGHT_WRIST_MOTOR = MoteusMotorConfig(can_id=4, config={}) + ARM_TURNTABLE_MOTOR = MoteusMotorConfig( + can_id=5, + config={ + "motor_position.rotor_to_output_ratio": 0.030581, + "servo.pid_position.kp": 16.0, + "servo.pid_position.ki": 0.0, + "servo.pid_position.kd": 1.0, + "servo.max_current_A": 10.0, + "servo.max_velocity": 1.0, + "servopos.position_min": math.nan, + "servopos.position_max": math.nan, + }, + ) + + # Don't allow anyone to change this class's attributes + def __setattr__(self, _: str, __: Any) -> Any: + raise AttributeError("Trying to set attribute on a frozen instance") + + @classmethod + def getAllMotors(cls) -> list[MoteusMotorConfig]: + """ + Returns a list of every motor in this constants class. + """ + # Simply return every attribute that doesn't start with an underscore and isn't this method + return [ + value + for key, value in cls.__dict__.items() + if not key.startswith("_") and key != "getAllMotors" + ] diff --git a/src/lib/interface/robot_info.py b/src/lib/interface/robot_info.py new file mode 100644 index 0000000..ed8b10b --- /dev/null +++ b/src/lib/interface/robot_info.py @@ -0,0 +1,43 @@ +""" +This module just contains the RobotInfo class. It provides utility functions to access the state of +motor on the robot. +""" + +from rclpy.node import Node +from rclpy.subscription import Subscription +from std_msgs.msg import String + +from lib.configs import MoteusMotorConfig, MotorConfigs +from lib.moteus_motor_state import MoteusMotorState + + +class RobotInfo: # pylint: disable=too-few-public-methods + """ + A class that provides utility functions to access the state of motors within the robot. + """ + + def __init__(self, ros_node: Node): + self._ros_node = ros_node + self.sub_list: list[Subscription] = [] # empty array + self.can_id_to_json: dict[int, MoteusMotorState] = {} # Dict + + for motor_config in MotorConfigs.getAllMotors(): + self._ros_node.create_subscription( + String, motor_config.getCanTopicName(), self._subCallback, 10 + ) + self.can_id_to_json[motor_config.can_id] = MoteusMotorState() + + def _subCallback(self, msg: String) -> None: + state = MoteusMotorState.fromJsonMsg(msg) + self.can_id_to_json[state.can_id] = state + + def getMotorState(self, motor: MoteusMotorConfig) -> MoteusMotorState: + """ + Gets the state of the motor with the given can_id. + + Parameters + ------ + can_id: int + The can id of the motor to get the state of. + """ + return self.can_id_to_json[motor.can_id] diff --git a/src/lib/interface/robot_interface.py b/src/lib/interface/robot_interface.py new file mode 100644 index 0000000..ce6332d --- /dev/null +++ b/src/lib/interface/robot_interface.py @@ -0,0 +1,103 @@ +""" +This module just contains the RobotInterface class. It provides utility functions to interact with +motors on the robot. +""" + +import math + +from rclpy.node import Node +from rclpy.publisher import Publisher +from std_msgs.msg import String + +from lib.configs import MoteusMotorConfig, MotorConfigs +from lib.moteus_motor_state import MoteusRunSettings + +REVS_TO_RADIANS = math.pi * 2 +RADIANS_TO_REVS = 1 / REVS_TO_RADIANS + + +class RobotInterface: + """ + A class that provides utility functions to interact with motors on the robot + """ + + def __init__(self, ros_node: Node) -> None: + self._ros_node = ros_node + self._publishers: dict[int, Publisher] = {} + + for motor_config in MotorConfigs.getAllMotors(): + self._publishers[motor_config.can_id] = self._ros_node.create_publisher( + String, motor_config.getInterfaceTopicName(), 10 + ) + + def runMotor(self, motor: MoteusMotorConfig, run_settings: MoteusRunSettings) -> None: + """ + Runs the specified motor with the specified settings. + + Parameters + ------- + motor : MoteusMotorConfig + The config of the motor to run. + run_settings : MoteusRunSettings + The settings to run the motor with. + """ + self._publishers[motor.can_id].publish(run_settings.toMsg()) + + def runMotorSpeed(self, motor: MoteusMotorConfig, target_radians_per_second: float) -> None: + """ + Runs the specified motor with the specified target speed. + + Parameters + ------- + motor : MoteusMotorConfig + The config of the motor to run. + target_radians_per_second: float + The target speed in radians per second to run the motor. + """ + self.runMotor( + motor, + MoteusRunSettings( + position=math.nan, + velocity=target_radians_per_second * RADIANS_TO_REVS, + set_stop=False, + ), + ) + + def runMotorPosition(self, motor: MoteusMotorConfig, target_radians: float) -> None: + """ + Runs the specified motor to reach the specified position. + + Parameters + ------- + motor : MoteusMotorConfig + The config of the motor to run. + target_radians: float + The target position in revolutions. + """ + self.runMotor( + motor, MoteusRunSettings(position=target_radians * RADIANS_TO_REVS, set_stop=False) + ) + + def stopMotor(self, motor: MoteusMotorConfig) -> None: + """ + Stops the specified motor. This will stop the motor in place, not make it go limp unlike + `disableMotor()`. + + Parameters + ------ + motor: MoteusMotorConfig + The config of the motor to stop. + """ + self.runMotor(motor, MoteusRunSettings(position=math.nan, velocity=0, set_stop=False)) + + def disableMotor(self, motor: MoteusMotorConfig) -> None: + """ + Disables the specified motor. This essentially turns off the motor, stopping all output and + making it go limp. + + Parameters + ------- + motor : MoteusMotorConfig + The config of the motor to disable. + """ + self.runMotor(motor, MoteusRunSettings(velocity=0, set_stop=True)) diff --git a/src/lib/json_msg.py b/src/lib/json_msg.py new file mode 100644 index 0000000..678121f --- /dev/null +++ b/src/lib/json_msg.py @@ -0,0 +1,70 @@ +""" +This module contains a JsonMsg base class that should be inherited. This JsonMsg class allows for +easy conversion between String messages containing strings and python dictionaries. + +Inheriting this class should look like this: +``` +class FooMsg(JsonMsg["FooMsg"]): + # your code + pass +``` + +Optionally you can make the subclass a dataclass too: +``` +@dataclass +class FooMsg(JsonMsg["FooMsg"]): + foo: int + bar: int +``` +""" + +import json +from typing import Any, Generic, TypeVar, get_args + +from std_msgs.msg import String + +T = TypeVar("T") + + +# Yes I had to do some ungodly things to make type checking work. I dont think anyone on the team +# but me knows precisely what this code does... itll be find - kyler +class JsonMsg(Generic[T]): + """ + A base class that allows subclasses to easily be converted into String message objects + containing a Json string. + + The generic type `T` should be the inheriting class: + ``` + class FooMsg(JsonMsg["FooMsg"]): + # your code + pass + ``` + """ + + def toMsg(self) -> String: + """ + Convert the message object into a String message containing a Json string. + """ + str_msg = String() + str_msg.data = json.dumps(self.toDict()) + return str_msg + + def toDict(self) -> dict[str, Any]: + """ + Converts the message object into a dictionary. + """ + return { + key: value for key, value in self.__dict__.copy().items() if not key.startswith("_") + } + + @classmethod + def fromJsonMsg(cls, msg: String) -> T: + """ + Creates a JsonMsg object from a string message. + """ + json_obj = json.loads(msg.data) + + # This code just gets the child class and constructs a new one + # You can think of it like this: return T(**json_obj) + # It's just that the above code is not valid + return cls(**json_obj) diff --git a/src/lib/moteus_motor_state.py b/src/lib/moteus_motor_state.py new file mode 100644 index 0000000..681bd0d --- /dev/null +++ b/src/lib/moteus_motor_state.py @@ -0,0 +1,95 @@ +""" +This module contains objects representing the moteus motor state and settings for `set_position`. +""" + +from dataclasses import dataclass + +import moteus +from moteus.moteus import Result + +from lib.json_msg import JsonMsg + + +@dataclass(frozen=True) +class MoteusMotorState(JsonMsg["MoteusMotorState"]): + """ + A dataclass representing the state of the moteus motor. + """ + + can_id: int = -1 + position: float | None = None + """ + Current position of the motor in revolutions. + """ + velocity: float | None = None + """ + Current velocity of the motor in revolutions per second. + """ + torque: float | None = None + """ + Current torque of the motor in newton meters. + """ + temperature: float | None = None + """ + Current temperature of the controller in celcius. + """ + power: float | None = None + """ + Current power draw of the controller in watts. + """ + input_voltage: float | None = None + """ + Current voltage of the controller in volts. + """ + q_current: float | None = None + """ + Current q phase measured in amps. + """ + d_current: float | None = None + """ + Current d phase measured in amps. + """ + + @classmethod + def fromMoteusData(cls, can_id: int, moteus_result: Result) -> "MoteusMotorState": + """ + Creates a MoteusMotorState from a moteus result. + """ + dict_ = { + "can_id": can_id, + "position": moteus_result.values[moteus.Register.POSITION], + "velocity": moteus_result.values[moteus.Register.VELOCITY], + "torque": moteus_result.values[moteus.Register.TORQUE], + "temperature": moteus_result.values[moteus.Register.TEMPERATURE], + "power": moteus_result.values[moteus.Register.POWER], + "input_voltage": moteus_result.values[moteus.Register.VOLTAGE], + "q_current": moteus_result.values[moteus.Register.Q_CURRENT], + "d_current": moteus_result.values[moteus.Register.D_CURRENT], + } + + return cls(**dict_) + + +@dataclass(frozen=True) +class MoteusRunSettings(JsonMsg["MoteusRunSettings"]): + """ + A dataclass representing the different settings while running a moteus motor. + """ + + position: float | None = None + """ + Requested position of the motor in revolutions. + """ + velocity: float | None = None + """ + Requested velocity of the motor in revolutions per second. + """ + feedforward_torque: float | None = None + kp_scale: float | None = None + kd_scale: float | None = None + max_torque: float | None = None + watchdog_timeout: float | None = None + velocity_limit: float | None = None + accel_limit: float | None = None + fixed_voltage_override: float | None = None + set_stop: bool = True diff --git a/src/life_detection/life_detection/life_detection.py b/src/life_detection/life_detection/life_detection.py deleted file mode 100644 index 161c62c..0000000 --- a/src/life_detection/life_detection/life_detection.py +++ /dev/null @@ -1,6 +0,0 @@ -def main(): - print('Hi from life_detection.') - - -if __name__ == '__main__': - main() diff --git a/src/life_detection/setup.cfg b/src/life_detection/setup.cfg deleted file mode 100644 index a1546fe..0000000 --- a/src/life_detection/setup.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[develop] -script_dir=$base/lib/life_detection -[install] -install_scripts=$base/lib/life_detection diff --git a/src/life_detection/setup.py b/src/life_detection/setup.py deleted file mode 100644 index 73552ab..0000000 --- a/src/life_detection/setup.py +++ /dev/null @@ -1,26 +0,0 @@ -from setuptools import setup - -package_name = 'life_detection' - -setup( - name=package_name, - version='0.0.0', - packages=[package_name], - data_files=[ - ('share/ament_index/resource_index/packages', - ['resource/' + package_name]), - ('share/' + package_name, ['package.xml']), - ], - install_requires=['setuptools'], - zip_safe=True, - maintainer='trickfire', - maintainer_email='aimeilicke@gmail.com', - description='TODO: Package description', - license='TODO: License declaration', - tests_require=['pytest'], - entry_points={ - 'console_scripts': [ - 'life_detection = life_detection.life_detection:main' - ], - }, -) diff --git a/src/life_detection/test/test_flake8.py b/src/life_detection/test/test_flake8.py deleted file mode 100644 index 27ee107..0000000 --- a/src/life_detection/test/test_flake8.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2017 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_flake8.main import main_with_errors -import pytest - - -@pytest.mark.flake8 -@pytest.mark.linter -def test_flake8(): - rc, errors = main_with_errors(argv=[]) - assert rc == 0, \ - 'Found %d code style errors / warnings:\n' % len(errors) + \ - '\n'.join(errors) diff --git a/src/life_detection/test/test_pep257.py b/src/life_detection/test/test_pep257.py deleted file mode 100644 index b234a38..0000000 --- a/src/life_detection/test/test_pep257.py +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright 2015 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_pep257.main import main -import pytest - - -@pytest.mark.linter -@pytest.mark.pep257 -def test_pep257(): - rc = main(argv=['.', 'test']) - assert rc == 0, 'Found code style errors / warnings' diff --git a/src/localization/localization/localization.py b/src/localization/localization/localization.py deleted file mode 100644 index 89508ac..0000000 --- a/src/localization/localization/localization.py +++ /dev/null @@ -1,6 +0,0 @@ -def main(): - print('Hi from localization.') - - -if __name__ == '__main__': - main() diff --git a/src/localization/setup.cfg b/src/localization/setup.cfg deleted file mode 100644 index 6d5a5fb..0000000 --- a/src/localization/setup.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[develop] -script_dir=$base/lib/localization -[install] -install_scripts=$base/lib/localization diff --git a/src/localization/setup.py b/src/localization/setup.py deleted file mode 100644 index d3a4c4f..0000000 --- a/src/localization/setup.py +++ /dev/null @@ -1,26 +0,0 @@ -from setuptools import setup - -package_name = 'localization' - -setup( - name=package_name, - version='0.0.0', - packages=[package_name], - data_files=[ - ('share/ament_index/resource_index/packages', - ['resource/' + package_name]), - ('share/' + package_name, ['package.xml']), - ], - install_requires=['setuptools'], - zip_safe=True, - maintainer='trickfire', - maintainer_email='aimeilicke@gmail.com', - description='TODO: Package description', - license='TODO: License declaration', - tests_require=['pytest'], - entry_points={ - 'console_scripts': [ - 'localization = localization.localization:main' - ], - }, -) diff --git a/src/localization/test/test_flake8.py b/src/localization/test/test_flake8.py deleted file mode 100644 index 27ee107..0000000 --- a/src/localization/test/test_flake8.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2017 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_flake8.main import main_with_errors -import pytest - - -@pytest.mark.flake8 -@pytest.mark.linter -def test_flake8(): - rc, errors = main_with_errors(argv=[]) - assert rc == 0, \ - 'Found %d code style errors / warnings:\n' % len(errors) + \ - '\n'.join(errors) diff --git a/src/localization/test/test_pep257.py b/src/localization/test/test_pep257.py deleted file mode 100644 index b234a38..0000000 --- a/src/localization/test/test_pep257.py +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright 2015 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_pep257.main import main -import pytest - - -@pytest.mark.linter -@pytest.mark.pep257 -def test_pep257(): - rc = main(argv=['.', 'test']) - assert rc == 0, 'Found code style errors / warnings' diff --git a/src/mission_control/CMakeLists.txt b/src/mission_control/CMakeLists.txt deleted file mode 100644 index 652a72c..0000000 --- a/src/mission_control/CMakeLists.txt +++ /dev/null @@ -1,34 +0,0 @@ -cmake_minimum_required(VERSION 3.8) -project(mission_control) - -if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") - add_compile_options(-Wall -Wextra -Wpedantic) -endif() - -# find dependencies -find_package(ament_cmake REQUIRED) -# uncomment the following section in order to fill in -# further dependencies manually. -# find_package( REQUIRED) - -add_executable(my_node src/my_node.cpp) -target_include_directories(my_node PUBLIC - $ - $) -target_compile_features(my_node PUBLIC c_std_99 cxx_std_17) # Require C99 and C++17 - -install(TARGETS my_node - DESTINATION lib/${PROJECT_NAME}) - -if(BUILD_TESTING) - find_package(ament_lint_auto REQUIRED) - # the following line skips the linter which checks for copyrights - # uncomment the line when a copyright and license is not present in all source files - #set(ament_cmake_copyright_FOUND TRUE) - # the following line skips cpplint (only works in a git repo) - # uncomment the line when this package is not in a git repo - #set(ament_cmake_cpplint_FOUND TRUE) - ament_lint_auto_find_test_dependencies() -endif() - -ament_package() diff --git a/src/mission_control/package.xml b/src/mission_control/package.xml deleted file mode 100644 index c05251e..0000000 --- a/src/mission_control/package.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - mission_control - 0.0.0 - TODO: Package description - trickfire - TODO: License declaration - - ament_cmake - - ament_lint_auto - ament_lint_common - - - ament_cmake - - diff --git a/src/mission_control/src/my_node.cpp b/src/mission_control/src/my_node.cpp deleted file mode 100644 index 64e7f06..0000000 --- a/src/mission_control/src/my_node.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include - -int main(int argc, char ** argv) -{ - (void) argc; - (void) argv; - - printf("hello world mission_control package\n"); - return 0; -} diff --git a/src/localization/localization/__init__.py b/src/mission_control_updater/mission_control_updater/__init__.py similarity index 100% rename from src/localization/localization/__init__.py rename to src/mission_control_updater/mission_control_updater/__init__.py diff --git a/src/mission_control_updater/mission_control_updater/info_to_json_helper.py b/src/mission_control_updater/mission_control_updater/info_to_json_helper.py new file mode 100644 index 0000000..b537ac9 --- /dev/null +++ b/src/mission_control_updater/mission_control_updater/info_to_json_helper.py @@ -0,0 +1,25 @@ +import json + +from lib.moteus_motor_state import MoteusMotorState + + +class InfoToJSONHelper: + + def __init__(self) -> None: + self.moteus_entries: list[MoteusMotorState] = [] + + def addMoteusEntry(self, entry: MoteusMotorState) -> None: + self.moteus_entries.append(entry) + + def buildJSONString(self) -> str: + moteus_dict_array = [] + + for moteus_entry in self.moteus_entries: + moteus_dict_array.append(moteus_entry.toDict()) + + python_dict = { + "moteusMotorLength": len(moteus_dict_array), + "moteusMotors": moteus_dict_array, + } + + return json.dumps(python_dict) diff --git a/src/mission_control_updater/mission_control_updater/updater.py b/src/mission_control_updater/mission_control_updater/updater.py new file mode 100644 index 0000000..dd8a25f --- /dev/null +++ b/src/mission_control_updater/mission_control_updater/updater.py @@ -0,0 +1,61 @@ +import sys + +import rclpy +from rclpy.executors import ExternalShutdownException +from rclpy.node import Node +from std_msgs.msg import String + +from lib.color_codes import ColorCodes, colorStr +from lib.configs import MotorConfigs +from lib.interface.robot_info import RobotInfo + +from . import info_to_json_helper + + +class MissionControlUpdater(Node): + + def __init__(self) -> None: + super().__init__("mission_control_updater_node") + self.get_logger().info( + colorStr("Launching mission_control_updater_node", ColorCodes.BLUE_OK) + ) + + self.publisher_to_mc = self.create_publisher(String, "mission_control_updater", 1) + + self.timer = self.create_timer(0.01, self.sendData) + self.robot_info = RobotInfo(self) + + def sendData(self) -> None: + json_builder = info_to_json_helper.InfoToJSONHelper() + + for motor in MotorConfigs.getAllMotors(): + json_builder.addMoteusEntry(self.robot_info.getMotorState(motor)) + + msg = String() + msg.data = json_builder.buildJSONString() + self.publisher_to_mc.publish(msg) + + +def main(args: list[str] | None = None) -> None: + """ + The entry point of the node. + """ + + rclpy.init(args=args) + try: + node = MissionControlUpdater() + rclpy.spin(node) + + except KeyboardInterrupt: + pass + except ExternalShutdownException: + # This is done when we ctrl-c the progam to shut it down + node.get_logger().info( + colorStr("Shutting down mission_control_updater_node", ColorCodes.BLUE_OK) + ) + node.destroy_node() + sys.exit(0) + + +if __name__ == "__main__": + main() diff --git a/src/localization/package.xml b/src/mission_control_updater/package.xml similarity index 82% rename from src/localization/package.xml rename to src/mission_control_updater/package.xml index fc476ce..fb8ad91 100644 --- a/src/localization/package.xml +++ b/src/mission_control_updater/package.xml @@ -1,10 +1,10 @@ - localization + mission_control_updater 0.0.0 TODO: Package description - trickfire + trickfire TODO: License declaration ament_copyright diff --git a/src/localization/resource/localization b/src/mission_control_updater/resource/mission_control_updater similarity index 100% rename from src/localization/resource/localization rename to src/mission_control_updater/resource/mission_control_updater diff --git a/src/mission_control_updater/setup.cfg b/src/mission_control_updater/setup.cfg new file mode 100644 index 0000000..d896b75 --- /dev/null +++ b/src/mission_control_updater/setup.cfg @@ -0,0 +1,4 @@ +[develop] +script_dir=$base/lib/mission_control_updater +[install] +install_scripts=$base/lib/mission_control_updater diff --git a/src/mission_control_updater/setup.py b/src/mission_control_updater/setup.py new file mode 100644 index 0000000..f6469a6 --- /dev/null +++ b/src/mission_control_updater/setup.py @@ -0,0 +1,23 @@ +from setuptools import find_packages, setup + +package_name = "mission_control_updater" + +setup( + name=package_name, + version="0.0.0", + packages=find_packages(exclude=["test"]), + data_files=[ + ("share/ament_index/resource_index/packages", ["resource/" + package_name]), + ("share/" + package_name, ["package.xml"]), + ], + install_requires=["setuptools"], + zip_safe=True, + maintainer="trickfire", + maintainer_email="vladimirkupryukhin@gmail.com", + description="TODO: Package description", + license="TODO: License declaration", + tests_require=["pytest"], + entry_points={ + "console_scripts": ["mission_control_updater = mission_control_updater.updater:main"], + }, +) diff --git a/src/localization/test/test_copyright.py b/src/mission_control_updater/test/test_copyright.py similarity index 74% rename from src/localization/test/test_copyright.py rename to src/mission_control_updater/test/test_copyright.py index cc8ff03..95f0381 100644 --- a/src/localization/test/test_copyright.py +++ b/src/mission_control_updater/test/test_copyright.py @@ -16,8 +16,10 @@ import pytest +# Remove the `skip` decorator once the source file(s) have a copyright header +@pytest.mark.skip(reason="No copyright header has been placed in the generated source file.") @pytest.mark.copyright @pytest.mark.linter def test_copyright(): - rc = main(argv=['.', 'test']) - assert rc == 0, 'Found errors' + rc = main(argv=[".", "test"]) + assert rc == 0, "Found errors" diff --git a/src/monitering/CMakeLists.txt b/src/monitering/CMakeLists.txt deleted file mode 100644 index a3b75cf..0000000 --- a/src/monitering/CMakeLists.txt +++ /dev/null @@ -1,34 +0,0 @@ -cmake_minimum_required(VERSION 3.8) -project(monitering) - -if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") - add_compile_options(-Wall -Wextra -Wpedantic) -endif() - -# find dependencies -find_package(ament_cmake REQUIRED) -# uncomment the following section in order to fill in -# further dependencies manually. -# find_package( REQUIRED) - -add_executable(my_node src/my_node.cpp) -target_include_directories(my_node PUBLIC - $ - $) -target_compile_features(my_node PUBLIC c_std_99 cxx_std_17) # Require C99 and C++17 - -install(TARGETS my_node - DESTINATION lib/${PROJECT_NAME}) - -if(BUILD_TESTING) - find_package(ament_lint_auto REQUIRED) - # the following line skips the linter which checks for copyrights - # uncomment the line when a copyright and license is not present in all source files - #set(ament_cmake_copyright_FOUND TRUE) - # the following line skips cpplint (only works in a git repo) - # uncomment the line when this package is not in a git repo - #set(ament_cmake_cpplint_FOUND TRUE) - ament_lint_auto_find_test_dependencies() -endif() - -ament_package() diff --git a/src/monitering/package.xml b/src/monitering/package.xml deleted file mode 100644 index 6f44c79..0000000 --- a/src/monitering/package.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - monitering - 0.0.0 - TODO: Package description - trickfire - TODO: License declaration - - ament_cmake - - ament_lint_auto - ament_lint_common - - - ament_cmake - - diff --git a/src/monitering/src/my_node.cpp b/src/monitering/src/my_node.cpp deleted file mode 100644 index 4efe23d..0000000 --- a/src/monitering/src/my_node.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include - -int main(int argc, char ** argv) -{ - (void) argc; - (void) argv; - - printf("hello world monitering package\n"); - return 0; -} diff --git a/src/sensor/CMakeLists.txt b/src/sensor/CMakeLists.txt deleted file mode 100644 index 209a439..0000000 --- a/src/sensor/CMakeLists.txt +++ /dev/null @@ -1,34 +0,0 @@ -cmake_minimum_required(VERSION 3.8) -project(sensor) - -if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") - add_compile_options(-Wall -Wextra -Wpedantic) -endif() - -# find dependencies -find_package(ament_cmake REQUIRED) -# uncomment the following section in order to fill in -# further dependencies manually. -# find_package( REQUIRED) - -add_executable(my_node src/my_node.cpp) -target_include_directories(my_node PUBLIC - $ - $) -target_compile_features(my_node PUBLIC c_std_99 cxx_std_17) # Require C99 and C++17 - -install(TARGETS my_node - DESTINATION lib/${PROJECT_NAME}) - -if(BUILD_TESTING) - find_package(ament_lint_auto REQUIRED) - # the following line skips the linter which checks for copyrights - # uncomment the line when a copyright and license is not present in all source files - #set(ament_cmake_copyright_FOUND TRUE) - # the following line skips cpplint (only works in a git repo) - # uncomment the line when this package is not in a git repo - #set(ament_cmake_cpplint_FOUND TRUE) - ament_lint_auto_find_test_dependencies() -endif() - -ament_package() diff --git a/src/sensor/package.xml b/src/sensor/package.xml deleted file mode 100644 index e468ea7..0000000 --- a/src/sensor/package.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - sensor - 0.0.0 - TODO: Package description - trickfire - TODO: License declaration - - ament_cmake - - ament_lint_auto - ament_lint_common - - - ament_cmake - - diff --git a/src/sensor/src/my_node.cpp b/src/sensor/src/my_node.cpp deleted file mode 100644 index 94bfd1d..0000000 --- a/src/sensor/src/my_node.cpp +++ /dev/null @@ -1,10 +0,0 @@ -#include - -int main(int argc, char ** argv) -{ - (void) argc; - (void) argv; - - printf("hello world sensor package\n"); - return 0; -} diff --git a/src/teleoperation/package.xml b/src/teleoperation/package.xml deleted file mode 100644 index 7889cab..0000000 --- a/src/teleoperation/package.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - teleoperation - 0.0.0 - TODO: Package description - trickfire - TODO: License declaration - - ament_copyright - ament_flake8 - ament_pep257 - python3-pytest - - - ament_python - - diff --git a/src/teleoperation/resource/teleoperation b/src/teleoperation/resource/teleoperation deleted file mode 100644 index e69de29..0000000 diff --git a/src/teleoperation/setup.cfg b/src/teleoperation/setup.cfg deleted file mode 100644 index f8e45c1..0000000 --- a/src/teleoperation/setup.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[develop] -script_dir=$base/lib/teleoperation -[install] -install_scripts=$base/lib/teleoperation diff --git a/src/teleoperation/setup.py b/src/teleoperation/setup.py deleted file mode 100644 index c877fe1..0000000 --- a/src/teleoperation/setup.py +++ /dev/null @@ -1,26 +0,0 @@ -from setuptools import setup - -package_name = 'teleoperation' - -setup( - name=package_name, - version='0.0.0', - packages=[package_name], - data_files=[ - ('share/ament_index/resource_index/packages', - ['resource/' + package_name]), - ('share/' + package_name, ['package.xml']), - ], - install_requires=['setuptools'], - zip_safe=True, - maintainer='trickfire', - maintainer_email='aimeilicke@gmail.com', - description='TODO: Package description', - license='TODO: License declaration', - tests_require=['pytest'], - entry_points={ - 'console_scripts': [ - 'teleoperation = teleoperation.teleoperation:main' - ], - }, -) diff --git a/src/teleoperation/teleoperation/__init__.py b/src/teleoperation/teleoperation/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/teleoperation/teleoperation/teleoperation.py b/src/teleoperation/teleoperation/teleoperation.py deleted file mode 100644 index 44fb6e6..0000000 --- a/src/teleoperation/teleoperation/teleoperation.py +++ /dev/null @@ -1,6 +0,0 @@ -def main(): - print('Hi from teleoperation.') - - -if __name__ == '__main__': - main() diff --git a/src/teleoperation/test/test_copyright.py b/src/teleoperation/test/test_copyright.py deleted file mode 100644 index cc8ff03..0000000 --- a/src/teleoperation/test/test_copyright.py +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright 2015 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_copyright.main import main -import pytest - - -@pytest.mark.copyright -@pytest.mark.linter -def test_copyright(): - rc = main(argv=['.', 'test']) - assert rc == 0, 'Found errors' diff --git a/src/teleoperation/test/test_flake8.py b/src/teleoperation/test/test_flake8.py deleted file mode 100644 index 27ee107..0000000 --- a/src/teleoperation/test/test_flake8.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2017 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_flake8.main import main_with_errors -import pytest - - -@pytest.mark.flake8 -@pytest.mark.linter -def test_flake8(): - rc, errors = main_with_errors(argv=[]) - assert rc == 0, \ - 'Found %d code style errors / warnings:\n' % len(errors) + \ - '\n'.join(errors) diff --git a/src/teleoperation/test/test_pep257.py b/src/teleoperation/test/test_pep257.py deleted file mode 100644 index b234a38..0000000 --- a/src/teleoperation/test/test_pep257.py +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright 2015 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_pep257.main import main -import pytest - - -@pytest.mark.linter -@pytest.mark.pep257 -def test_pep257(): - rc = main(argv=['.', 'test']) - assert rc == 0, 'Found code style errors / warnings' diff --git a/src/viator_launch/launch/robot.launch.py b/src/viator_launch/launch/robot.launch.py index 92d05f4..e35d172 100644 --- a/src/viator_launch/launch/robot.launch.py +++ b/src/viator_launch/launch/robot.launch.py @@ -1,60 +1,28 @@ import launch -from launch_ros.actions import ComposableNodeContainer -from launch_ros.descriptions import ComposableNode from launch_ros.actions import Node -hello_node = ComposableNode( - package='hello_world', - plugin='hello_world::hello_node', - name='hello_node' -) +can_moteus_node = Node(package="can_moteus", executable="can_moteus", name="can_moteus_node") -can_moteus_node = Node( - package='can_moteus', - executable='can_moteus', - name='can_moteus_node' -) -ros_camera_node = Node( - package='camera', - executable='roscamera', - name='ros_camera' -) +drivebase_node = Node(package="drivebase", executable="drivebase", name="drivebase_node") -ros_camera_test_node = Node( - package='camera_subscriber_test', - executable='roscamerasub', - name='ros_camera_sub' -) -ros_executor_test_node = Node( - package='executor_test', - executable='executor_test', - name='executor_camera_test_node' +mission_control_updater_node = Node( + package="mission_control_updater", + executable="mission_control_updater", + name="mission_control_updater_node", ) -# Composable Nodes launched in a Composable Node container will share a process -# and can use very fast inter-process communication instead of publishing -# messages over a network socket. -# Note: "Composable Node container" does not mean "Docker-like container". -robot_container = ComposableNodeContainer( - name='robot', - package='rclcpp_components', - namespace='', - executable='component_container', - composable_node_descriptions=[ - hello_node - ], - output='screen', - emulate_tty=True -) +arm_node = Node(package="arm", executable="arm", name="arm_node") + +camera_node = Node(package="camera", executable="roscamera", name="camera_node") + +# This is the example node. It will show ROS timers, subscribers, and publishers +# To include it in the startup, add it to the array in the generate_launch_description() method +example_node = Node(package="example_node", executable="myExampleNode", name="my_example_node") -def generate_launch_description(): - return launch.LaunchDescription([ - robot_container, - can_moteus_node, - ros_camera_node, - #ros_executor_test_node, - #ros_camera_test_node - ]) +def generate_launch_description() -> launch.LaunchDescription: # pylint: disable=invalid-name + return launch.LaunchDescription( + [can_moteus_node, drivebase_node, mission_control_updater_node, arm_node, camera_node] + ) diff --git a/src/viator_launch/package.xml b/src/viator_launch/package.xml index 853af22..7f08692 100644 --- a/src/viator_launch/package.xml +++ b/src/viator_launch/package.xml @@ -7,11 +7,13 @@ trickfire TODO: License declaration - hello_world can_moteus ros2launch + mission_control_updater + arm camera - camera_subscriber_test + example_node + ament_copyright ament_flake8 @@ -21,4 +23,4 @@ ament_python - + \ No newline at end of file diff --git a/src/viator_launch/setup.py b/src/viator_launch/setup.py index edf125d..947a4e8 100644 --- a/src/viator_launch/setup.py +++ b/src/viator_launch/setup.py @@ -1,24 +1,24 @@ from setuptools import setup from glob import glob -package_name = 'viator_launch' +package_name = "viator_launch" setup( name=package_name, - version='0.0.0', + version="0.0.0", packages=[], data_files=[ # Register this package in the ament resource index. - ('share/ament_index/resource_index/packages', ['resource/' + package_name]), - ('share/' + package_name, ['package.xml']), - ('share/' + package_name + '/launch', glob('launch/*.launch.py')), + ("share/ament_index/resource_index/packages", ["resource/" + package_name]), + ("share/" + package_name, ["package.xml"]), + ("share/" + package_name + "/launch", glob("launch/*.launch.py")), ], - install_requires=['setuptools'], + install_requires=["setuptools"], # Zip-safety is not yet confirmed. zip_safe=True, - maintainer='trickfire', - maintainer_email='phillipov@outlook.com', - description='TODO: Package description', - license='TODO: License declaration', - tests_require=['pytest'] + maintainer="trickfire", + maintainer_email="phillipov@outlook.com", + description="TODO: Package description", + license="TODO: License declaration", + tests_require=["pytest"], ) diff --git a/src/viator_launch/test/test_copyright.py b/src/viator_launch/test/test_copyright.py index cc8ff03..f46f861 100644 --- a/src/viator_launch/test/test_copyright.py +++ b/src/viator_launch/test/test_copyright.py @@ -19,5 +19,5 @@ @pytest.mark.copyright @pytest.mark.linter def test_copyright(): - rc = main(argv=['.', 'test']) - assert rc == 0, 'Found errors' + rc = main(argv=[".", "test"]) + assert rc == 0, "Found errors" diff --git a/src/viator_launch/test/test_flake8.py b/src/viator_launch/test/test_flake8.py deleted file mode 100644 index 27ee107..0000000 --- a/src/viator_launch/test/test_flake8.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2017 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_flake8.main import main_with_errors -import pytest - - -@pytest.mark.flake8 -@pytest.mark.linter -def test_flake8(): - rc, errors = main_with_errors(argv=[]) - assert rc == 0, \ - 'Found %d code style errors / warnings:\n' % len(errors) + \ - '\n'.join(errors) diff --git a/src/viator_launch/test/test_pep257.py b/src/viator_launch/test/test_pep257.py deleted file mode 100644 index b234a38..0000000 --- a/src/viator_launch/test/test_pep257.py +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright 2015 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_pep257.main import main -import pytest - - -@pytest.mark.linter -@pytest.mark.pep257 -def test_pep257(): - rc = main(argv=['.', 'test']) - assert rc == 0, 'Found code style errors / warnings' diff --git a/src/vision_opencv b/src/vision_opencv deleted file mode 160000 index 066793a..0000000 --- a/src/vision_opencv +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 066793a23e5d06d76c78ca3d69824a501c3554fd From d99ca85341dacc2aa9993ab88c5ddbb774ed0083 Mon Sep 17 00:00:00 2001 From: dkim03 Date: Tue, 22 Oct 2024 11:45:48 -0700 Subject: [PATCH 23/50] update settings.json --- .vscode/settings.json | 3 ++- src/.vscode/settings.json | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) create mode 100644 src/.vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json index 92828ed..b077611 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -29,5 +29,6 @@ }, "editor.rulers": [ 100 - ] + ], + "ros.distro": "humble" } \ No newline at end of file diff --git a/src/.vscode/settings.json b/src/.vscode/settings.json new file mode 100644 index 0000000..46d9a84 --- /dev/null +++ b/src/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "ros.distro": "humble" +} \ No newline at end of file From 7483ccf03f9c7ee7443dec8b7e65ab65d1996b2f Mon Sep 17 00:00:00 2001 From: Daniel Kantor Date: Fri, 1 Dec 2023 14:22:16 -0800 Subject: [PATCH 24/50] Robot Interface Merge (#24) * First commit, added some C++ support * First commit, testing * Added robot_interface.h file * Started working on adding function prototypes to robot_interface.h * update header for robot interface * Created robot_interface.cpp file * add antenna methods * Started converting robot_interface to Python * Added constructor/destructor * Trying to experiment with publisher * Trying to create testing node for publishing testing * Random testing node testing * Got some testing publishers to publish using smaller node. Not sure if it's working correctly * Added some more testing publisher stuff for all 6 wheels. Removed forward/backward wheel functionality, only single wheel function (positive/negative) * Changed conversion from using diameter to using circumference * change viator launch and cooresponding package xml * First commit, added some C++ support * First commit, testing * Added robot_interface.h file * Started working on adding function prototypes to robot_interface.h * update header for robot interface * Created robot_interface.cpp file * add antenna methods * Started converting robot_interface to Python * Added constructor/destructor * Trying to experiment with publisher * Trying to create testing node for publishing testing * Random testing node testing * Got some testing publishers to publish using smaller node. Not sure if it's working correctly * Added some more testing publisher stuff for all 6 wheels. Removed forward/backward wheel functionality, only single wheel function (positive/negative) * Changed conversion from using diameter to using circumference * change viator launch and cooresponding package xml * added all methods to robot interface * Added arm publishers and renamed other publishers * Followed publisher naming standard * update robot interface * Fix RobotInterface import in testing node * change message values to float 32 * Initial testing works. Tested three methods. Multiple motors move * Changed const variables, changed math and gear ratios * Can2.0 works * Added some comments * Added some comments * Added setupCAN.sh * Position code works with a single motor. Idk why the magic number is 33 for 2pi --------- Co-authored-by: matthewperrywa Co-authored-by: mendomic Co-authored-by: Vladimir Kupryukhin Co-authored-by: agrach Co-authored-by: VladimirKupryukhin --- launch.sh | 6 + setupCAN.sh | 4 + src/custom_interfaces/package.xml | 15 +- src/custom_interfaces/robot_interface.py | 261 ++++++++++++++++++ src/testingInterface/package.xml | 37 +++ .../resource/testingInterface | 0 src/testingInterface/setup.cfg | 4 + src/testingInterface/setup.py | 26 ++ src/testingInterface/test/test_copyright.py | 25 ++ src/testingInterface/test/test_flake8.py | 25 ++ src/testingInterface/test/test_pep257.py | 23 ++ .../testingInterface/__init__.py | 0 .../testingInterface/testingNode.py | 29 ++ 13 files changed, 454 insertions(+), 1 deletion(-) create mode 100644 setupCAN.sh create mode 100644 src/custom_interfaces/robot_interface.py create mode 100644 src/testingInterface/package.xml create mode 100644 src/testingInterface/resource/testingInterface create mode 100644 src/testingInterface/setup.cfg create mode 100644 src/testingInterface/setup.py create mode 100644 src/testingInterface/test/test_copyright.py create mode 100644 src/testingInterface/test/test_flake8.py create mode 100644 src/testingInterface/test/test_pep257.py create mode 100644 src/testingInterface/testingInterface/__init__.py create mode 100644 src/testingInterface/testingInterface/testingNode.py diff --git a/launch.sh b/launch.sh index aa11a7a..09ba431 100755 --- a/launch.sh +++ b/launch.sh @@ -9,6 +9,12 @@ source /home/trickfire/urc-2023/install/setup.bash #ip link set can0 type can bitrate 1000000 dbitrate 5000000 fd on #ip link set can0 up +#modprobe can +#modprobe can_raw +#modprobe mttcan +#ip link set can0 type can bitrate 1000000 dbitrate 5000000 fd on +#ip link set can0 up + # Add to the python import pathes. Not the best, but will work for now export PYTHONPATH="/home/trickfire/urc-2023/src/:$PYTHONPATH" diff --git a/setupCAN.sh b/setupCAN.sh new file mode 100644 index 0000000..1126bc0 --- /dev/null +++ b/setupCAN.sh @@ -0,0 +1,4 @@ +sudo modprobe can +sudo modprobe can_raw +sudo modprobe mttcan +sudo ip link set can0 up type can bitrate 500000 dbitrate 1000000 berr-reporting on fd on \ No newline at end of file diff --git a/src/custom_interfaces/package.xml b/src/custom_interfaces/package.xml index 53deff3..3847a6e 100644 --- a/src/custom_interfaces/package.xml +++ b/src/custom_interfaces/package.xml @@ -1,6 +1,7 @@ +<<<<<<<< HEAD:src/custom_interfaces/package.xml custom_interfaces 0.0.0 TODO: Package description @@ -17,8 +18,20 @@ ament_lint_auto ament_lint_common +======== + testingInterface + 0.0.0 + TODO: Package description + trickfire + TODO: License declaration + + ament_copyright + ament_flake8 + ament_pep257 + python3-pytest +>>>>>>>> e9f631c (Robot Interface Merge (#24)):src/testingInterface/package.xml - ament_cmake + ament_python diff --git a/src/custom_interfaces/robot_interface.py b/src/custom_interfaces/robot_interface.py new file mode 100644 index 0000000..88c5e57 --- /dev/null +++ b/src/custom_interfaces/robot_interface.py @@ -0,0 +1,261 @@ +#!/usr/bin/env python3 + +# General interface for robot funcitonality + +import rclpy +from rclpy.node import Node +import std_msgs.msg +from std_msgs.msg import String +from std_msgs.msg import Float32 + +VELOCITY_CONVERSION = 1.76838724851 +POSITION_CONVERSION = 33 / (6.28) #Radians to position ticks + +robotPublishers = dict() + +class RobotInterface(Node): + # + # Constructors/Destructors + # + + def __init__(self, rosNode): + self._rosNode = rosNode + print("GOT TO __init__") + + # Drive base + publisher = self._rosNode.create_publisher(Float32, 'front_left_drive_motor_velocity_from_interface', 10) + robotPublishers['front_left_drive_motor'] = publisher + publisher = self._rosNode.create_publisher(Float32, 'front_right_drive_motor_velocity_from_interface', 10) + robotPublishers['front_right_drive_motor'] = publisher + publisher = self._rosNode.create_publisher(Float32, 'mid_left_drive_motor_velocity_from_interface', 10) + robotPublishers['mid_left_drive_motor'] = publisher + publisher = self._rosNode.create_publisher(Float32, 'mid_right_drive_motor_velocity_from_interface', 10) + robotPublishers['mid_right_drive_motor'] = publisher + publisher = self._rosNode.create_publisher(Float32, 'rear_left_drive_motor_velocity_from_interface', 10) + robotPublishers['rear_left_drive_motor'] = publisher + publisher = self._rosNode.create_publisher(Float32, 'rear_right_drive_motor_velocity_from_interface', 10) + robotPublishers['rear_right_drive_motor'] = publisher + + # Arm + publisher = self._rosNode.create_publisher(Float32, 'arm_turntable_motor_position_from_interface', 10) + robotPublishers['arm_turntable_motor'] = publisher + publisher = self._rosNode.create_publisher(Float32, 'arm_shoulder_motor_position_from_interface', 10) + robotPublishers['arm_shoulder_motor'] = publisher + publisher = self._rosNode.create_publisher(Float32, 'arm_elbow_motor_position_from_interface', 10) + robotPublishers['arm_elbow_motor'] = publisher + publisher = self._rosNode.create_publisher(Float32, 'arm_forearm_motor_position_from_interface', 10) + robotPublishers['arm_forearm_motor'] = publisher + publisher = self._rosNode.create_publisher(Float32, 'arm_wrist_motor_position_from_interface', 10) + robotPublishers['arm_wrist_motor'] = publisher + publisher = self._rosNode.create_publisher(Float32, 'arm_hand_motor_position_from_interface', 10) + robotPublishers['arm_hand_motor'] = publisher + publisher = self._rosNode.create_publisher(Float32, 'arm_fingers_motor_position_from_interface', 10) + robotPublishers['arm_fingers_motor'] = publisher + + # Antenna + publisher = self._rosNode.create_publisher(Float32, 'antenna_motor_position_from_interface', 10) + robotPublishers['antenna_motor'] = publisher + publisher = self._rosNode.create_publisher(Float32, 'antenna_turntable_motor_position_from_interface', 10) + robotPublishers['antenna_turntable_motor'] = publisher + + def __del__(self): + print() + + def velocityConversion(self, amount): + return amount * VELOCITY_CONVERSION + + # Converting from input "radians" to output "revolutions" + def positionConversion(self, amount): + return amount * POSITION_CONVERSION + + # RobotInterface(const RobotInterface&) = delete; + # RobotInterface& operator=(const RobotInterface&) = delete; + # RobotInterface(RobotInterface&&) = delete; + # RobotInterface& operator=(RobotInterface&&) = delete; + + + # + # Movement + # + + # General movement including all wheels + def moveForward(): + print() + def moveBackward(self, amount): + print() + def turnLeft(self, amount): + print() + def turnRight(self, amount): + print() + + # Left front wheel + def front_left_drive_motor(self, amount): + revolutionsOutput = self.velocityConversion(amount) + publisher = robotPublishers['front_left_drive_motor'] + strMsg = Float32() + strMsg.data = revolutionsOutput + #self._rosNode.get_logger().info(str(revolutionsOutput)) + publisher.publish(strMsg) + + # Right front wheel + def front_right_drive_motor(self, amount): + revolutionsOutput = self.velocityConversion(amount) + publisher = robotPublishers['front_right_drive_motor'] + strMsg = Float32() + strMsg.data = revolutionsOutput + publisher.publish(strMsg) + + # Left middle wheel + def mid_left_drive_motor(self, amount): + revolutionsOutput = self.velocityConversion(amount) + publisher = robotPublishers['mid_left_drive_motor'] + strMsg = Float32() + strMsg.data = revolutionsOutput + publisher.publish(strMsg) + + # Right middle wheel + def mid_right_drive_motor(self, amount): + revolutionsOutput = self.velocityConversion(amount) + publisher = robotPublishers['mid_right_drive_motor'] + strMsg = Float32() + strMsg.data = revolutionsOutput + publisher.publish(strMsg) + + # Left back wheel + def rear_left_drive_motor(self, amount): + revolutionsOutput = self.velocityConversion(amount) + publisher = robotPublishers['rear_left_drive_motor'] + strMsg = Float32() + strMsg.data = revolutionsOutput + publisher.publish(strMsg) + + # Right back wheel + def rear_right_drive_motor(self, amount): + revolutionsOutput = self.velocityConversion(amount) + publisher = robotPublishers['rear_right_drive_motor'] + strMsg = Float32() + strMsg.data = revolutionsOutput + publisher.publish(strMsg) + + # Arm turntable + def arm_turntable_motor(self, amount): + revolutionsOutput = self.positionConversion(amount) #* 5.204 # 5.204 is the gear ratio for turntable + publisher = robotPublishers['arm_turntable_motor'] + strMsg = Float32() + strMsg.data = revolutionsOutput + publisher.publish(strMsg) + + # Arm Shoulder movement + def arm_shoulder_motor(self, amount): + revolutionsOutput = self.positionConversion(amount) * 3.979 # 3.979 is gear ratio for shoulder + publisher = robotPublishers['arm_shoulder_motor'] + strMsg = Float32() + strMsg.data = revolutionsOutput + publisher.publish(strMsg) + + # Arm Elbow movement + def arm_elbow_motor(self, amount): + revolutionsOutput = self.positionConversion(amount) * 5.204 # 5.204 is gear ratio for elbow + publisher = robotPublishers['arm_elbow_motor'] + strMsg = Float32() + strMsg.data = revolutionsOutput + publisher.publish(strMsg) + + # Arm Forearm movement + def arm_forearm_motor(self, amount): + revolutionsOutput = self.positionConversion(amount) * 3.820 # 3.820 is gear ratio for forearm + publisher = robotPublishers['arm_forearm_motor'] + strMsg = Float32() + strMsg.data = revolutionsOutput + publisher.publish(strMsg) + + # Arm Up Down Wrist movement + def arm_wrist_updown_motor(self, amount): + revolutionsOutput = self.positionConversion(amount) * 3.820 # 3.820 is gear ratio for wrist up down + publisher = robotPublishers['arm_wrist_updown_motor'] + strMsg = Float32() + strMsg.data = revolutionsOutput + publisher.publish(strMsg) + + # Arm Wrist rotation movement + def arm_wrist_rotation_motor(self, amount): + revolutionsOutput = self.positionConversion(amount) / 6.283 # 6.283 is gear ratio for wrist rotation + publisher = robotPublishers['arm_wrist_rotation_motor'] + strMsg = Float32() + strMsg.data = revolutionsOutput + publisher.publish(strMsg) + + # Arm Hand movement + def arm_hand_motor(self, amount): + revolutionsOutput = self.positionConversion(amount) + publisher = robotPublishers['arm_hand_motor'] + strMsg = Float32() + strMsg.data = revolutionsOutput + publisher.publish(strMsg) + + # Arm Finger movement + def arm_fingers_motor(self, amount): + revolutionsOutput = self.positionConversion(amount) + publisher = robotPublishers['arm_fingers_motor'] + strMsg = Float32() + strMsg.data = revolutionsOutput + publisher.publish(strMsg) + + # Antenna movement + def antenna_motor_extend(self): + # Output is in "revolutions" + revolutionsOutput = 1 # we don't know the actual position it should be. this is a placeholder + publisher = robotPublishers['antenna_motor'] + strMsg = Float32() + strMsg.data = revolutionsOutput + publisher.publish(strMsg) + + def antenna_motor_retract(self): + # Output is in "revolutions" + revolutionsOutput = 0 # we don't know the actual position it should be. this is a placeholder + publisher = robotPublishers['antenna_motor'] + strMsg = Float32() + strMsg.data = revolutionsOutput + publisher.publish(strMsg) + + def antenna_turntable_motor(self, amount): + revolutionsOutput = self.positionConversion(amount) + publisher = robotPublishers['antenna_turntable_motor'] + strMsg = Float32() + strMsg.data = revolutionsOutput + publisher.publish(strMsg) + + +class MyTestingNode(Node): + def __init__(self): + super().__init__('my_testing_node') + #self.create_timer(0.2, self.timer_callback) + self.get_logger().info("Hello ROS2") + #def timer_callback(self): + # self.get_logger().info("Hello ROS2") + +def main(args=None): + rclpy.init(args=args) + + testNode = MyTestingNode() + + object1 = RobotInterface(testNode) + + object1.front_left_drive_motor(10) + object1.front_right_drive_motor(15) + object1.mid_left_drive_motor(20) + object1.mid_right_drive_motor(25) + object1.rear_left_drive_motor(30) + object1.rear_right_drive_motor(9999) + + rclpy.spin(testNode) + + # Destroy the node explicitly + # (optional - otherwise it will be done automatically + # when the garbage collector destroys the node object) + testNode.destroy_node() + rclpy.shutdown() + + +if __name__ == '__main__': + main() diff --git a/src/testingInterface/package.xml b/src/testingInterface/package.xml new file mode 100644 index 0000000..3847a6e --- /dev/null +++ b/src/testingInterface/package.xml @@ -0,0 +1,37 @@ + + + +<<<<<<<< HEAD:src/custom_interfaces/package.xml + custom_interfaces + 0.0.0 + TODO: Package description + trickfire + TODO: License declaration + + ament_cmake + + rosidl_default_generators + + rosidl_default_runtime + + rosidl_interface_packages + + ament_lint_auto + ament_lint_common +======== + testingInterface + 0.0.0 + TODO: Package description + trickfire + TODO: License declaration + + ament_copyright + ament_flake8 + ament_pep257 + python3-pytest +>>>>>>>> e9f631c (Robot Interface Merge (#24)):src/testingInterface/package.xml + + + ament_python + + diff --git a/src/testingInterface/resource/testingInterface b/src/testingInterface/resource/testingInterface new file mode 100644 index 0000000..e69de29 diff --git a/src/testingInterface/setup.cfg b/src/testingInterface/setup.cfg new file mode 100644 index 0000000..93c251d --- /dev/null +++ b/src/testingInterface/setup.cfg @@ -0,0 +1,4 @@ +[develop] +script_dir=$base/lib/testingInterface +[install] +install_scripts=$base/lib/testingInterface diff --git a/src/testingInterface/setup.py b/src/testingInterface/setup.py new file mode 100644 index 0000000..985d64d --- /dev/null +++ b/src/testingInterface/setup.py @@ -0,0 +1,26 @@ +from setuptools import setup + +package_name = 'testingInterface' + +setup( + name=package_name, + version='0.0.0', + packages=[package_name], + data_files=[ + ('share/ament_index/resource_index/packages', + ['resource/' + package_name]), + ('share/' + package_name, ['package.xml']), + ], + install_requires=['setuptools'], + zip_safe=True, + maintainer='trickfire', + maintainer_email='matthew.c.perry@outlook.com', + description='TODO: Package description', + license='TODO: License declaration', + tests_require=['pytest'], + entry_points={ + 'console_scripts': [ + 'testingInterface = testingInterface.testingNode:main' + ], + }, +) diff --git a/src/testingInterface/test/test_copyright.py b/src/testingInterface/test/test_copyright.py new file mode 100644 index 0000000..97a3919 --- /dev/null +++ b/src/testingInterface/test/test_copyright.py @@ -0,0 +1,25 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_copyright.main import main +import pytest + + +# Remove the `skip` decorator once the source file(s) have a copyright header +@pytest.mark.skip(reason='No copyright header has been placed in the generated source file.') +@pytest.mark.copyright +@pytest.mark.linter +def test_copyright(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found errors' diff --git a/src/testingInterface/test/test_flake8.py b/src/testingInterface/test/test_flake8.py new file mode 100644 index 0000000..27ee107 --- /dev/null +++ b/src/testingInterface/test/test_flake8.py @@ -0,0 +1,25 @@ +# Copyright 2017 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_flake8.main import main_with_errors +import pytest + + +@pytest.mark.flake8 +@pytest.mark.linter +def test_flake8(): + rc, errors = main_with_errors(argv=[]) + assert rc == 0, \ + 'Found %d code style errors / warnings:\n' % len(errors) + \ + '\n'.join(errors) diff --git a/src/testingInterface/test/test_pep257.py b/src/testingInterface/test/test_pep257.py new file mode 100644 index 0000000..b234a38 --- /dev/null +++ b/src/testingInterface/test/test_pep257.py @@ -0,0 +1,23 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_pep257.main import main +import pytest + + +@pytest.mark.linter +@pytest.mark.pep257 +def test_pep257(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found code style errors / warnings' diff --git a/src/testingInterface/testingInterface/__init__.py b/src/testingInterface/testingInterface/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/testingInterface/testingInterface/testingNode.py b/src/testingInterface/testingInterface/testingNode.py new file mode 100644 index 0000000..c8f855e --- /dev/null +++ b/src/testingInterface/testingInterface/testingNode.py @@ -0,0 +1,29 @@ +import sys +import rclpy +from rclpy.node import Node +import time + +sys.path.append('/home/trickfire/urc-2023/src/interface') +from robot_interface import RobotInterface + + + +class testingNode(Node): + + def __init__(self): + super().__init__("testing_node") + self.get_logger().info("Launching testing_node node") + robotInterface = RobotInterface(self) + time.sleep(3) + + robotInterface.front_left_drive_motor(0.1) + robotInterface.front_right_drive_motor(0.1 * 12) + robotInterface.mid_left_drive_motor(0.1 * 12) + + +def main(args=None): + rclpy.init(args=args) + node = testingNode() + rclpy.spin(node) + node.destroy_node() + rclpy.shutdown() From 352d4582afbbf885a6500e6116e66f8ead0835e3 Mon Sep 17 00:00:00 2001 From: Kyler Li <46853114+loukylor@users.noreply.github.com> Date: Fri, 5 Jan 2024 15:27:10 -0800 Subject: [PATCH 25/50] Merge RobotInfo (#29) * Add RobotInfo * Add ability to convert callback data * [robot_info] add dummy nodes for testing * [robot_info] fix topic name being grabbed incorrectly * Edits for robot info * Add RobotInfo * Add ability to convert callback data * [robot_info] add dummy nodes for testing * [robot_info] fix topic name being grabbed incorrectly * Edits for robot info --------- Co-authored-by: TrickFire Robotics --- src/robot_info/package.xml | 19 +++ src/robot_info/resource/robot_info | 0 src/robot_info/robot_info/__init__.py | 0 src/robot_info/robot_info/robot_info.py | 146 +++++++++++++++++++ src/robot_info/robot_info/test_publisher.py | 35 +++++ src/robot_info/robot_info/test_subscriber.py | 28 ++++ src/robot_info/setup.cfg | 4 + src/robot_info/setup.py | 27 ++++ src/robot_info/test/test_copyright.py | 25 ++++ src/robot_info/test/test_flake8.py | 25 ++++ src/robot_info/test/test_pep257.py | 23 +++ 11 files changed, 332 insertions(+) create mode 100644 src/robot_info/package.xml create mode 100644 src/robot_info/resource/robot_info create mode 100644 src/robot_info/robot_info/__init__.py create mode 100644 src/robot_info/robot_info/robot_info.py create mode 100644 src/robot_info/robot_info/test_publisher.py create mode 100644 src/robot_info/robot_info/test_subscriber.py create mode 100644 src/robot_info/setup.cfg create mode 100644 src/robot_info/setup.py create mode 100644 src/robot_info/test/test_copyright.py create mode 100644 src/robot_info/test/test_flake8.py create mode 100644 src/robot_info/test/test_pep257.py diff --git a/src/robot_info/package.xml b/src/robot_info/package.xml new file mode 100644 index 0000000..7dd6a2e --- /dev/null +++ b/src/robot_info/package.xml @@ -0,0 +1,19 @@ + + + + robot_info + 0.0.0 + TODO: Package description + trickfire + TODO: License declaration + + ament_copyright + ament_flake8 + ament_pep257 + python3-pytest + rclpy + + + ament_python + + diff --git a/src/robot_info/resource/robot_info b/src/robot_info/resource/robot_info new file mode 100644 index 0000000..e69de29 diff --git a/src/robot_info/robot_info/__init__.py b/src/robot_info/robot_info/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/robot_info/robot_info/robot_info.py b/src/robot_info/robot_info/robot_info.py new file mode 100644 index 0000000..394ca76 --- /dev/null +++ b/src/robot_info/robot_info/robot_info.py @@ -0,0 +1,146 @@ +import math +from typing import Any, Callable, get_args, Literal, TYPE_CHECKING + +from rclpy.node import Node +from std_msgs.msg import Float32 + + +# Because I don't want to write a thousand getters, the getters are made +# dynamically. But because of this, you really have to shoehorn things to make +# pylance (autofill) detect something as a valid attribute. Unfortunately, +# this workaround won't be able to add types to attributes. + +# Anything in this literal will be picked up as a valid attribute. +ATTRIBUTES = Literal[ + "front_left_drive_motor_velocity_from_can", + # "mid_left_drive_motor_velocity", + # "back_left_drive_motor_velocity", + # "front_right_drive_motor_velocity", + # "mid_right_drive_motor_velocity", + # "back_right_drive_motor_velocity", + # "front_left_drive_motor_torque", + # "mid_left_drive_motor_torque", + # "back_left_drive_motor_torque", + # "front_right_drive_motor_torque", + # "mid_right_drive_motor_torque", + # "back_right_drive_motor_torque", + # "front_left_drive_motor_temperature", + # "mid_left_drive_motor_temperature", + # "back_left_drive_motor_temperature", + # "front_right_drive_motor_temperature", + # "mid_right_drive_motor_temperature", + # "back_right_drive_motor_temperature" +] + +# Every type in this tuple is the type used for the topic at the same index in +# ATTRIBUTES +TYPES = ( + Float32, + Float32, + Float32, + Float32, + Float32, + Float32, + Float32, + Float32, + Float32, + Float32, + Float32, + Float32, + Float32, + Float32, + Float32, + Float32, + Float32, + Float32 +) + + +def rotations_to_radians(rotations: float): + """Converts the given rotations to radians. + + Args: + rotations (float): The rotations to convert + + Returns: + float: The given rotations converted to radians. + """ + return rotations * 2 * math.pi + + +# Every method in this tuple is the method used to convert the data in the +# message used for the topic at the same index in ATTRIBUTES. None signifies no +# converter is needed. +CONVERTERS = ( + rotations_to_radians, + rotations_to_radians, + rotations_to_radians, + rotations_to_radians, + rotations_to_radians, + rotations_to_radians, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None, + None +) + + +class RobotInfo: + """RobotInfo is a class that subscribes to relevant topics and provides an + attribute for each value. + + Any attribute that hasn't been assigned a value by an event yet will have a + value of `None`. + """ + def __init__(self, node: Node, callback: Callable[[str, Any], Any] = None): + """Creates a RobotInfo instance. + + Args: + node (Node): The node RobotInfo uses to subscribe. + callback (Callable[[str, Any], Any]): A callback invoked whenever a + subscription was received. + """ + self.callback = callback + + # Create subscriptions + zipped = zip(get_args(ATTRIBUTES), TYPES, CONVERTERS) + for topic, type, converter in zipped: + callback = self._create_callback(converter, topic) + node.create_subscription(type, topic, callback, 10) + + # Initialize attribute + setattr(self, topic, None) + + # TYPE_CHECKING is true while coding (aka while type checking) and false + # during runtime, this ensures things that don't need to be defined during + # runtime aren't defined. + if TYPE_CHECKING: + # This method's sole purpose is to tell autofill that a certain + # attribute exists. Anything in the literal on name will be picked up + # as an attribute. + def __getattr__(self, _: ATTRIBUTES): + pass + + def _create_callback(self, converter, topic): + def wrapper(msg): + # setattr(self, "name", "example value") is equivalent to + # self.name = "example value" + # so it actually sets the attribute on the RobotInfo object itself. + data = msg.data + if converter is not None: + data = converter(data) + setattr(self, topic, data) + + if self.callback is not None: + self.callback(topic, data) + + return wrapper diff --git a/src/robot_info/robot_info/test_publisher.py b/src/robot_info/robot_info/test_publisher.py new file mode 100644 index 0000000..0106429 --- /dev/null +++ b/src/robot_info/robot_info/test_publisher.py @@ -0,0 +1,35 @@ +import random + +import rclpy +from rclpy.node import Node + +from std_msgs.msg import Float32 + + +TOPIC1 = "front_left_drive_motor_velocity_from_robot_interface" + + +class TestPublisher(Node): + def __init__(self): + super().__init__("test_publisher") + self.get_logger().info("Hello World") + + self.create_timer(0.5, self.callback) + + self.publisher1 = self.create_publisher(Float32, TOPIC1, 10) + + def callback(self): + msg1 = Float32() + msg1.data = 0.5 + self.publisher1.publish(msg1) + + +def main(args=None): + rclpy.init(args=args) + publisher = TestPublisher() + rclpy.spin(publisher) + rclpy.shutdown() + + +if __name__ == '__main__': + main() diff --git a/src/robot_info/robot_info/test_subscriber.py b/src/robot_info/robot_info/test_subscriber.py new file mode 100644 index 0000000..f2684a6 --- /dev/null +++ b/src/robot_info/robot_info/test_subscriber.py @@ -0,0 +1,28 @@ +import rclpy +from rclpy.node import Node + +from .robot_info import RobotInfo + + +class TestSubscriber(Node): + def __init__(self): + super().__init__("test_subscriber") + self.get_logger().info("Hello World!") + self.info = RobotInfo(self, self.callback) + + def callback(self, topic, data): + self.get_logger().info(f"received topic: {topic}; data: {data}") + self.get_logger().info("info.front_left_drive_motor_velocity_from_can: " + + str(self.info.front_left_drive_motor_velocity_from_can)) + + + +def main(args=None): + rclpy.init(args=args) + subscriber = TestSubscriber() + rclpy.spin(subscriber) + rclpy.shutdown() + + +if __name__ == '__main__': + main() diff --git a/src/robot_info/setup.cfg b/src/robot_info/setup.cfg new file mode 100644 index 0000000..404d555 --- /dev/null +++ b/src/robot_info/setup.cfg @@ -0,0 +1,4 @@ +[develop] +script_dir=$base/lib/robot_info +[install] +install_scripts=$base/lib/robot_info diff --git a/src/robot_info/setup.py b/src/robot_info/setup.py new file mode 100644 index 0000000..8141076 --- /dev/null +++ b/src/robot_info/setup.py @@ -0,0 +1,27 @@ +from setuptools import find_packages, setup + +package_name = 'robot_info' + +setup( + name=package_name, + version='0.0.0', + packages=find_packages(exclude=['test']), + data_files=[ + ('share/ament_index/resource_index/packages', + ['resource/' + package_name]), + ('share/' + package_name, ['package.xml']), + ], + install_requires=['setuptools'], + zip_safe=True, + maintainer='trickfire', + maintainer_email='loukylor@gmail.com', + description='TODO: Package description', + license='TODO: License declaration', + tests_require=['pytest'], + entry_points={ + 'console_scripts': [ + "talker = robot_info.test_publisher:main", + "listener = robot_info.test_subscriber:main" + ], + }, +) diff --git a/src/robot_info/test/test_copyright.py b/src/robot_info/test/test_copyright.py new file mode 100644 index 0000000..97a3919 --- /dev/null +++ b/src/robot_info/test/test_copyright.py @@ -0,0 +1,25 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_copyright.main import main +import pytest + + +# Remove the `skip` decorator once the source file(s) have a copyright header +@pytest.mark.skip(reason='No copyright header has been placed in the generated source file.') +@pytest.mark.copyright +@pytest.mark.linter +def test_copyright(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found errors' diff --git a/src/robot_info/test/test_flake8.py b/src/robot_info/test/test_flake8.py new file mode 100644 index 0000000..27ee107 --- /dev/null +++ b/src/robot_info/test/test_flake8.py @@ -0,0 +1,25 @@ +# Copyright 2017 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_flake8.main import main_with_errors +import pytest + + +@pytest.mark.flake8 +@pytest.mark.linter +def test_flake8(): + rc, errors = main_with_errors(argv=[]) + assert rc == 0, \ + 'Found %d code style errors / warnings:\n' % len(errors) + \ + '\n'.join(errors) diff --git a/src/robot_info/test/test_pep257.py b/src/robot_info/test/test_pep257.py new file mode 100644 index 0000000..b234a38 --- /dev/null +++ b/src/robot_info/test/test_pep257.py @@ -0,0 +1,23 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_pep257.main import main +import pytest + + +@pytest.mark.linter +@pytest.mark.pep257 +def test_pep257(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found code style errors / warnings' From e4d1e526fdd2e196a809cf550461a091dcd3cc3c Mon Sep 17 00:00:00 2001 From: Carl Klay Date: Mon, 25 Mar 2024 20:45:29 -0700 Subject: [PATCH 26/50] Merge drivebase code (#30) * First commit, added some C++ support * First commit, testing * Added robot_interface.h file * Started working on adding function prototypes to robot_interface.h * update header for robot interface * Created robot_interface.cpp file * add antenna methods * Started converting robot_interface to Python * Added constructor/destructor * Trying to experiment with publisher * Initial drivebase, update docker & settings * Trying to create testing node for publishing testing * Random testing node testing * Got some testing publishers to publish using smaller node. Not sure if it's working correctly * instances robot interface * Added some more testing publisher stuff for all 6 wheels. Removed forward/backward wheel functionality, only single wheel function (positive/negative) * Changed conversion from using diameter to using circumference * importing interface works * change viator launch and cooresponding package xml * First commit, added some C++ support * First commit, testing * Added robot_interface.h file * Started working on adding function prototypes to robot_interface.h * update header for robot interface * Created robot_interface.cpp file * add antenna methods * Started converting robot_interface to Python * Added constructor/destructor * Trying to experiment with publisher * Trying to create testing node for publishing testing * Random testing node testing * Got some testing publishers to publish using smaller node. Not sure if it's working correctly * Added some more testing publisher stuff for all 6 wheels. Removed forward/backward wheel functionality, only single wheel function (positive/negative) * Changed conversion from using diameter to using circumference * change viator launch and cooresponding package xml * update topic/method names * added all methods to robot interface * copy interface to drivebase * fix variable bug * Minor fixes * Add speed const & package description * Convert functions to camelCase * add drivebase to viator launch * basic turn left and right * Getting started * Code overview * Add image * Added simple moteus docs * First moteus docs draft * Clean up moteus docs * Rename moteus_can.md to can_moteus.md * Spelling * Edit getting started documents * Fix gettingstarted link * Added Git section to getting started * Added suggestions from #17 * Add doc for CAN ID values (#19) Added table of what CAN ID values we use for different subsystems. * Update getting_started.md "ROS2" * Create installing_on_mac.md * Update installing_on_mac.md * Update installing_on_mac.md fix numbering * Robot Interface Merge (#24) * First commit, added some C++ support * First commit, testing * Added robot_interface.h file * Started working on adding function prototypes to robot_interface.h * update header for robot interface * Created robot_interface.cpp file * add antenna methods * Started converting robot_interface to Python * Added constructor/destructor * Trying to experiment with publisher * Trying to create testing node for publishing testing * Random testing node testing * Got some testing publishers to publish using smaller node. Not sure if it's working correctly * Added some more testing publisher stuff for all 6 wheels. Removed forward/backward wheel functionality, only single wheel function (positive/negative) * Changed conversion from using diameter to using circumference * change viator launch and cooresponding package xml * First commit, added some C++ support * First commit, testing * Added robot_interface.h file * Started working on adding function prototypes to robot_interface.h * update header for robot interface * Created robot_interface.cpp file * add antenna methods * Started converting robot_interface to Python * Added constructor/destructor * Trying to experiment with publisher * Trying to create testing node for publishing testing * Random testing node testing * Got some testing publishers to publish using smaller node. Not sure if it's working correctly * Added some more testing publisher stuff for all 6 wheels. Removed forward/backward wheel functionality, only single wheel function (positive/negative) * Changed conversion from using diameter to using circumference * change viator launch and cooresponding package xml * added all methods to robot interface * Added arm publishers and renamed other publishers * Followed publisher naming standard * update robot interface * Fix RobotInterface import in testing node * change message values to float 32 * Initial testing works. Tested three methods. Multiple motors move * Changed const variables, changed math and gear ratios * Can2.0 works * Added some comments * Added some comments * Added setupCAN.sh * Position code works with a single motor. Idk why the magic number is 33 for 2pi --------- Co-authored-by: matthewperrywa Co-authored-by: mendomic Co-authored-by: Vladimir Kupryukhin Co-authored-by: agrach Co-authored-by: VladimirKupryukhin * First commit, testing * Created robot_interface.cpp file * change viator launch and cooresponding package xml * Remove stuff to match main * Properly import robot interface * Delete unneeded stuff * Revert "Delete unneeded stuff" This reverts commit c6ac07682d590b3cbda4022836f6630b4f9aeb2e. * Fix message type * Fix stuff * Fix func names and variables * Fix motor * Idk what 70-fdcanusb.rules is * Fix type errors from messages * Both sides of the drivebase spin * Initial drivebase, update docker & settings * instances robot interface * First commit, added some C++ support * First commit, testing * Added robot_interface.h file * Started working on adding function prototypes to robot_interface.h * update header for robot interface * Created robot_interface.cpp file * add antenna methods * Started converting robot_interface to Python * Added constructor/destructor * Trying to experiment with publisher * Trying to create testing node for publishing testing * Random testing node testing * Got some testing publishers to publish using smaller node. Not sure if it's working correctly * Added some more testing publisher stuff for all 6 wheels. Removed forward/backward wheel functionality, only single wheel function (positive/negative) * importing interface works * update topic/method names * First commit, added some C++ support * First commit, testing * Added robot_interface.h file * Started working on adding function prototypes to robot_interface.h * update header for robot interface * Created robot_interface.cpp file * add antenna methods * Started converting robot_interface to Python * Added constructor/destructor * Trying to experiment with publisher * Trying to create testing node for publishing testing * Random testing node testing * Got some testing publishers to publish using smaller node. Not sure if it's working correctly * Added some more testing publisher stuff for all 6 wheels. Removed forward/backward wheel functionality, only single wheel function (positive/negative) * Changed conversion from using diameter to using circumference * change viator launch and cooresponding package xml * change viator launch and cooresponding package xml * added all methods to robot interface * copy interface to drivebase * fix variable bug * Minor fixes * Add speed const & package description * Convert functions to camelCase * add drivebase to viator launch * basic turn left and right * Getting started * Code overview * Added simple moteus docs * First moteus docs draft * Clean up moteus docs * Rename moteus_can.md to can_moteus.md * Spelling * Edit getting started documents * Fix gettingstarted link * Added Git section to getting started * Added suggestions from #17 * Add doc for CAN ID values (#19) Added table of what CAN ID values we use for different subsystems. * Update getting_started.md "ROS2" * Create installing_on_mac.md * Update installing_on_mac.md * Update installing_on_mac.md fix numbering * Robot Interface Merge (#24) * First commit, added some C++ support * First commit, testing * Added robot_interface.h file * Started working on adding function prototypes to robot_interface.h * update header for robot interface * Created robot_interface.cpp file * add antenna methods * Started converting robot_interface to Python * Added constructor/destructor * Trying to experiment with publisher * Trying to create testing node for publishing testing * Random testing node testing * Got some testing publishers to publish using smaller node. Not sure if it's working correctly * Added some more testing publisher stuff for all 6 wheels. Removed forward/backward wheel functionality, only single wheel function (positive/negative) * Changed conversion from using diameter to using circumference * change viator launch and cooresponding package xml * First commit, added some C++ support * First commit, testing * Added robot_interface.h file * Started working on adding function prototypes to robot_interface.h * update header for robot interface * Created robot_interface.cpp file * add antenna methods * Started converting robot_interface to Python * Added constructor/destructor * Trying to experiment with publisher * Trying to create testing node for publishing testing * Random testing node testing * Got some testing publishers to publish using smaller node. Not sure if it's working correctly * Added some more testing publisher stuff for all 6 wheels. Removed forward/backward wheel functionality, only single wheel function (positive/negative) * Changed conversion from using diameter to using circumference * change viator launch and cooresponding package xml * added all methods to robot interface * Added arm publishers and renamed other publishers * Followed publisher naming standard * update robot interface * Fix RobotInterface import in testing node * change message values to float 32 * Initial testing works. Tested three methods. Multiple motors move * Changed const variables, changed math and gear ratios * Can2.0 works * Added some comments * Added some comments * Added setupCAN.sh * Position code works with a single motor. Idk why the magic number is 33 for 2pi --------- Co-authored-by: matthewperrywa Co-authored-by: mendomic Co-authored-by: Vladimir Kupryukhin Co-authored-by: agrach Co-authored-by: VladimirKupryukhin * First commit, testing * Created robot_interface.cpp file * Remove stuff to match main * Properly import robot interface * Delete unneeded stuff * Revert "Delete unneeded stuff" This reverts commit c6ac07682d590b3cbda4022836f6630b4f9aeb2e. * Fix message type * Fix type errors from messages * Both sides of the drivebase spin * made the drivebase work * Removed the print statements that flood the console * launch_only_docker.sh runs launch.sh automatically * launch_only_docker.sh opens in project folder, doesn't run launch.sh * Remove unneeded python linting setting * Change version to 0.0.0 * Update description --------- Co-authored-by: Daniel K Co-authored-by: matthewperrywa Co-authored-by: Vladimir Kupryukhin Co-authored-by: Ezekiel Mitchell <135088287+ezekielmitchell@users.noreply.github.com> Co-authored-by: mendomic Co-authored-by: agrach Co-authored-by: VladimirKupryukhin Co-authored-by: TrickFire Robotics --- 70-fdcanusb.rules | 10 ++++++++++ src/custom_interfaces/robot_interface.py | 4 ++-- 2 files changed, 12 insertions(+), 2 deletions(-) create mode 100644 70-fdcanusb.rules diff --git a/70-fdcanusb.rules b/70-fdcanusb.rules new file mode 100644 index 0000000..9d5b535 --- /dev/null +++ b/70-fdcanusb.rules @@ -0,0 +1,10 @@ +# A udev rule to create a /dev/fdcanusb symlink. +# +# Install into /etc/udev/rules.d: +# sudo cp 70-fdcanusb.rules /etc/udev/rules.d +# +# Then run: +# sudo udevadm control --reload-rules +# sudo udevadm trigger --subsystem-match=tty + +SUBSYSTEM=="tty", ATTRS{manufacturer}=="mjbots", ATTRS{product}=="fdcanusb", MODE="0666", SYMLINK+="fdcanusb" diff --git a/src/custom_interfaces/robot_interface.py b/src/custom_interfaces/robot_interface.py index 88c5e57..331fddd 100644 --- a/src/custom_interfaces/robot_interface.py +++ b/src/custom_interfaces/robot_interface.py @@ -8,8 +8,8 @@ from std_msgs.msg import String from std_msgs.msg import Float32 -VELOCITY_CONVERSION = 1.76838724851 -POSITION_CONVERSION = 33 / (6.28) #Radians to position ticks +VELOCITY_CONVERSION = 1 +POSITION_CONVERSION = 1 / (6.28) #Radians to position ticks robotPublishers = dict() From 921afb872520c18331f005464a81287f101eacc8 Mon Sep 17 00:00:00 2001 From: Vladimir Kupryukhin <45701631+VladimirKupryukhin@users.noreply.github.com> Date: Wed, 10 Jul 2024 19:02:50 -0700 Subject: [PATCH 27/50] Rewrite can_moteus (#41) * Basic node works * Ready to test code * Add launch file modifications * Trying to connect to moteus works * Wheel spins via the robot interface using json * Motors stop after termination * Updated interface to support drivebase * Remove old files. Add shutting motor down when error found * Removed repeated code * Tested stuff * Works * testing canbus disconnection * Canbus disconnection works * Relaunching now works without unplugging.replugging canusb * Added some comments * Motor reconnect works * Proper handling of faults * Handle exception when shutting down. Checks for invalid ros context * Updated RobotInfo * Removed unneeded stuff from the json helpers * Added comments and a few constants * Docs draft 1 * Updated error messages to be more detailed * Some more can_moteus.md docs * Finish documentation * can_modeus.md minor grammar changes --------- Co-authored-by: TrickFire Robotics Co-authored-by: Carl Klay --- docs/OLDcan_moteus.md | 102 +++++++++ .../can_moteus/ros_moteus_bridge.py | 2 +- src/custom_interfaces/robot_info.py | 67 ++++++ src/custom_interfaces/robot_interface.py | 91 ++++---- src/robot_info/robot_info/robot_info.py | 204 ++++++------------ .../testingInterface/testingNode.py | 10 +- src/utility/canbus_mappings.py | 20 ++ src/utility/color_text.py | 12 ++ src/utility/moteus_data_in_json_helper.py | 67 ++++++ src/utility/moteus_data_out_json_helper.py | 48 +++++ 10 files changed, 418 insertions(+), 205 deletions(-) create mode 100644 docs/OLDcan_moteus.md create mode 100644 src/custom_interfaces/robot_info.py create mode 100644 src/utility/canbus_mappings.py create mode 100644 src/utility/color_text.py create mode 100644 src/utility/moteus_data_in_json_helper.py create mode 100644 src/utility/moteus_data_out_json_helper.py diff --git a/docs/OLDcan_moteus.md b/docs/OLDcan_moteus.md new file mode 100644 index 0000000..8e45356 --- /dev/null +++ b/docs/OLDcan_moteus.md @@ -0,0 +1,102 @@ +# The [`can_moteus`](https://github.com/TrickfireRobotics/urc-2023/tree/main/src/can_moteus) Package + + +## **What is it?** +This is a **ROS Node** that is responsible for communication between the [**Moteus motor controllers**](https://github.com/mjbots/moteus) (via a CAN-FD Bus) and **ROS** that the rest of the codebase is written in. + +Motors are created that represent their real-life counterparts. Each motor subscribes to a topic that contains data for the motors to use depending on the motor's mode; i.e. a motor in VELOCITY mode would subscribe to data that would set that motor's velocity. Each motor can publish data to the ROS network that it reads from the Moteus controllers depending on what data the programmer wanted that motor to publish. + +The only structure in the whole codebase that should be directly sending data for these motors to subscribe to is the [`RobotInterface`](../src/interface); see [`code_overview.md`](./code_overview.md) for a diagram. + +## **How to use it** + +### **Adding a Motor in Code** +As each Moteus controller is connected to **only a single** motor, each motor is represented as a [`MoteusMotor`](../src/can_moteus/can_moteus/moteus_motor.py) object. However, the [`MoteusMultiprocess`](../src/can_moteus/can_moteus/moteus_multiprocess.py) object, of which only one should exist, handles these `MoteusMotors`. As such, motors are added via the `MoteusMultiprocess` object inside [`ros_moteus_bridge.py`](../src/can_moteus/can_moteus/ros_moteus_bridge.py). + +To create a motor, we need to pass in the following parameters in this order: +- The CAN ID of the motor. This is an **integer** +- The name of the motor. This is a **String** +- The motor mode. This is a **moteus_motor.Mode** +- A list of data to publish to the ROS network. This is an **array of moteus.Register** + +Here is an example of adding a motor + +``` +moteusPubList = [moteus.Register.VELOCITY, moteus.Register.POSITION] + +moteusMultiprocess.addMotor( + 3, + "topmotor", + moteus_motor.Mode.VELOCITY, + moteusPubList, +) +``` +This motor has a CAN ID of **three** with the name **"topmotor"**. The motor is running in **VELOCITY** mode, and as such expects incoming data intended for the motor to set its velocity in Moteus units. Each time the motor reads data from the Moteus controller, it will publish its **VELOCITY** and **POSITION** values to the ROS network in Moteus units. + + +### **Inputs** + +When a motor is created, it will create a ROS subscriber to the following topic: + +```__from_robot_interface``` + +For example, using the motor above, it would subscribe to the topic of: + +```/topmotor_velocity_from_robot_interface``` + +The data sent to this topic will control the particular motor that it is sent to. Keep in mind that this data has to be formatted in Moteus units. + +Every cycle (every 0.02 seconds), the motor will send the last recieved data to send to the Moteus controller. The default is a value of **zero.** + +**NOTE: All subscribers and publishers handle data in std_msgs.msg.Float32** + +### **Outputs** +When a motor is created, it will publish to the following topic(s) depending on the **moteus.Register array** that was passed in. The topic is in the following format: + +```__from_can``` + +For example, using the motor above, it would publish to the topics of: + +```/topmotor_velocity_from_can``` + +```/topmotor_position_from_can``` + +Every cycle (every 0.02 seconds), the motor would read data it recieved from the Moteus controller and publish it. + +**NOTE: All subscribers and publishers handle data in std_msgs.msg.Float32** + +**NOTE: The data that can be sent must match up exactly to the data that the Moteus controllers send back; which is precisely the values from [`moteus.Register`](https://github.com/mjbots/moteus/blob/38d688a933ce1584ee09f2628b5849d5e758ac21/lib/python/moteus/moteus.py#L148)!** + +## **What is a Moteus Unit?** + +The documentation for the Moteus units are found [here](https://github.com/mjbots/moteus/blob/main/docs/reference.md#a2-register-usage). Each type of data has different units, so keep that in mind. + + +## **Deep Dive - How is `can_moteus` Implemented?** + +### **Overview** +The core idea is that there are two distinct Python processes running that communicate with each other via several different multiprocess queues. The first process is the "main" process where ROS lives and does whatever it needs to do. The second process is started by us and is used to send and read data to the Moteus controllers. + +### **Queue From Motors to Moteus Multiprocess** + +Each motor's callback function for their subscribers writes to the `_queueToMoteus` queue (created in `moteus_multiprocess.py`), where only one such queue exists. As such, all motors share this queue. The data that is enqueued is an array of length two in the following format: + +``` +[0] = CANID +[1] = data (position, velocity, etc) +``` + +### **Queue From Multiprocess to Each Motor** +Each motor has its own multiprocess queue, `toPublisherQueue` that is created in `moteus_multiprocess.py`, which is then populated by the Moteus multiprocess for each corresponding motor. The type of data that is sent is dictated by the `moteusPubList` array as seen earlier in the example motor. The data that is enqueued is an array of length two in the following format: + +``` +[0] = moteus.Register +[1] = data (position, velocity, voltage, current, etc) +``` + +### **The Multiprocess Cycle** +Each cycle, 0.02 seconds, the Moteus multiprocess reads the head of the `_queueToMoteus` and updates the set value for the target motor. It then goes through each motor that was succesfully connected to the CAN/CANFD bus and sends their set data. At the same time, it recieves information about the Moteus controller and populates each motor's `toPublisherQueue`. + +Here is a diagram of the process: + +![what](./resources/moteus_docs.png) \ No newline at end of file diff --git a/src/can_moteus/can_moteus/ros_moteus_bridge.py b/src/can_moteus/can_moteus/ros_moteus_bridge.py index 595a279..17888ae 100644 --- a/src/can_moteus/can_moteus/ros_moteus_bridge.py +++ b/src/can_moteus/can_moteus/ros_moteus_bridge.py @@ -104,4 +104,4 @@ def main(args: list[str] | None = None) -> None: if __name__ == "__main__": - main() + main() \ No newline at end of file diff --git a/src/custom_interfaces/robot_info.py b/src/custom_interfaces/robot_info.py new file mode 100644 index 0000000..4476bce --- /dev/null +++ b/src/custom_interfaces/robot_info.py @@ -0,0 +1,67 @@ +import math +from typing import Any, Callable, get_args, Literal, TYPE_CHECKING +import sys +sys.path.append("/home/trickfire/urc-2023/src") + +from utility.canbus_mappings import CanBusMappings +from utility.moteus_data_out_json_helper import MoteusDataOutJsonHelper + +from rclpy.node import Node +from std_msgs.msg import String + +canBusMappings = CanBusMappings() + +moteusTopicList = { + "front_left_drive_motor_from_can", + "mid_left_drive_motor_from_can", + "rear_left_drive_motor_from_can", + "front_right_drive_motor_from_can" + "mid_right_drive_motor_from_can", + "rear_right_drive_motor_from_can", +} + +canIDToMotorName = { + canBusMappings.CANID_FRONT_LEFT_DRIVE_MOTOR: "front_left_drive_motor_from_can", + canBusMappings.CANID_MID_LEFT_DRIVE_MOTOR: "mid_left_drive_motor_from_can", + canBusMappings.CANID_REAR_LEFT_DRIVE_MOTOR: "rear_left_drive_motor_from_can", + canBusMappings.CANID_FRONT_RIGHT_DRIVE_MOTOR: "front_right_drive_motor_from_can", + canBusMappings.CANID_MID_RIGHT_DRIVE_MOTOR: "mid_right_drive_motor_from_can", + canBusMappings.CANID_REAR_RIGHT_DRIVE_MOTOR: "rear_right_drive_motor_from_can" +} + + + +class RobotInfo(): + + + def __init__(self, rosNode : Node): + self._rosNode = rosNode + self.moteusNameToJSON = {} + self.subList = [] + self.createNameToJSONMapping() + self.createSubscribers() + + + def createNameToJSONMapping(self): + for name in moteusTopicList: + self.moteusNameToJSON[name] = MoteusDataOutJsonHelper() + + def createSubscribers(self): + for name in moteusTopicList: + sub = self._rosNode.create_subscription(String, name, self.subCallback, 1) + self.subList.append(sub) + + def subCallback(self, msg): + jsonHelper = MoteusDataOutJsonHelper() + jsonHelper.buildHelper(msg.data) + moteusName = canIDToMotorName[jsonHelper.canID] + self.moteusNameToJSON[moteusName] = jsonHelper + + + + def getMoteusMotorData(self, canID): + topicName = canIDToMotorName[canID] + return self.moteusNameToJSON[topicName] + + + \ No newline at end of file diff --git a/src/custom_interfaces/robot_interface.py b/src/custom_interfaces/robot_interface.py index 331fddd..0f898bb 100644 --- a/src/custom_interfaces/robot_interface.py +++ b/src/custom_interfaces/robot_interface.py @@ -10,6 +10,9 @@ VELOCITY_CONVERSION = 1 POSITION_CONVERSION = 1 / (6.28) #Radians to position ticks +REV_TO_RADIANS = 6.28 # One Revolution = 2pi + +from utility.moteus_data_in_json_helper import MoteusDataInJsonHelper robotPublishers = dict() @@ -23,17 +26,17 @@ def __init__(self, rosNode): print("GOT TO __init__") # Drive base - publisher = self._rosNode.create_publisher(Float32, 'front_left_drive_motor_velocity_from_interface', 10) + publisher = self._rosNode.create_publisher(String, 'front_left_drive_motor_from_interface', 10) robotPublishers['front_left_drive_motor'] = publisher - publisher = self._rosNode.create_publisher(Float32, 'front_right_drive_motor_velocity_from_interface', 10) + publisher = self._rosNode.create_publisher(String, 'front_right_drive_motor_from_interface', 10) robotPublishers['front_right_drive_motor'] = publisher - publisher = self._rosNode.create_publisher(Float32, 'mid_left_drive_motor_velocity_from_interface', 10) + publisher = self._rosNode.create_publisher(String, 'mid_left_drive_motor_from_interface', 10) robotPublishers['mid_left_drive_motor'] = publisher - publisher = self._rosNode.create_publisher(Float32, 'mid_right_drive_motor_velocity_from_interface', 10) + publisher = self._rosNode.create_publisher(String, 'mid_right_drive_motor_from_interface', 10) robotPublishers['mid_right_drive_motor'] = publisher - publisher = self._rosNode.create_publisher(Float32, 'rear_left_drive_motor_velocity_from_interface', 10) + publisher = self._rosNode.create_publisher(String, 'rear_left_drive_motor_from_interface', 10) robotPublishers['rear_left_drive_motor'] = publisher - publisher = self._rosNode.create_publisher(Float32, 'rear_right_drive_motor_velocity_from_interface', 10) + publisher = self._rosNode.create_publisher(String, 'rear_right_drive_motor_from_interface', 10) robotPublishers['rear_right_drive_motor'] = publisher # Arm @@ -67,17 +70,7 @@ def velocityConversion(self, amount): # Converting from input "radians" to output "revolutions" def positionConversion(self, amount): return amount * POSITION_CONVERSION - - # RobotInterface(const RobotInterface&) = delete; - # RobotInterface& operator=(const RobotInterface&) = delete; - # RobotInterface(RobotInterface&&) = delete; - # RobotInterface& operator=(RobotInterface&&) = delete; - - - # - # Movement - # - + # General movement including all wheels def moveForward(): print() @@ -88,58 +81,46 @@ def turnLeft(self, amount): def turnRight(self, amount): print() - # Left front wheel - def front_left_drive_motor(self, amount): - revolutionsOutput = self.velocityConversion(amount) - publisher = robotPublishers['front_left_drive_motor'] - strMsg = Float32() - strMsg.data = revolutionsOutput - #self._rosNode.get_logger().info(str(revolutionsOutput)) - publisher.publish(strMsg) + # Left front wheel - MEASURED IN REVOLUTIONS PER SECOND + def front_left_drive_motor(self, amount): + self._send_drive_motor("front_left_drive_motor", radiansPerSecond = (amount * REV_TO_RADIANS)) # Right front wheel def front_right_drive_motor(self, amount): - revolutionsOutput = self.velocityConversion(amount) - publisher = robotPublishers['front_right_drive_motor'] - strMsg = Float32() - strMsg.data = revolutionsOutput - publisher.publish(strMsg) + self._send_drive_motor("front_right_drive_motor", radiansPerSecond = (amount * REV_TO_RADIANS)) # Left middle wheel def mid_left_drive_motor(self, amount): - revolutionsOutput = self.velocityConversion(amount) - publisher = robotPublishers['mid_left_drive_motor'] - strMsg = Float32() - strMsg.data = revolutionsOutput - publisher.publish(strMsg) + self._send_drive_motor("mid_left_drive_motor", radiansPerSecond = (amount * REV_TO_RADIANS)) # Right middle wheel def mid_right_drive_motor(self, amount): - revolutionsOutput = self.velocityConversion(amount) - publisher = robotPublishers['mid_right_drive_motor'] - strMsg = Float32() - strMsg.data = revolutionsOutput - publisher.publish(strMsg) + self._send_drive_motor("mid_right_drive_motor", radiansPerSecond = (amount * REV_TO_RADIANS)) # Left back wheel def rear_left_drive_motor(self, amount): - revolutionsOutput = self.velocityConversion(amount) - publisher = robotPublishers['rear_left_drive_motor'] - strMsg = Float32() - strMsg.data = revolutionsOutput - publisher.publish(strMsg) + self._send_drive_motor("rear_left_drive_motor", radiansPerSecond = (amount * REV_TO_RADIANS)) # Right back wheel def rear_right_drive_motor(self, amount): - revolutionsOutput = self.velocityConversion(amount) - publisher = robotPublishers['rear_right_drive_motor'] - strMsg = Float32() - strMsg.data = revolutionsOutput + self._send_drive_motor("rear_right_drive_motor", radiansPerSecond = (amount * REV_TO_RADIANS)) + + def _send_drive_motor(self, pubName, radiansPerSecond = 0): + publisher = robotPublishers[pubName] + + strMsg = String() + jsonHelper = MoteusDataInJsonHelper() + jsonHelper.velocity = radiansPerSecond + jsonHelper.setStop = False + + strMsg.data = jsonHelper.buildJSONString() publisher.publish(strMsg) + + # Arm turntable def arm_turntable_motor(self, amount): - revolutionsOutput = self.positionConversion(amount) #* 5.204 # 5.204 is the gear ratio for turntable + revolutionsOutput = self.positionConversion(amount) publisher = robotPublishers['arm_turntable_motor'] strMsg = Float32() strMsg.data = revolutionsOutput @@ -147,7 +128,7 @@ def arm_turntable_motor(self, amount): # Arm Shoulder movement def arm_shoulder_motor(self, amount): - revolutionsOutput = self.positionConversion(amount) * 3.979 # 3.979 is gear ratio for shoulder + revolutionsOutput = self.positionConversion(amount) * 3.979 publisher = robotPublishers['arm_shoulder_motor'] strMsg = Float32() strMsg.data = revolutionsOutput @@ -155,7 +136,7 @@ def arm_shoulder_motor(self, amount): # Arm Elbow movement def arm_elbow_motor(self, amount): - revolutionsOutput = self.positionConversion(amount) * 5.204 # 5.204 is gear ratio for elbow + revolutionsOutput = self.positionConversion(amount) * 5.204 publisher = robotPublishers['arm_elbow_motor'] strMsg = Float32() strMsg.data = revolutionsOutput @@ -163,7 +144,7 @@ def arm_elbow_motor(self, amount): # Arm Forearm movement def arm_forearm_motor(self, amount): - revolutionsOutput = self.positionConversion(amount) * 3.820 # 3.820 is gear ratio for forearm + revolutionsOutput = self.positionConversion(amount) * 3.820 publisher = robotPublishers['arm_forearm_motor'] strMsg = Float32() strMsg.data = revolutionsOutput @@ -171,7 +152,7 @@ def arm_forearm_motor(self, amount): # Arm Up Down Wrist movement def arm_wrist_updown_motor(self, amount): - revolutionsOutput = self.positionConversion(amount) * 3.820 # 3.820 is gear ratio for wrist up down + revolutionsOutput = self.positionConversion(amount) * 3.820 publisher = robotPublishers['arm_wrist_updown_motor'] strMsg = Float32() strMsg.data = revolutionsOutput @@ -179,7 +160,7 @@ def arm_wrist_updown_motor(self, amount): # Arm Wrist rotation movement def arm_wrist_rotation_motor(self, amount): - revolutionsOutput = self.positionConversion(amount) / 6.283 # 6.283 is gear ratio for wrist rotation + revolutionsOutput = self.positionConversion(amount) / 6.283 publisher = robotPublishers['arm_wrist_rotation_motor'] strMsg = Float32() strMsg.data = revolutionsOutput diff --git a/src/robot_info/robot_info/robot_info.py b/src/robot_info/robot_info/robot_info.py index 394ca76..9254c64 100644 --- a/src/robot_info/robot_info/robot_info.py +++ b/src/robot_info/robot_info/robot_info.py @@ -1,146 +1,66 @@ import math from typing import Any, Callable, get_args, Literal, TYPE_CHECKING +import sys +sys.path.append("/home/trickfire/urc-2023/src") -from rclpy.node import Node -from std_msgs.msg import Float32 - - -# Because I don't want to write a thousand getters, the getters are made -# dynamically. But because of this, you really have to shoehorn things to make -# pylance (autofill) detect something as a valid attribute. Unfortunately, -# this workaround won't be able to add types to attributes. - -# Anything in this literal will be picked up as a valid attribute. -ATTRIBUTES = Literal[ - "front_left_drive_motor_velocity_from_can", - # "mid_left_drive_motor_velocity", - # "back_left_drive_motor_velocity", - # "front_right_drive_motor_velocity", - # "mid_right_drive_motor_velocity", - # "back_right_drive_motor_velocity", - # "front_left_drive_motor_torque", - # "mid_left_drive_motor_torque", - # "back_left_drive_motor_torque", - # "front_right_drive_motor_torque", - # "mid_right_drive_motor_torque", - # "back_right_drive_motor_torque", - # "front_left_drive_motor_temperature", - # "mid_left_drive_motor_temperature", - # "back_left_drive_motor_temperature", - # "front_right_drive_motor_temperature", - # "mid_right_drive_motor_temperature", - # "back_right_drive_motor_temperature" -] - -# Every type in this tuple is the type used for the topic at the same index in -# ATTRIBUTES -TYPES = ( - Float32, - Float32, - Float32, - Float32, - Float32, - Float32, - Float32, - Float32, - Float32, - Float32, - Float32, - Float32, - Float32, - Float32, - Float32, - Float32, - Float32, - Float32 -) - - -def rotations_to_radians(rotations: float): - """Converts the given rotations to radians. - - Args: - rotations (float): The rotations to convert - - Returns: - float: The given rotations converted to radians. - """ - return rotations * 2 * math.pi - - -# Every method in this tuple is the method used to convert the data in the -# message used for the topic at the same index in ATTRIBUTES. None signifies no -# converter is needed. -CONVERTERS = ( - rotations_to_radians, - rotations_to_radians, - rotations_to_radians, - rotations_to_radians, - rotations_to_radians, - rotations_to_radians, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None, - None -) +from utility.canbus_mappings import CanBusMappings +from utility.moteus_data_out_json_helper import MoteusDataOutJsonHelper - -class RobotInfo: - """RobotInfo is a class that subscribes to relevant topics and provides an - attribute for each value. - - Any attribute that hasn't been assigned a value by an event yet will have a - value of `None`. - """ - def __init__(self, node: Node, callback: Callable[[str, Any], Any] = None): - """Creates a RobotInfo instance. - - Args: - node (Node): The node RobotInfo uses to subscribe. - callback (Callable[[str, Any], Any]): A callback invoked whenever a - subscription was received. - """ - self.callback = callback - - # Create subscriptions - zipped = zip(get_args(ATTRIBUTES), TYPES, CONVERTERS) - for topic, type, converter in zipped: - callback = self._create_callback(converter, topic) - node.create_subscription(type, topic, callback, 10) - - # Initialize attribute - setattr(self, topic, None) - - # TYPE_CHECKING is true while coding (aka while type checking) and false - # during runtime, this ensures things that don't need to be defined during - # runtime aren't defined. - if TYPE_CHECKING: - # This method's sole purpose is to tell autofill that a certain - # attribute exists. Anything in the literal on name will be picked up - # as an attribute. - def __getattr__(self, _: ATTRIBUTES): - pass - - def _create_callback(self, converter, topic): - def wrapper(msg): - # setattr(self, "name", "example value") is equivalent to - # self.name = "example value" - # so it actually sets the attribute on the RobotInfo object itself. - data = msg.data - if converter is not None: - data = converter(data) - setattr(self, topic, data) - - if self.callback is not None: - self.callback(topic, data) - - return wrapper +from rclpy.node import Node +from std_msgs.msg import String + +canBusMappings = CanBusMappings() + +moteusTopicList = { + "front_left_drive_motor_from_can", + "mid_left_drive_motor_from_can", + "rear_left_drive_motor_from_can", + "front_right_drive_motor_from_can" + "mid_right_drive_motor_from_can", + "rear_right_drive_motor_from_can", +} + +canIDToMotorName = { + canBusMappings.CANID_FRONT_LEFT_DRIVE_MOTOR: "front_left_drive_motor_from_can", + canBusMappings.CANID_MID_LEFT_DRIVE_MOTOR: "mid_left_drive_motor_from_can", + canBusMappings.CANID_REAR_LEFT_DRIVE_MOTOR: "rear_left_drive_motor_from_can", + canBusMappings.CANID_FRONT_RIGHT_DRIVE_MOTOR: "front_right_drive_motor_from_can", + canBusMappings.CANID_MID_RIGHT_DRIVE_MOTOR: "mid_right_drive_motor_from_can", + canBusMappings.CANID_REAR_RIGHT_DRIVE_MOTOR: "rear_right_drive_motor_from_can" +} + + + +class RobotInfo(): + + + def __init__(self, rosNode : Node): + self._rosNode = rosNode + self.moteusNameToJSON = {} + self.subList = [] + self.createNameToJSONMapping() + self.createSubscribers() + + + def createNameToJSONMapping(self): + for name in moteusTopicList: + self.moteusNameToJSON[name] = MoteusDataOutJsonHelper() + + def createSubscribers(self): + for name in moteusTopicList: + sub = self._rosNode.create_subscription(String, name, self.subCallback, 1) + self.subList.append(sub) + + def subCallback(self, msg): + jsonHelper = MoteusDataOutJsonHelper() + jsonHelper.buildHelper(msg.data) + moteusName = canBusMappings[jsonHelper.canID] + self.moteusNameToJSON[moteusName] = jsonHelper + + + + def getMoteusMotorData(self, canID): + return self.moteusNameToJSON[canBusMappings[canID]] + + + \ No newline at end of file diff --git a/src/testingInterface/testingInterface/testingNode.py b/src/testingInterface/testingInterface/testingNode.py index c8f855e..0f22bdf 100644 --- a/src/testingInterface/testingInterface/testingNode.py +++ b/src/testingInterface/testingInterface/testingNode.py @@ -8,22 +8,18 @@ -class testingNode(Node): +class TestingNode(Node): def __init__(self): super().__init__("testing_node") self.get_logger().info("Launching testing_node node") robotInterface = RobotInterface(self) - time.sleep(3) - - robotInterface.front_left_drive_motor(0.1) - robotInterface.front_right_drive_motor(0.1 * 12) - robotInterface.mid_left_drive_motor(0.1 * 12) + def main(args=None): rclpy.init(args=args) - node = testingNode() + node = TestingNode() rclpy.spin(node) node.destroy_node() rclpy.shutdown() diff --git a/src/utility/canbus_mappings.py b/src/utility/canbus_mappings.py new file mode 100644 index 0000000..0685983 --- /dev/null +++ b/src/utility/canbus_mappings.py @@ -0,0 +1,20 @@ + +class CanBusMappings(): + + def __init__(self): + # Drivebase + self.CANID_REAR_RIGHT_DRIVE_MOTOR = 20 + self.CANID_MID_RIGHT_DRIVE_MOTOR = 21 + self.CANID_FRONT_RIGHT_DRIVE_MOTOR = 22 + + self.CANID_REAR_LEFT_DRIVE_MOTOR = 23 + self.CANID_MID_LEFT_DRIVE_MOTOR = 24 + self.CANID_FRONT_LEFT_DRIVE_MOTOR = 25 + + # Arm + self.CANID_ARM_SHOULDER_MOTOR = 1 + self.CANID_ARM_ELBOW_MOTOR = 2 + self.CANID_ARM_LEFT_WRIST_MOTOR = 3 + self.CANID_ARM_RIGHT_WRIST_MOTOR = 4 + self.CANID_ARM_TURNTABLE_MOTOR = 5 + diff --git a/src/utility/color_text.py b/src/utility/color_text.py new file mode 100644 index 0000000..060df29 --- /dev/null +++ b/src/utility/color_text.py @@ -0,0 +1,12 @@ + +# "Borrowed" from here: https://stackoverflow.com/questions/287871/how-do-i-print-colored-text-to-the-terminal +class ColorCodes: + PINK = '\033[95m' + BLUE_OK = '\033[94m' + CYAN_OK = '\033[96m' + GREEN_OK = '\033[92m' + WARNING_YELLOW = '\033[93m' + FAIL_RED = '\033[91m' + ENDC = '\033[0m' + BOLD = '\033[1m' + UNDERLINE = '\033[4m' diff --git a/src/utility/moteus_data_in_json_helper.py b/src/utility/moteus_data_in_json_helper.py new file mode 100644 index 0000000..e13bbdb --- /dev/null +++ b/src/utility/moteus_data_in_json_helper.py @@ -0,0 +1,67 @@ +import json +import math + + +class MoteusDataInJsonHelper(): + + def __init__(self): + self.position = None + self.velocity = None + self.feedforward_torque = None + self.kp_scale = None + self.kd_scale = None + self.max_torque = None + self.watchdog_timeout = None + self.velocity_limit = None + self.accel_limit = None + self.fixed_voltage_override = None + + self.setStop = True + + def getPosition(self): + if self.position is None: + return math.nan + + return self.position + + def getVelocity(self): + if self.velocity is None: + return math.nan + + return self.velocity + + + def buildJSONString(self): + pythonDict = { + "position": self.position, + "velocity": self.velocity, + "feedforward_torque": self.feedforward_torque, + "kp_scale": self.kp_scale, + "kd_scale": self.kd_scale, + "max_torque": self.max_torque, + "watchdog_timeout": self.watchdog_timeout, + "velocity_limit": self.velocity_limit, + "accel_limit": self.accel_limit, + "fixed_voltage_override": self.fixed_voltage_override, + "set_stop": self.setStop + } + + return json.dumps(pythonDict) + + + def buildHelper(self, jsonString): + pythonDict = json.loads(jsonString) + + self.position = pythonDict["position"] + self.velocity = pythonDict["velocity"] + self.feedforward_torque = pythonDict["feedforward_torque"] + self.kp_scale = pythonDict["kp_scale"] + self.kd_scale = pythonDict["kd_scale"] + self.max_torque = pythonDict["max_torque"] + self.watchdog_timeout = pythonDict["watchdog_timeout"] + self.velocity_limit = pythonDict["velocity_limit"] + self.accel_limit = pythonDict["accel_limit"] + self.fixed_voltage_override = pythonDict["fixed_voltage_override"] + self.setStop = pythonDict["set_stop"] + + \ No newline at end of file diff --git a/src/utility/moteus_data_out_json_helper.py b/src/utility/moteus_data_out_json_helper.py new file mode 100644 index 0000000..b47b128 --- /dev/null +++ b/src/utility/moteus_data_out_json_helper.py @@ -0,0 +1,48 @@ +import json + + +class MoteusDataOutJsonHelper(): + + def __init__(self): + # take a look at moteus.Register + self.canID = -1 + self.position = None + self.velocity = None + self.torque = None + self.temperature = None + + self.power = None + self.inputVoltage = None + + + + + + def buildJSONString(self): + pythonDict = { + "canID": self.canID, + "position": self.position, + "velocity": self.velocity, + "torque": self.torque, + "temperature": self.temperature, + "power": self.power, + "inputVoltage": self.inputVoltage, + } + + return json.dumps(pythonDict) + + + def buildHelper(self, jsonString): + pythonDict = json.loads(jsonString) + + self.canID = pythonDict["canID"] + self.position = pythonDict["position"] + self.velocity = pythonDict["velocity"] + self.torque = pythonDict["torque"] + self.temperature = pythonDict["temperature"] + self.power = pythonDict["power"] + self.inputVoltage = pythonDict["inputVoltage"] + + + + \ No newline at end of file From 805ea8cf6f9b77308dd9052d2aac21c8eb88265e Mon Sep 17 00:00:00 2001 From: Vladimir Kupryukhin <45701631+VladimirKupryukhin@users.noreply.github.com> Date: Thu, 22 Aug 2024 17:17:31 -0700 Subject: [PATCH 28/50] Send Telemetry Data to Mission Control (#53) * Basic node setup * Need to test publisher code * Send data to mission control * READING POWER WORKS WOOO * Make moteus send telemetry even when set_stop() --------- Co-authored-by: TrickFire Robotics --- src/custom_interfaces/robot_info.py | 53 +++++++++++++------ .../infoToJSONHelper.py | 26 +++++++++ .../test/test_flake8.py | 25 +++++++++ .../test/test_pep257.py | 23 ++++++++ src/utility/moteus_data_out_json_helper.py | 9 ++-- 5 files changed, 118 insertions(+), 18 deletions(-) create mode 100644 src/mission_control_updater/mission_control_updater/infoToJSONHelper.py create mode 100644 src/mission_control_updater/test/test_flake8.py create mode 100644 src/mission_control_updater/test/test_pep257.py diff --git a/src/custom_interfaces/robot_info.py b/src/custom_interfaces/robot_info.py index 4476bce..f4e433b 100644 --- a/src/custom_interfaces/robot_info.py +++ b/src/custom_interfaces/robot_info.py @@ -36,32 +36,55 @@ class RobotInfo(): def __init__(self, rosNode : Node): self._rosNode = rosNode - self.moteusNameToJSON = {} - self.subList = [] - self.createNameToJSONMapping() + self.subList = [] # empty array + self.canIDToJSON = {} #Dict self.createSubscribers() + self.canIDToJSON[20] = MoteusDataOutJsonHelper() + self.canIDToJSON[21] = MoteusDataOutJsonHelper() + self.canIDToJSON[22] = MoteusDataOutJsonHelper() + self.canIDToJSON[23] = MoteusDataOutJsonHelper() + self.canIDToJSON[24] = MoteusDataOutJsonHelper() + self.canIDToJSON[25] = MoteusDataOutJsonHelper() + + # self.moteusNameToJSON = {} + # self.subList = [] + # self.createNameToJSONMapping() + # self.createSubscribers() - def createNameToJSONMapping(self): - for name in moteusTopicList: - self.moteusNameToJSON[name] = MoteusDataOutJsonHelper() - def createSubscribers(self): - for name in moteusTopicList: - sub = self._rosNode.create_subscription(String, name, self.subCallback, 1) + for topicName in moteusTopicList: + sub = self._rosNode.create_subscription(String, topicName, self.subCallback, 1) self.subList.append(sub) - + def subCallback(self, msg): jsonHelper = MoteusDataOutJsonHelper() jsonHelper.buildHelper(msg.data) - moteusName = canIDToMotorName[jsonHelper.canID] - self.moteusNameToJSON[moteusName] = jsonHelper + self.canIDToJSON[jsonHelper.canID] = jsonHelper + + def getDataFromCanID(self, canID): + return self.canIDToJSON[canID] + + # def createNameToJSONMapping(self): + # for name in moteusTopicList: + # self.moteusNameToJSON[name] = MoteusDataOutJsonHelper() + + # def createSubscribers(self): + # for name in moteusTopicList: + # sub = self._rosNode.create_subscription(String, name, self.subCallback, 1) + # self.subList.append(sub) + + # def subCallback(self, msg): + # jsonHelper = MoteusDataOutJsonHelper() + # jsonHelper.buildHelper(msg.data) + # moteusName = canIDToMotorName[jsonHelper.canID] + # self.moteusNameToJSON[moteusName] = jsonHelper - def getMoteusMotorData(self, canID): - topicName = canIDToMotorName[canID] - return self.moteusNameToJSON[topicName] + # def getMoteusMotorData(self, canID): + # topicName = canIDToMotorName[canID] + # return self.moteusNameToJSON[topicName] \ No newline at end of file diff --git a/src/mission_control_updater/mission_control_updater/infoToJSONHelper.py b/src/mission_control_updater/mission_control_updater/infoToJSONHelper.py new file mode 100644 index 0000000..dd6b949 --- /dev/null +++ b/src/mission_control_updater/mission_control_updater/infoToJSONHelper.py @@ -0,0 +1,26 @@ +import json +import array + + +class InfoToJSONHelper(): + + def __init__(self): + self.moteusEntries = [] + + + + def addMoteusEntry(self, entry): + self.moteusEntries.append(entry) + + def buildJSONString(self): + moteusDictArray = [] + + for moteusEntry in self.moteusEntries: + moteusDictArray.append(moteusEntry.buildPythonDict()) + + pythonDict = { + "moteusMotorLength": len(moteusDictArray), + "moteusMotors": moteusDictArray + } + + return json.dumps(pythonDict) \ No newline at end of file diff --git a/src/mission_control_updater/test/test_flake8.py b/src/mission_control_updater/test/test_flake8.py new file mode 100644 index 0000000..27ee107 --- /dev/null +++ b/src/mission_control_updater/test/test_flake8.py @@ -0,0 +1,25 @@ +# Copyright 2017 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_flake8.main import main_with_errors +import pytest + + +@pytest.mark.flake8 +@pytest.mark.linter +def test_flake8(): + rc, errors = main_with_errors(argv=[]) + assert rc == 0, \ + 'Found %d code style errors / warnings:\n' % len(errors) + \ + '\n'.join(errors) diff --git a/src/mission_control_updater/test/test_pep257.py b/src/mission_control_updater/test/test_pep257.py new file mode 100644 index 0000000..b234a38 --- /dev/null +++ b/src/mission_control_updater/test/test_pep257.py @@ -0,0 +1,23 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_pep257.main import main +import pytest + + +@pytest.mark.linter +@pytest.mark.pep257 +def test_pep257(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found code style errors / warnings' diff --git a/src/utility/moteus_data_out_json_helper.py b/src/utility/moteus_data_out_json_helper.py index b47b128..1f94218 100644 --- a/src/utility/moteus_data_out_json_helper.py +++ b/src/utility/moteus_data_out_json_helper.py @@ -10,7 +10,6 @@ def __init__(self): self.velocity = None self.torque = None self.temperature = None - self.power = None self.inputVoltage = None @@ -19,6 +18,11 @@ def __init__(self): def buildJSONString(self): + pythonDict = self.buildPythonDict() + + return json.dumps(pythonDict) + + def buildPythonDict(self): pythonDict = { "canID": self.canID, "position": self.position, @@ -29,8 +33,7 @@ def buildJSONString(self): "inputVoltage": self.inputVoltage, } - return json.dumps(pythonDict) - + return pythonDict def buildHelper(self, jsonString): pythonDict = json.loads(jsonString) From 88a66fef870d826da577ac1bbff1048aa4d5dc49 Mon Sep 17 00:00:00 2001 From: Vladimir Kupryukhin <45701631+VladimirKupryukhin@users.noreply.github.com> Date: Tue, 10 Sep 2024 09:28:42 -0700 Subject: [PATCH 29/50] arm: Implement basic arm functionality (velocity-based) with an xbox controller (#55) * Basic arm package works. Handle canusb not being plugged in * Basic service works * Change roverROS armstate from mission control * Added unveiling-arm topics for the motors. Need to implement the robotinterface * Updated interface for arm. Untested * Prevent individual control vel from sending when it is disabled * Remove some bad code due to me copy/pasting * Tested. Working * Last commit before merge --------- Co-authored-by: TrickFire Robotics --- src/arm/test/test_flake8.py | 25 +++ src/arm/test/test_pep257.py | 23 +++ src/custom_interfaces/robot_info.py | 54 ++---- src/custom_interfaces/robot_interface.py | 193 ++++++++------------- src/utility/canbus_mappings.py | 31 ++-- src/utility/moteus_data_out_json_helper.py | 6 + 6 files changed, 159 insertions(+), 173 deletions(-) create mode 100644 src/arm/test/test_flake8.py create mode 100644 src/arm/test/test_pep257.py diff --git a/src/arm/test/test_flake8.py b/src/arm/test/test_flake8.py new file mode 100644 index 0000000..27ee107 --- /dev/null +++ b/src/arm/test/test_flake8.py @@ -0,0 +1,25 @@ +# Copyright 2017 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_flake8.main import main_with_errors +import pytest + + +@pytest.mark.flake8 +@pytest.mark.linter +def test_flake8(): + rc, errors = main_with_errors(argv=[]) + assert rc == 0, \ + 'Found %d code style errors / warnings:\n' % len(errors) + \ + '\n'.join(errors) diff --git a/src/arm/test/test_pep257.py b/src/arm/test/test_pep257.py new file mode 100644 index 0000000..b234a38 --- /dev/null +++ b/src/arm/test/test_pep257.py @@ -0,0 +1,23 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_pep257.main import main +import pytest + + +@pytest.mark.linter +@pytest.mark.pep257 +def test_pep257(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found code style errors / warnings' diff --git a/src/custom_interfaces/robot_info.py b/src/custom_interfaces/robot_info.py index f4e433b..a34165e 100644 --- a/src/custom_interfaces/robot_info.py +++ b/src/custom_interfaces/robot_info.py @@ -9,24 +9,20 @@ from rclpy.node import Node from std_msgs.msg import String -canBusMappings = CanBusMappings() + moteusTopicList = { "front_left_drive_motor_from_can", "mid_left_drive_motor_from_can", "rear_left_drive_motor_from_can", - "front_right_drive_motor_from_can" + "front_right_drive_motor_from_can", "mid_right_drive_motor_from_can", "rear_right_drive_motor_from_can", -} - -canIDToMotorName = { - canBusMappings.CANID_FRONT_LEFT_DRIVE_MOTOR: "front_left_drive_motor_from_can", - canBusMappings.CANID_MID_LEFT_DRIVE_MOTOR: "mid_left_drive_motor_from_can", - canBusMappings.CANID_REAR_LEFT_DRIVE_MOTOR: "rear_left_drive_motor_from_can", - canBusMappings.CANID_FRONT_RIGHT_DRIVE_MOTOR: "front_right_drive_motor_from_can", - canBusMappings.CANID_MID_RIGHT_DRIVE_MOTOR: "mid_right_drive_motor_from_can", - canBusMappings.CANID_REAR_RIGHT_DRIVE_MOTOR: "rear_right_drive_motor_from_can" + "arm_turntable_motor_from_can", + "arm_shoulder_motor_from_can", + "arm_elbow_motor_from_can", + "arm_left_wrist_motor_from_can", + "arm_right_wrist_motor_from_can", } @@ -38,7 +34,6 @@ def __init__(self, rosNode : Node): self._rosNode = rosNode self.subList = [] # empty array self.canIDToJSON = {} #Dict - self.createSubscribers() self.canIDToJSON[20] = MoteusDataOutJsonHelper() self.canIDToJSON[21] = MoteusDataOutJsonHelper() @@ -46,11 +41,13 @@ def __init__(self, rosNode : Node): self.canIDToJSON[23] = MoteusDataOutJsonHelper() self.canIDToJSON[24] = MoteusDataOutJsonHelper() self.canIDToJSON[25] = MoteusDataOutJsonHelper() + self.canIDToJSON[1] = MoteusDataOutJsonHelper() + self.canIDToJSON[2] = MoteusDataOutJsonHelper() + self.canIDToJSON[3] = MoteusDataOutJsonHelper() + self.canIDToJSON[4] = MoteusDataOutJsonHelper() + self.canIDToJSON[5] = MoteusDataOutJsonHelper() - # self.moteusNameToJSON = {} - # self.subList = [] - # self.createNameToJSONMapping() - # self.createSubscribers() + self.createSubscribers() def createSubscribers(self): for topicName in moteusTopicList: @@ -62,29 +59,8 @@ def subCallback(self, msg): jsonHelper.buildHelper(msg.data) self.canIDToJSON[jsonHelper.canID] = jsonHelper - def getDataFromCanID(self, canID): + def getDataFromCanID(self, canID): return self.canIDToJSON[canID] - - # def createNameToJSONMapping(self): - # for name in moteusTopicList: - # self.moteusNameToJSON[name] = MoteusDataOutJsonHelper() - - # def createSubscribers(self): - # for name in moteusTopicList: - # sub = self._rosNode.create_subscription(String, name, self.subCallback, 1) - # self.subList.append(sub) - - # def subCallback(self, msg): - # jsonHelper = MoteusDataOutJsonHelper() - # jsonHelper.buildHelper(msg.data) - # moteusName = canIDToMotorName[jsonHelper.canID] - # self.moteusNameToJSON[moteusName] = jsonHelper - - - - # def getMoteusMotorData(self, canID): - # topicName = canIDToMotorName[canID] - # return self.moteusNameToJSON[topicName] - + \ No newline at end of file diff --git a/src/custom_interfaces/robot_interface.py b/src/custom_interfaces/robot_interface.py index 0f898bb..65f453f 100644 --- a/src/custom_interfaces/robot_interface.py +++ b/src/custom_interfaces/robot_interface.py @@ -7,6 +7,7 @@ import std_msgs.msg from std_msgs.msg import String from std_msgs.msg import Float32 +import math VELOCITY_CONVERSION = 1 POSITION_CONVERSION = 1 / (6.28) #Radians to position ticks @@ -23,7 +24,6 @@ class RobotInterface(Node): def __init__(self, rosNode): self._rosNode = rosNode - print("GOT TO __init__") # Drive base publisher = self._rosNode.create_publisher(String, 'front_left_drive_motor_from_interface', 10) @@ -39,20 +39,6 @@ def __init__(self, rosNode): publisher = self._rosNode.create_publisher(String, 'rear_right_drive_motor_from_interface', 10) robotPublishers['rear_right_drive_motor'] = publisher - # Arm - publisher = self._rosNode.create_publisher(Float32, 'arm_turntable_motor_position_from_interface', 10) - robotPublishers['arm_turntable_motor'] = publisher - publisher = self._rosNode.create_publisher(Float32, 'arm_shoulder_motor_position_from_interface', 10) - robotPublishers['arm_shoulder_motor'] = publisher - publisher = self._rosNode.create_publisher(Float32, 'arm_elbow_motor_position_from_interface', 10) - robotPublishers['arm_elbow_motor'] = publisher - publisher = self._rosNode.create_publisher(Float32, 'arm_forearm_motor_position_from_interface', 10) - robotPublishers['arm_forearm_motor'] = publisher - publisher = self._rosNode.create_publisher(Float32, 'arm_wrist_motor_position_from_interface', 10) - robotPublishers['arm_wrist_motor'] = publisher - publisher = self._rosNode.create_publisher(Float32, 'arm_hand_motor_position_from_interface', 10) - robotPublishers['arm_hand_motor'] = publisher - publisher = self._rosNode.create_publisher(Float32, 'arm_fingers_motor_position_from_interface', 10) robotPublishers['arm_fingers_motor'] = publisher # Antenna @@ -60,9 +46,20 @@ def __init__(self, rosNode): robotPublishers['antenna_motor'] = publisher publisher = self._rosNode.create_publisher(Float32, 'antenna_turntable_motor_position_from_interface', 10) robotPublishers['antenna_turntable_motor'] = publisher - - def __del__(self): - print() + + + # Arm + publisher = self._rosNode.create_publisher(String, 'arm_turntable_motor_from_interface', 10) + robotPublishers['arm_turntable_motor'] = publisher + publisher = self._rosNode.create_publisher(String, 'arm_shoulder_motor_from_interface', 10) + robotPublishers['arm_shoulder_motor'] = publisher + publisher = self._rosNode.create_publisher(String, 'arm_elbow_motor_from_interface', 10) + robotPublishers['arm_elbow_motor'] = publisher + publisher = self._rosNode.create_publisher(String, 'arm_left_wrist_motor_from_interface', 10) + robotPublishers['arm_left_wrist_motor'] = publisher + publisher = self._rosNode.create_publisher(String, 'arm_right_wrist_motor_from_interface', 10) + robotPublishers['arm_right_wrist_motor'] = publisher + def velocityConversion(self, amount): return amount * VELOCITY_CONVERSION @@ -81,29 +78,30 @@ def turnLeft(self, amount): def turnRight(self, amount): print() + # ------ DRIVEBASE ------ # Left front wheel - MEASURED IN REVOLUTIONS PER SECOND def front_left_drive_motor(self, amount): - self._send_drive_motor("front_left_drive_motor", radiansPerSecond = (amount * REV_TO_RADIANS)) + self._send_drive_motor("front_left_drive_motor", radiansPerSecond = (amount)) # Right front wheel def front_right_drive_motor(self, amount): - self._send_drive_motor("front_right_drive_motor", radiansPerSecond = (amount * REV_TO_RADIANS)) + self._send_drive_motor("front_right_drive_motor", radiansPerSecond = (amount)) # Left middle wheel def mid_left_drive_motor(self, amount): - self._send_drive_motor("mid_left_drive_motor", radiansPerSecond = (amount * REV_TO_RADIANS)) + self._send_drive_motor("mid_left_drive_motor", radiansPerSecond = (amount)) # Right middle wheel def mid_right_drive_motor(self, amount): - self._send_drive_motor("mid_right_drive_motor", radiansPerSecond = (amount * REV_TO_RADIANS)) + self._send_drive_motor("mid_right_drive_motor", radiansPerSecond = (amount)) # Left back wheel def rear_left_drive_motor(self, amount): - self._send_drive_motor("rear_left_drive_motor", radiansPerSecond = (amount * REV_TO_RADIANS)) + self._send_drive_motor("rear_left_drive_motor", radiansPerSecond = (amount)) # Right back wheel def rear_right_drive_motor(self, amount): - self._send_drive_motor("rear_right_drive_motor", radiansPerSecond = (amount * REV_TO_RADIANS)) + self._send_drive_motor("rear_right_drive_motor", radiansPerSecond = (amount)) def _send_drive_motor(self, pubName, radiansPerSecond = 0): publisher = robotPublishers[pubName] @@ -116,71 +114,63 @@ def _send_drive_motor(self, pubName, radiansPerSecond = 0): strMsg.data = jsonHelper.buildJSONString() publisher.publish(strMsg) - - - # Arm turntable - def arm_turntable_motor(self, amount): - revolutionsOutput = self.positionConversion(amount) - publisher = robotPublishers['arm_turntable_motor'] - strMsg = Float32() - strMsg.data = revolutionsOutput - publisher.publish(strMsg) - - # Arm Shoulder movement - def arm_shoulder_motor(self, amount): - revolutionsOutput = self.positionConversion(amount) * 3.979 - publisher = robotPublishers['arm_shoulder_motor'] - strMsg = Float32() - strMsg.data = revolutionsOutput - publisher.publish(strMsg) - - # Arm Elbow movement - def arm_elbow_motor(self, amount): - revolutionsOutput = self.positionConversion(amount) * 5.204 - publisher = robotPublishers['arm_elbow_motor'] - strMsg = Float32() - strMsg.data = revolutionsOutput - publisher.publish(strMsg) - - # Arm Forearm movement - def arm_forearm_motor(self, amount): - revolutionsOutput = self.positionConversion(amount) * 3.820 - publisher = robotPublishers['arm_forearm_motor'] - strMsg = Float32() - strMsg.data = revolutionsOutput - publisher.publish(strMsg) + # ------ ARM ------ - # Arm Up Down Wrist movement - def arm_wrist_updown_motor(self, amount): - revolutionsOutput = self.positionConversion(amount) * 3.820 - publisher = robotPublishers['arm_wrist_updown_motor'] - strMsg = Float32() - strMsg.data = revolutionsOutput - publisher.publish(strMsg) - - # Arm Wrist rotation movement - def arm_wrist_rotation_motor(self, amount): - revolutionsOutput = self.positionConversion(amount) / 6.283 - publisher = robotPublishers['arm_wrist_rotation_motor'] - strMsg = Float32() - strMsg.data = revolutionsOutput - publisher.publish(strMsg) + def arm_turntable_velocity(self, targetVel): + self._send_arm_velocity("arm_turntable_motor", targetVel) + + def shoulder_velocity(self, targetVel): + self._send_arm_velocity("arm_shoulder_motor", targetVel) + + def elbow_velocity(self, targetVel): + self._send_arm_velocity("arm_elbow_motor", targetVel) + + def leftWrist_velocity(self, targetVel): + self._send_arm_velocity("arm_left_wrist_motor", targetVel) + + def rightWrist_velocity(self, targetVel): + self._send_arm_velocity("arm_right_wrist_motor", targetVel) - # Arm Hand movement - def arm_hand_motor(self, amount): - revolutionsOutput = self.positionConversion(amount) - publisher = robotPublishers['arm_hand_motor'] - strMsg = Float32() - strMsg.data = revolutionsOutput + # For now, I am sending rev/sec + def _send_arm_velocity(self, pubName, velocity = 0): + publisher = robotPublishers[pubName] + + strMsg = String() + jsonHelper = MoteusDataInJsonHelper() + jsonHelper.velocity = velocity + jsonHelper.setStop = False + + strMsg.data = jsonHelper.buildJSONString() publisher.publish(strMsg) + + + def disable_arm_turntable_motor(self): + self._disable_motor("arm_turntable_motor") - # Arm Finger movement - def arm_fingers_motor(self, amount): - revolutionsOutput = self.positionConversion(amount) - publisher = robotPublishers['arm_fingers_motor'] - strMsg = Float32() - strMsg.data = revolutionsOutput + def disable_arm_shoulder_motor(self): + self._disable_motor("arm_shoulder_motor") + + def disable_arm_elbow_motor(self): + self._disable_motor("arm_elbow_motor") + + def disable_arm_left_wrist_motor(self): + self._disable_motor("arm_left_wrist_motor") + + def disable_arm_right_wrist_motor(self): + self._disable_motor("arm_right_wrist_motor") + + def _disable_motor(self, pubName): + publisher = robotPublishers[pubName] + + strMsg = String() + jsonHelper = MoteusDataInJsonHelper() + jsonHelper.velocity = 0 # for extra security + jsonHelper.setStop = True + + strMsg.data = jsonHelper.buildJSONString() publisher.publish(strMsg) + + # Antenna movement def antenna_motor_extend(self): @@ -205,38 +195,3 @@ def antenna_turntable_motor(self, amount): strMsg = Float32() strMsg.data = revolutionsOutput publisher.publish(strMsg) - - -class MyTestingNode(Node): - def __init__(self): - super().__init__('my_testing_node') - #self.create_timer(0.2, self.timer_callback) - self.get_logger().info("Hello ROS2") - #def timer_callback(self): - # self.get_logger().info("Hello ROS2") - -def main(args=None): - rclpy.init(args=args) - - testNode = MyTestingNode() - - object1 = RobotInterface(testNode) - - object1.front_left_drive_motor(10) - object1.front_right_drive_motor(15) - object1.mid_left_drive_motor(20) - object1.mid_right_drive_motor(25) - object1.rear_left_drive_motor(30) - object1.rear_right_drive_motor(9999) - - rclpy.spin(testNode) - - # Destroy the node explicitly - # (optional - otherwise it will be done automatically - # when the garbage collector destroys the node object) - testNode.destroy_node() - rclpy.shutdown() - - -if __name__ == '__main__': - main() diff --git a/src/utility/canbus_mappings.py b/src/utility/canbus_mappings.py index 0685983..cdfa2fc 100644 --- a/src/utility/canbus_mappings.py +++ b/src/utility/canbus_mappings.py @@ -1,20 +1,21 @@ class CanBusMappings(): - - def __init__(self): - # Drivebase - self.CANID_REAR_RIGHT_DRIVE_MOTOR = 20 - self.CANID_MID_RIGHT_DRIVE_MOTOR = 21 - self.CANID_FRONT_RIGHT_DRIVE_MOTOR = 22 + # Drivebase + CANID_REAR_RIGHT_DRIVE_MOTOR = 20 + CANID_MID_RIGHT_DRIVE_MOTOR = 21 + CANID_FRONT_RIGHT_DRIVE_MOTOR = 22 - self.CANID_REAR_LEFT_DRIVE_MOTOR = 23 - self.CANID_MID_LEFT_DRIVE_MOTOR = 24 - self.CANID_FRONT_LEFT_DRIVE_MOTOR = 25 + CANID_REAR_LEFT_DRIVE_MOTOR = 23 + CANID_MID_LEFT_DRIVE_MOTOR = 24 + CANID_FRONT_LEFT_DRIVE_MOTOR = 25 - # Arm - self.CANID_ARM_SHOULDER_MOTOR = 1 - self.CANID_ARM_ELBOW_MOTOR = 2 - self.CANID_ARM_LEFT_WRIST_MOTOR = 3 - self.CANID_ARM_RIGHT_WRIST_MOTOR = 4 - self.CANID_ARM_TURNTABLE_MOTOR = 5 + # Arm + CANID_ARM_SHOULDER_MOTOR = 1 + CANID_ARM_ELBOW_MOTOR = 2 + CANID_ARM_LEFT_WRIST_MOTOR = 3 + CANID_ARM_RIGHT_WRIST_MOTOR = 4 + CANID_ARM_TURNTABLE_MOTOR = 5 + + def __init__(self): + pass diff --git a/src/utility/moteus_data_out_json_helper.py b/src/utility/moteus_data_out_json_helper.py index 1f94218..8e3d515 100644 --- a/src/utility/moteus_data_out_json_helper.py +++ b/src/utility/moteus_data_out_json_helper.py @@ -12,6 +12,8 @@ def __init__(self): self.temperature = None self.power = None self.inputVoltage = None + self.qCurrent = None + self.dCurrent = None @@ -31,6 +33,8 @@ def buildPythonDict(self): "temperature": self.temperature, "power": self.power, "inputVoltage": self.inputVoltage, + "qCurrent": self.qCurrent, + "dCurrent": self.dCurrent } return pythonDict @@ -45,6 +49,8 @@ def buildHelper(self, jsonString): self.temperature = pythonDict["temperature"] self.power = pythonDict["power"] self.inputVoltage = pythonDict["inputVoltage"] + self.qCurrent = pythonDict["qCurrent"] + self.dCurrent = pythonDict["dCurrent"] From c57e7ad0014aff3730d21ef7045cc3b730d8d169 Mon Sep 17 00:00:00 2001 From: Vladimir Kupryukhin Date: Tue, 10 Sep 2024 17:00:18 +0000 Subject: [PATCH 30/50] Remove unused packages, remove unused docs, remove unused shell files --- 70-fdcanusb.rules | 10 -- docs/OLDcan_moteus.md | 102 ------------------ setupCAN.sh | 4 - src/camera/test/test_copyright.py | 25 ----- src/example_node/package.xml | 18 ---- src/example_node/setup.py | 24 ----- src/example_node/test/test_copyright.py | 25 ----- src/robot_info/package.xml | 19 ---- src/robot_info/resource/robot_info | 0 src/robot_info/robot_info/__init__.py | 0 src/robot_info/robot_info/robot_info.py | 66 ------------ src/robot_info/robot_info/test_publisher.py | 35 ------ src/robot_info/robot_info/test_subscriber.py | 28 ----- src/robot_info/setup.cfg | 4 - src/robot_info/setup.py | 27 ----- src/robot_info/test/test_copyright.py | 25 ----- src/robot_info/test/test_flake8.py | 25 ----- src/robot_info/test/test_pep257.py | 23 ---- src/testingInterface/package.xml | 37 ------- .../resource/testingInterface | 0 src/testingInterface/setup.cfg | 4 - src/testingInterface/setup.py | 26 ----- src/testingInterface/test/test_copyright.py | 25 ----- src/testingInterface/test/test_flake8.py | 25 ----- src/testingInterface/test/test_pep257.py | 23 ---- .../testingInterface/__init__.py | 0 .../testingInterface/testingNode.py | 25 ----- src/viator_launch/launch/robot.launch.py | 25 +++-- 28 files changed, 16 insertions(+), 634 deletions(-) delete mode 100644 70-fdcanusb.rules delete mode 100644 docs/OLDcan_moteus.md delete mode 100644 setupCAN.sh delete mode 100644 src/camera/test/test_copyright.py delete mode 100644 src/example_node/package.xml delete mode 100644 src/example_node/setup.py delete mode 100644 src/example_node/test/test_copyright.py delete mode 100644 src/robot_info/package.xml delete mode 100644 src/robot_info/resource/robot_info delete mode 100644 src/robot_info/robot_info/__init__.py delete mode 100644 src/robot_info/robot_info/robot_info.py delete mode 100644 src/robot_info/robot_info/test_publisher.py delete mode 100644 src/robot_info/robot_info/test_subscriber.py delete mode 100644 src/robot_info/setup.cfg delete mode 100644 src/robot_info/setup.py delete mode 100644 src/robot_info/test/test_copyright.py delete mode 100644 src/robot_info/test/test_flake8.py delete mode 100644 src/robot_info/test/test_pep257.py delete mode 100644 src/testingInterface/package.xml delete mode 100644 src/testingInterface/resource/testingInterface delete mode 100644 src/testingInterface/setup.cfg delete mode 100644 src/testingInterface/setup.py delete mode 100644 src/testingInterface/test/test_copyright.py delete mode 100644 src/testingInterface/test/test_flake8.py delete mode 100644 src/testingInterface/test/test_pep257.py delete mode 100644 src/testingInterface/testingInterface/__init__.py delete mode 100644 src/testingInterface/testingInterface/testingNode.py diff --git a/70-fdcanusb.rules b/70-fdcanusb.rules deleted file mode 100644 index 9d5b535..0000000 --- a/70-fdcanusb.rules +++ /dev/null @@ -1,10 +0,0 @@ -# A udev rule to create a /dev/fdcanusb symlink. -# -# Install into /etc/udev/rules.d: -# sudo cp 70-fdcanusb.rules /etc/udev/rules.d -# -# Then run: -# sudo udevadm control --reload-rules -# sudo udevadm trigger --subsystem-match=tty - -SUBSYSTEM=="tty", ATTRS{manufacturer}=="mjbots", ATTRS{product}=="fdcanusb", MODE="0666", SYMLINK+="fdcanusb" diff --git a/docs/OLDcan_moteus.md b/docs/OLDcan_moteus.md deleted file mode 100644 index 8e45356..0000000 --- a/docs/OLDcan_moteus.md +++ /dev/null @@ -1,102 +0,0 @@ -# The [`can_moteus`](https://github.com/TrickfireRobotics/urc-2023/tree/main/src/can_moteus) Package - - -## **What is it?** -This is a **ROS Node** that is responsible for communication between the [**Moteus motor controllers**](https://github.com/mjbots/moteus) (via a CAN-FD Bus) and **ROS** that the rest of the codebase is written in. - -Motors are created that represent their real-life counterparts. Each motor subscribes to a topic that contains data for the motors to use depending on the motor's mode; i.e. a motor in VELOCITY mode would subscribe to data that would set that motor's velocity. Each motor can publish data to the ROS network that it reads from the Moteus controllers depending on what data the programmer wanted that motor to publish. - -The only structure in the whole codebase that should be directly sending data for these motors to subscribe to is the [`RobotInterface`](../src/interface); see [`code_overview.md`](./code_overview.md) for a diagram. - -## **How to use it** - -### **Adding a Motor in Code** -As each Moteus controller is connected to **only a single** motor, each motor is represented as a [`MoteusMotor`](../src/can_moteus/can_moteus/moteus_motor.py) object. However, the [`MoteusMultiprocess`](../src/can_moteus/can_moteus/moteus_multiprocess.py) object, of which only one should exist, handles these `MoteusMotors`. As such, motors are added via the `MoteusMultiprocess` object inside [`ros_moteus_bridge.py`](../src/can_moteus/can_moteus/ros_moteus_bridge.py). - -To create a motor, we need to pass in the following parameters in this order: -- The CAN ID of the motor. This is an **integer** -- The name of the motor. This is a **String** -- The motor mode. This is a **moteus_motor.Mode** -- A list of data to publish to the ROS network. This is an **array of moteus.Register** - -Here is an example of adding a motor - -``` -moteusPubList = [moteus.Register.VELOCITY, moteus.Register.POSITION] - -moteusMultiprocess.addMotor( - 3, - "topmotor", - moteus_motor.Mode.VELOCITY, - moteusPubList, -) -``` -This motor has a CAN ID of **three** with the name **"topmotor"**. The motor is running in **VELOCITY** mode, and as such expects incoming data intended for the motor to set its velocity in Moteus units. Each time the motor reads data from the Moteus controller, it will publish its **VELOCITY** and **POSITION** values to the ROS network in Moteus units. - - -### **Inputs** - -When a motor is created, it will create a ROS subscriber to the following topic: - -```__from_robot_interface``` - -For example, using the motor above, it would subscribe to the topic of: - -```/topmotor_velocity_from_robot_interface``` - -The data sent to this topic will control the particular motor that it is sent to. Keep in mind that this data has to be formatted in Moteus units. - -Every cycle (every 0.02 seconds), the motor will send the last recieved data to send to the Moteus controller. The default is a value of **zero.** - -**NOTE: All subscribers and publishers handle data in std_msgs.msg.Float32** - -### **Outputs** -When a motor is created, it will publish to the following topic(s) depending on the **moteus.Register array** that was passed in. The topic is in the following format: - -```__from_can``` - -For example, using the motor above, it would publish to the topics of: - -```/topmotor_velocity_from_can``` - -```/topmotor_position_from_can``` - -Every cycle (every 0.02 seconds), the motor would read data it recieved from the Moteus controller and publish it. - -**NOTE: All subscribers and publishers handle data in std_msgs.msg.Float32** - -**NOTE: The data that can be sent must match up exactly to the data that the Moteus controllers send back; which is precisely the values from [`moteus.Register`](https://github.com/mjbots/moteus/blob/38d688a933ce1584ee09f2628b5849d5e758ac21/lib/python/moteus/moteus.py#L148)!** - -## **What is a Moteus Unit?** - -The documentation for the Moteus units are found [here](https://github.com/mjbots/moteus/blob/main/docs/reference.md#a2-register-usage). Each type of data has different units, so keep that in mind. - - -## **Deep Dive - How is `can_moteus` Implemented?** - -### **Overview** -The core idea is that there are two distinct Python processes running that communicate with each other via several different multiprocess queues. The first process is the "main" process where ROS lives and does whatever it needs to do. The second process is started by us and is used to send and read data to the Moteus controllers. - -### **Queue From Motors to Moteus Multiprocess** - -Each motor's callback function for their subscribers writes to the `_queueToMoteus` queue (created in `moteus_multiprocess.py`), where only one such queue exists. As such, all motors share this queue. The data that is enqueued is an array of length two in the following format: - -``` -[0] = CANID -[1] = data (position, velocity, etc) -``` - -### **Queue From Multiprocess to Each Motor** -Each motor has its own multiprocess queue, `toPublisherQueue` that is created in `moteus_multiprocess.py`, which is then populated by the Moteus multiprocess for each corresponding motor. The type of data that is sent is dictated by the `moteusPubList` array as seen earlier in the example motor. The data that is enqueued is an array of length two in the following format: - -``` -[0] = moteus.Register -[1] = data (position, velocity, voltage, current, etc) -``` - -### **The Multiprocess Cycle** -Each cycle, 0.02 seconds, the Moteus multiprocess reads the head of the `_queueToMoteus` and updates the set value for the target motor. It then goes through each motor that was succesfully connected to the CAN/CANFD bus and sends their set data. At the same time, it recieves information about the Moteus controller and populates each motor's `toPublisherQueue`. - -Here is a diagram of the process: - -![what](./resources/moteus_docs.png) \ No newline at end of file diff --git a/setupCAN.sh b/setupCAN.sh deleted file mode 100644 index 1126bc0..0000000 --- a/setupCAN.sh +++ /dev/null @@ -1,4 +0,0 @@ -sudo modprobe can -sudo modprobe can_raw -sudo modprobe mttcan -sudo ip link set can0 up type can bitrate 500000 dbitrate 1000000 berr-reporting on fd on \ No newline at end of file diff --git a/src/camera/test/test_copyright.py b/src/camera/test/test_copyright.py deleted file mode 100644 index 97a3919..0000000 --- a/src/camera/test/test_copyright.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2015 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_copyright.main import main -import pytest - - -# Remove the `skip` decorator once the source file(s) have a copyright header -@pytest.mark.skip(reason='No copyright header has been placed in the generated source file.') -@pytest.mark.copyright -@pytest.mark.linter -def test_copyright(): - rc = main(argv=['.', 'test']) - assert rc == 0, 'Found errors' diff --git a/src/example_node/package.xml b/src/example_node/package.xml deleted file mode 100644 index ff37b33..0000000 --- a/src/example_node/package.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - example_node - 0.0.0 - TODO: Package description - trickfire - TODO: License declaration - - ament_copyright - ament_flake8 - ament_pep257 - python3-pytest - - - ament_python - - diff --git a/src/example_node/setup.py b/src/example_node/setup.py deleted file mode 100644 index 571f53b..0000000 --- a/src/example_node/setup.py +++ /dev/null @@ -1,24 +0,0 @@ -from setuptools import find_packages, setup - -package_name = 'example_node' - -setup( - name=package_name, - version='0.0.0', - packages=find_packages(exclude=['test']), - data_files=[ - ('share/ament_index/resource_index/packages', - ['resource/' + package_name]), - ('share/' + package_name, ['package.xml']), - ], - install_requires=['setuptools'], - zip_safe=True, - maintainer='trickfire', - maintainer_email='vladimirkupryukhin@gmail.com', - description='TODO: Package description', - license='TODO: License declaration', - tests_require=['pytest'], - entry_points={ - 'console_scripts': ["myExampleNode = example_node.example:main"], - }, -) diff --git a/src/example_node/test/test_copyright.py b/src/example_node/test/test_copyright.py deleted file mode 100644 index 97a3919..0000000 --- a/src/example_node/test/test_copyright.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2015 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_copyright.main import main -import pytest - - -# Remove the `skip` decorator once the source file(s) have a copyright header -@pytest.mark.skip(reason='No copyright header has been placed in the generated source file.') -@pytest.mark.copyright -@pytest.mark.linter -def test_copyright(): - rc = main(argv=['.', 'test']) - assert rc == 0, 'Found errors' diff --git a/src/robot_info/package.xml b/src/robot_info/package.xml deleted file mode 100644 index 7dd6a2e..0000000 --- a/src/robot_info/package.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - robot_info - 0.0.0 - TODO: Package description - trickfire - TODO: License declaration - - ament_copyright - ament_flake8 - ament_pep257 - python3-pytest - rclpy - - - ament_python - - diff --git a/src/robot_info/resource/robot_info b/src/robot_info/resource/robot_info deleted file mode 100644 index e69de29..0000000 diff --git a/src/robot_info/robot_info/__init__.py b/src/robot_info/robot_info/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/robot_info/robot_info/robot_info.py b/src/robot_info/robot_info/robot_info.py deleted file mode 100644 index 9254c64..0000000 --- a/src/robot_info/robot_info/robot_info.py +++ /dev/null @@ -1,66 +0,0 @@ -import math -from typing import Any, Callable, get_args, Literal, TYPE_CHECKING -import sys -sys.path.append("/home/trickfire/urc-2023/src") - -from utility.canbus_mappings import CanBusMappings -from utility.moteus_data_out_json_helper import MoteusDataOutJsonHelper - -from rclpy.node import Node -from std_msgs.msg import String - -canBusMappings = CanBusMappings() - -moteusTopicList = { - "front_left_drive_motor_from_can", - "mid_left_drive_motor_from_can", - "rear_left_drive_motor_from_can", - "front_right_drive_motor_from_can" - "mid_right_drive_motor_from_can", - "rear_right_drive_motor_from_can", -} - -canIDToMotorName = { - canBusMappings.CANID_FRONT_LEFT_DRIVE_MOTOR: "front_left_drive_motor_from_can", - canBusMappings.CANID_MID_LEFT_DRIVE_MOTOR: "mid_left_drive_motor_from_can", - canBusMappings.CANID_REAR_LEFT_DRIVE_MOTOR: "rear_left_drive_motor_from_can", - canBusMappings.CANID_FRONT_RIGHT_DRIVE_MOTOR: "front_right_drive_motor_from_can", - canBusMappings.CANID_MID_RIGHT_DRIVE_MOTOR: "mid_right_drive_motor_from_can", - canBusMappings.CANID_REAR_RIGHT_DRIVE_MOTOR: "rear_right_drive_motor_from_can" -} - - - -class RobotInfo(): - - - def __init__(self, rosNode : Node): - self._rosNode = rosNode - self.moteusNameToJSON = {} - self.subList = [] - self.createNameToJSONMapping() - self.createSubscribers() - - - def createNameToJSONMapping(self): - for name in moteusTopicList: - self.moteusNameToJSON[name] = MoteusDataOutJsonHelper() - - def createSubscribers(self): - for name in moteusTopicList: - sub = self._rosNode.create_subscription(String, name, self.subCallback, 1) - self.subList.append(sub) - - def subCallback(self, msg): - jsonHelper = MoteusDataOutJsonHelper() - jsonHelper.buildHelper(msg.data) - moteusName = canBusMappings[jsonHelper.canID] - self.moteusNameToJSON[moteusName] = jsonHelper - - - - def getMoteusMotorData(self, canID): - return self.moteusNameToJSON[canBusMappings[canID]] - - - \ No newline at end of file diff --git a/src/robot_info/robot_info/test_publisher.py b/src/robot_info/robot_info/test_publisher.py deleted file mode 100644 index 0106429..0000000 --- a/src/robot_info/robot_info/test_publisher.py +++ /dev/null @@ -1,35 +0,0 @@ -import random - -import rclpy -from rclpy.node import Node - -from std_msgs.msg import Float32 - - -TOPIC1 = "front_left_drive_motor_velocity_from_robot_interface" - - -class TestPublisher(Node): - def __init__(self): - super().__init__("test_publisher") - self.get_logger().info("Hello World") - - self.create_timer(0.5, self.callback) - - self.publisher1 = self.create_publisher(Float32, TOPIC1, 10) - - def callback(self): - msg1 = Float32() - msg1.data = 0.5 - self.publisher1.publish(msg1) - - -def main(args=None): - rclpy.init(args=args) - publisher = TestPublisher() - rclpy.spin(publisher) - rclpy.shutdown() - - -if __name__ == '__main__': - main() diff --git a/src/robot_info/robot_info/test_subscriber.py b/src/robot_info/robot_info/test_subscriber.py deleted file mode 100644 index f2684a6..0000000 --- a/src/robot_info/robot_info/test_subscriber.py +++ /dev/null @@ -1,28 +0,0 @@ -import rclpy -from rclpy.node import Node - -from .robot_info import RobotInfo - - -class TestSubscriber(Node): - def __init__(self): - super().__init__("test_subscriber") - self.get_logger().info("Hello World!") - self.info = RobotInfo(self, self.callback) - - def callback(self, topic, data): - self.get_logger().info(f"received topic: {topic}; data: {data}") - self.get_logger().info("info.front_left_drive_motor_velocity_from_can: " - + str(self.info.front_left_drive_motor_velocity_from_can)) - - - -def main(args=None): - rclpy.init(args=args) - subscriber = TestSubscriber() - rclpy.spin(subscriber) - rclpy.shutdown() - - -if __name__ == '__main__': - main() diff --git a/src/robot_info/setup.cfg b/src/robot_info/setup.cfg deleted file mode 100644 index 404d555..0000000 --- a/src/robot_info/setup.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[develop] -script_dir=$base/lib/robot_info -[install] -install_scripts=$base/lib/robot_info diff --git a/src/robot_info/setup.py b/src/robot_info/setup.py deleted file mode 100644 index 8141076..0000000 --- a/src/robot_info/setup.py +++ /dev/null @@ -1,27 +0,0 @@ -from setuptools import find_packages, setup - -package_name = 'robot_info' - -setup( - name=package_name, - version='0.0.0', - packages=find_packages(exclude=['test']), - data_files=[ - ('share/ament_index/resource_index/packages', - ['resource/' + package_name]), - ('share/' + package_name, ['package.xml']), - ], - install_requires=['setuptools'], - zip_safe=True, - maintainer='trickfire', - maintainer_email='loukylor@gmail.com', - description='TODO: Package description', - license='TODO: License declaration', - tests_require=['pytest'], - entry_points={ - 'console_scripts': [ - "talker = robot_info.test_publisher:main", - "listener = robot_info.test_subscriber:main" - ], - }, -) diff --git a/src/robot_info/test/test_copyright.py b/src/robot_info/test/test_copyright.py deleted file mode 100644 index 97a3919..0000000 --- a/src/robot_info/test/test_copyright.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2015 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_copyright.main import main -import pytest - - -# Remove the `skip` decorator once the source file(s) have a copyright header -@pytest.mark.skip(reason='No copyright header has been placed in the generated source file.') -@pytest.mark.copyright -@pytest.mark.linter -def test_copyright(): - rc = main(argv=['.', 'test']) - assert rc == 0, 'Found errors' diff --git a/src/robot_info/test/test_flake8.py b/src/robot_info/test/test_flake8.py deleted file mode 100644 index 27ee107..0000000 --- a/src/robot_info/test/test_flake8.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2017 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_flake8.main import main_with_errors -import pytest - - -@pytest.mark.flake8 -@pytest.mark.linter -def test_flake8(): - rc, errors = main_with_errors(argv=[]) - assert rc == 0, \ - 'Found %d code style errors / warnings:\n' % len(errors) + \ - '\n'.join(errors) diff --git a/src/robot_info/test/test_pep257.py b/src/robot_info/test/test_pep257.py deleted file mode 100644 index b234a38..0000000 --- a/src/robot_info/test/test_pep257.py +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright 2015 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_pep257.main import main -import pytest - - -@pytest.mark.linter -@pytest.mark.pep257 -def test_pep257(): - rc = main(argv=['.', 'test']) - assert rc == 0, 'Found code style errors / warnings' diff --git a/src/testingInterface/package.xml b/src/testingInterface/package.xml deleted file mode 100644 index 3847a6e..0000000 --- a/src/testingInterface/package.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - -<<<<<<<< HEAD:src/custom_interfaces/package.xml - custom_interfaces - 0.0.0 - TODO: Package description - trickfire - TODO: License declaration - - ament_cmake - - rosidl_default_generators - - rosidl_default_runtime - - rosidl_interface_packages - - ament_lint_auto - ament_lint_common -======== - testingInterface - 0.0.0 - TODO: Package description - trickfire - TODO: License declaration - - ament_copyright - ament_flake8 - ament_pep257 - python3-pytest ->>>>>>>> e9f631c (Robot Interface Merge (#24)):src/testingInterface/package.xml - - - ament_python - - diff --git a/src/testingInterface/resource/testingInterface b/src/testingInterface/resource/testingInterface deleted file mode 100644 index e69de29..0000000 diff --git a/src/testingInterface/setup.cfg b/src/testingInterface/setup.cfg deleted file mode 100644 index 93c251d..0000000 --- a/src/testingInterface/setup.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[develop] -script_dir=$base/lib/testingInterface -[install] -install_scripts=$base/lib/testingInterface diff --git a/src/testingInterface/setup.py b/src/testingInterface/setup.py deleted file mode 100644 index 985d64d..0000000 --- a/src/testingInterface/setup.py +++ /dev/null @@ -1,26 +0,0 @@ -from setuptools import setup - -package_name = 'testingInterface' - -setup( - name=package_name, - version='0.0.0', - packages=[package_name], - data_files=[ - ('share/ament_index/resource_index/packages', - ['resource/' + package_name]), - ('share/' + package_name, ['package.xml']), - ], - install_requires=['setuptools'], - zip_safe=True, - maintainer='trickfire', - maintainer_email='matthew.c.perry@outlook.com', - description='TODO: Package description', - license='TODO: License declaration', - tests_require=['pytest'], - entry_points={ - 'console_scripts': [ - 'testingInterface = testingInterface.testingNode:main' - ], - }, -) diff --git a/src/testingInterface/test/test_copyright.py b/src/testingInterface/test/test_copyright.py deleted file mode 100644 index 97a3919..0000000 --- a/src/testingInterface/test/test_copyright.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2015 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_copyright.main import main -import pytest - - -# Remove the `skip` decorator once the source file(s) have a copyright header -@pytest.mark.skip(reason='No copyright header has been placed in the generated source file.') -@pytest.mark.copyright -@pytest.mark.linter -def test_copyright(): - rc = main(argv=['.', 'test']) - assert rc == 0, 'Found errors' diff --git a/src/testingInterface/test/test_flake8.py b/src/testingInterface/test/test_flake8.py deleted file mode 100644 index 27ee107..0000000 --- a/src/testingInterface/test/test_flake8.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2017 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_flake8.main import main_with_errors -import pytest - - -@pytest.mark.flake8 -@pytest.mark.linter -def test_flake8(): - rc, errors = main_with_errors(argv=[]) - assert rc == 0, \ - 'Found %d code style errors / warnings:\n' % len(errors) + \ - '\n'.join(errors) diff --git a/src/testingInterface/test/test_pep257.py b/src/testingInterface/test/test_pep257.py deleted file mode 100644 index b234a38..0000000 --- a/src/testingInterface/test/test_pep257.py +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright 2015 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_pep257.main import main -import pytest - - -@pytest.mark.linter -@pytest.mark.pep257 -def test_pep257(): - rc = main(argv=['.', 'test']) - assert rc == 0, 'Found code style errors / warnings' diff --git a/src/testingInterface/testingInterface/__init__.py b/src/testingInterface/testingInterface/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/testingInterface/testingInterface/testingNode.py b/src/testingInterface/testingInterface/testingNode.py deleted file mode 100644 index 0f22bdf..0000000 --- a/src/testingInterface/testingInterface/testingNode.py +++ /dev/null @@ -1,25 +0,0 @@ -import sys -import rclpy -from rclpy.node import Node -import time - -sys.path.append('/home/trickfire/urc-2023/src/interface') -from robot_interface import RobotInterface - - - -class TestingNode(Node): - - def __init__(self): - super().__init__("testing_node") - self.get_logger().info("Launching testing_node node") - robotInterface = RobotInterface(self) - - - -def main(args=None): - rclpy.init(args=args) - node = TestingNode() - rclpy.spin(node) - node.destroy_node() - rclpy.shutdown() diff --git a/src/viator_launch/launch/robot.launch.py b/src/viator_launch/launch/robot.launch.py index e35d172..37d651a 100644 --- a/src/viator_launch/launch/robot.launch.py +++ b/src/viator_launch/launch/robot.launch.py @@ -1,10 +1,19 @@ import launch from launch_ros.actions import Node -can_moteus_node = Node(package="can_moteus", executable="can_moteus", name="can_moteus_node") + +can_moteus_node = Node( + package='can_moteus', + executable='can_moteus', + name='can_moteus_node' +) -drivebase_node = Node(package="drivebase", executable="drivebase", name="drivebase_node") +drivebase_node = Node( + package='drivebase', + executable='drivebase', + name='drivebase_node' +) mission_control_updater_node = Node( @@ -13,13 +22,11 @@ name="mission_control_updater_node", ) -arm_node = Node(package="arm", executable="arm", name="arm_node") - -camera_node = Node(package="camera", executable="roscamera", name="camera_node") - -# This is the example node. It will show ROS timers, subscribers, and publishers -# To include it in the startup, add it to the array in the generate_launch_description() method -example_node = Node(package="example_node", executable="myExampleNode", name="my_example_node") +arm_node = Node( + package='arm', + executable='arm', + name='arm_node' +) def generate_launch_description() -> launch.LaunchDescription: # pylint: disable=invalid-name From f1e339fa0e451ebf5a21614aea1d861741b722f6 Mon Sep 17 00:00:00 2001 From: Kyler Li Date: Tue, 10 Sep 2024 23:33:03 +0000 Subject: [PATCH 31/50] [reformat] remove existing linter tests these tests are nigh impossible to integrate with and customize, plus it would be a pain to integrate pylint support. plus these tests don't run on lib files --- src/arm/test/test_flake8.py | 25 ------------------- src/arm/test/test_pep257.py | 23 ----------------- .../test/test_flake8.py | 25 ------------------- .../test/test_pep257.py | 23 ----------------- 4 files changed, 96 deletions(-) delete mode 100644 src/arm/test/test_flake8.py delete mode 100644 src/arm/test/test_pep257.py delete mode 100644 src/mission_control_updater/test/test_flake8.py delete mode 100644 src/mission_control_updater/test/test_pep257.py diff --git a/src/arm/test/test_flake8.py b/src/arm/test/test_flake8.py deleted file mode 100644 index 27ee107..0000000 --- a/src/arm/test/test_flake8.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2017 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_flake8.main import main_with_errors -import pytest - - -@pytest.mark.flake8 -@pytest.mark.linter -def test_flake8(): - rc, errors = main_with_errors(argv=[]) - assert rc == 0, \ - 'Found %d code style errors / warnings:\n' % len(errors) + \ - '\n'.join(errors) diff --git a/src/arm/test/test_pep257.py b/src/arm/test/test_pep257.py deleted file mode 100644 index b234a38..0000000 --- a/src/arm/test/test_pep257.py +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright 2015 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_pep257.main import main -import pytest - - -@pytest.mark.linter -@pytest.mark.pep257 -def test_pep257(): - rc = main(argv=['.', 'test']) - assert rc == 0, 'Found code style errors / warnings' diff --git a/src/mission_control_updater/test/test_flake8.py b/src/mission_control_updater/test/test_flake8.py deleted file mode 100644 index 27ee107..0000000 --- a/src/mission_control_updater/test/test_flake8.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright 2017 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_flake8.main import main_with_errors -import pytest - - -@pytest.mark.flake8 -@pytest.mark.linter -def test_flake8(): - rc, errors = main_with_errors(argv=[]) - assert rc == 0, \ - 'Found %d code style errors / warnings:\n' % len(errors) + \ - '\n'.join(errors) diff --git a/src/mission_control_updater/test/test_pep257.py b/src/mission_control_updater/test/test_pep257.py deleted file mode 100644 index b234a38..0000000 --- a/src/mission_control_updater/test/test_pep257.py +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright 2015 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_pep257.main import main -import pytest - - -@pytest.mark.linter -@pytest.mark.pep257 -def test_pep257(): - rc = main(argv=['.', 'test']) - assert rc == 0, 'Found code style errors / warnings' From 67a5b2a395921f6f31eb9a26521a20517a35eb61 Mon Sep 17 00:00:00 2001 From: Kyler Li Date: Wed, 11 Sep 2024 07:50:40 +0000 Subject: [PATCH 32/50] THE GREAT REFORMATTENING there's a long laundry list of changes (let's hope i don't forget anything): - added pylint, isort, black, and mypy - pylint does most of the linting work - isort is specifically for import sorting, and some whitespace issues - black runs autoformatting on save - I don't particularly like autoformatters but I know for a fact that people will not heed the warnings for linters so ive included it as an extreme measure. - mypy is for type checking - linting has several things people should pay attention to - max line length is 100 - doc strings for all functions, classes, and modules is required - imports now must be in specific orders - isort will automatically sort imports for you - function parameters must be type hinted - function return types must be specified too - some class attributes must also be type hinted - function names will be camelCase - attributes, variables, and file names must be snake_case - whitespace will be automatically managed by the auto formatter - other than consistent formatting, this will give type hinting and intellisense to almost every variable --- .devcontainer/devcontainer.json | 6 +- .vscode/settings.json | 1 - launch.sh | 7 +- src/arm/arm/arm.py | 47 ++- src/arm/arm/individual_control_vel.py | 68 ++-- src/arm/test/test_copyright.py | 25 -- src/can_moteus/can_moteus/moteus_motor.py | 116 +++++-- .../can_moteus/moteus_thread_manager.py | 221 ++++++------ .../can_moteus/ros_moteus_bridge.py | 90 ++++- src/can_moteus/test/test_copyright.py | 7 +- src/custom_interfaces/robot_info.py | 78 ++--- src/custom_interfaces/robot_interface.py | 327 ++++++++++-------- src/drivebase/drivebase/drivebase.py | 26 +- .../infoToJSONHelper.py | 26 -- .../info_to_json_helper.py | 8 +- .../mission_control_updater/updater.py | 30 +- src/mission_control_updater/setup.py | 15 +- .../test/test_copyright.py | 25 -- src/utility/canbus_mappings.py | 8 +- src/utility/color_text.py | 22 +- src/utility/moteus_data_in_json_helper.py | 88 +++-- src/utility/moteus_data_out_json_helper.py | 86 +++-- src/viator_launch/launch/robot.launch.py | 26 +- 23 files changed, 735 insertions(+), 618 deletions(-) delete mode 100644 src/mission_control_updater/mission_control_updater/infoToJSONHelper.py diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index f576f75..cd1e6a1 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -15,9 +15,9 @@ "ms-python.python", "ms-python.vscode-pylance", "ms-python.pylint", - "ms-python.mypy-type-checker", - "ms-python.isort", - "ms-python.black-formatter", + "ms-python.mypy-type-checker", + "ms-python.isort", + "ms-python.black-formatter", "ms-vscode.cmake-tools", "ms-vscode.cpptools", "twxs.cmake", diff --git a/.vscode/settings.json b/.vscode/settings.json index b077611..e9d3d23 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -21,7 +21,6 @@ "editor.defaultFormatter": "ms-python.black-formatter", "editor.formatOnSave": true }, - "black-formatter.args": ["-l", "100"], "cmake.configureOnOpen": false, "cmake.sourceDirectory": "${workspaceFolder}/src/hello_world", "files.associations": { diff --git a/launch.sh b/launch.sh index 09ba431..76e883f 100755 --- a/launch.sh +++ b/launch.sh @@ -9,13 +9,8 @@ source /home/trickfire/urc-2023/install/setup.bash #ip link set can0 type can bitrate 1000000 dbitrate 5000000 fd on #ip link set can0 up -#modprobe can -#modprobe can_raw -#modprobe mttcan -#ip link set can0 type can bitrate 1000000 dbitrate 5000000 fd on -#ip link set can0 up - # Add to the python import pathes. Not the best, but will work for now +# TODO: Switch this folder to the libs folder once that's done export PYTHONPATH="/home/trickfire/urc-2023/src/:$PYTHONPATH" ros2 launch viator_launch robot.launch.py & ros2 launch rosbridge_server rosbridge_websocket_launch.xml \ No newline at end of file diff --git a/src/arm/arm/arm.py b/src/arm/arm/arm.py index f99ab40..446b058 100644 --- a/src/arm/arm/arm.py +++ b/src/arm/arm/arm.py @@ -2,15 +2,20 @@ from enum import IntEnum from typing import Any +from enum import IntEnum +from typing import Any + import rclpy from rclpy.executors import ExternalShutdownException from rclpy.node import Node from std_msgs.msg import Int32 +from rclpy.node import Node +from std_msgs.msg import Int32 + from custom_interfaces.srv import ArmMode -from lib.color_codes import ColorCodes, colorStr -from lib.configs import MotorConfigs -from lib.interface.robot_interface import RobotInterface +from interface.robot_interface import RobotInterface +from utility.color_text import ColorCodes from .individual_control_vel import IndividualControlVel @@ -21,11 +26,19 @@ class ArmModeEnum(IntEnum): INDIVIDUAL_MOTOR_CONTROL_POS = 2 INVERSE_KINEMATICS = 3 + DISABLED = 0 + INDIVIDUAL_MOTOR_CONTROL_VEL = 1 + INDIVIDUAL_MOTOR_CONTROL_POS = 2 + INVERSE_KINEMATICS = 3 + class Arm(Node): + def __init__(self) -> None: def __init__(self) -> None: super().__init__("arm_node") - self.get_logger().info(colorStr("Launching arm_node", ColorCodes.BLUE_OK)) + self.get_logger().info( + ColorCodes.BLUE_OK + "Launching arm_node" + ColorCodes.ENDC + ) self.change_arm_mode_sub = self.create_subscription( Int32, "update_arm_mode", self.updateArmMode, 10 @@ -33,7 +46,9 @@ def __init__(self) -> None: self.current_mode = ArmModeEnum.DISABLED - self.mode_service = self.create_service(ArmMode, "get_arm_mode", self.modeServiceHandler) + self.mode_service = self.create_service( + ArmMode, "get_arm_mode", self.modeServiceHandler + ) self.bot_interface = RobotInterface(self) @@ -43,15 +58,18 @@ def modeServiceHandler(self, _: Any, response: ArmMode.Response) -> ArmMode.Resp response.current_mode = int(self.current_mode) return response + def updateArmMode(self, msg: Int32) -> None: + def updateArmMode(self, msg: Int32) -> None: self.current_mode = msg.data + if self.current_mode == 0: - self.bot_interface.disableMotor(MotorConfigs.ARM_TURNTABLE_MOTOR) - self.bot_interface.disableMotor(MotorConfigs.ARM_SHOULDER_MOTOR) - self.bot_interface.disableMotor(MotorConfigs.ARM_ELBOW_MOTOR) - self.bot_interface.disableMotor(MotorConfigs.ARM_LEFT_WRIST_MOTOR) - self.bot_interface.disableMotor(MotorConfigs.ARM_RIGHT_WRIST_MOTOR) + self.bot_interface.disableArmTurntableMotor() + self.bot_interface.disableArmShoulderMotor() + self.bot_interface.disableArmElbowMotor() + self.bot_interface.disableArmLeftWristMotor() + self.bot_interface.disableArmRightWristMotor() self.individual_control_vel.can_send = False elif self.current_mode == 1: @@ -65,21 +83,28 @@ def updateArmMode(self, msg: Int32) -> None: def main(args: list[str] | None = None) -> None: """ The entry point of the node. + The entry point of the node. """ + rclpy.init(args=args) try: node = Arm() rclpy.spin(node) + except KeyboardInterrupt: pass except ExternalShutdownException: # This is done when we ctrl-c the progam to shut it down - node.get_logger().info(colorStr("Shutting down arm_node node", ColorCodes.BLUE_OK)) + node.get_logger().info( + ColorCodes.BLUE_OK + "Shutting down arm_node node" + ColorCodes.ENDC + ) node.destroy_node() sys.exit(0) + if __name__ == "__main__": main() + diff --git a/src/arm/arm/individual_control_vel.py b/src/arm/arm/individual_control_vel.py index dfefb52..4ee3e1c 100644 --- a/src/arm/arm/individual_control_vel.py +++ b/src/arm/arm/individual_control_vel.py @@ -1,8 +1,7 @@ -from rclpy.node import Node +from rclpy import Node from std_msgs.msg import Float32 -from lib.configs import MotorConfigs -from lib.interface.robot_interface import RobotInterface +from interface.robot_interface import RobotInterface class IndividualControlVel: @@ -23,6 +22,13 @@ def __init__(self, ros_node: Node, interface: RobotInterface): Float32, "left_wrist_ccw", self.leftWristCCW, 10 ) + self.left_wrist_motor_sub = ros_node.create_subscription( + Float32, "left_wrist_cw", self.leftWristCW, 10 + ) + self.left_wrist_motor_sub = ros_node.create_subscription( + Float32, "left_wrist_ccw", self.leftWristCCW, 10 + ) + # Right wrist motor self.left_wrist_motor_sub = ros_node.create_subscription( Float32, "right_wrist_cw", self.rightWristCW, 10 @@ -32,7 +38,9 @@ def __init__(self, ros_node: Node, interface: RobotInterface): ) # Elbow motor - self.elbow_up_sub = ros_node.create_subscription(Float32, "elbow_up", self.elbowUp, 10) + self.elbow_up_sub = ros_node.create_subscription( + Float32, "elbow_up", self.elbowUp, 10 + ) self.elbow_down_sub = ros_node.create_subscription( Float32, "elbow_down", self.elbowDown, 10 @@ -56,6 +64,14 @@ def __init__(self, ros_node: Node, interface: RobotInterface): Float32, "turntable_ccw", self.turntableCCW, 10 ) + def leftWristCW(self, msg: Float32) -> None: + if not self.can_send: + return + + self.turntable_counter_clockwise_sub = ros_node.create_subscription( + Float32, "turntable_ccw", self.turntableCCW, 10 + ) + def leftWristCW(self, msg: Float32) -> None: if not self.can_send: return @@ -64,11 +80,11 @@ def leftWristCW(self, msg: Float32) -> None: if joystick > 0: self._ros_node.get_logger().info("Left Wrist CW" + str(joystick)) - self.bot_interface.runMotorSpeed(MotorConfigs.ARM_LEFT_WRIST_MOTOR, self.WRIST_VEL) + self.bot_interface.leftWriteVelocity(self.WRIST_VEL) else: self._ros_node.get_logger().info("Left Wrist STOP") - self.bot_interface.stopMotor(MotorConfigs.ARM_LEFT_WRIST_MOTOR) + self.bot_interface.leftWriteVelocity(0.0) def leftWristCCW(self, msg: Float32) -> None: if not self.can_send: @@ -78,11 +94,11 @@ def leftWristCCW(self, msg: Float32) -> None: if joystick > 0: self._ros_node.get_logger().info("Left Wrist CCW" + str(joystick)) - self.bot_interface.runMotorSpeed(MotorConfigs.ARM_LEFT_WRIST_MOTOR, -self.WRIST_VEL) + self.bot_interface.leftWriteVelocity(-self.WRIST_VEL) else: self._ros_node.get_logger().info("Left Wrist STOP") - self.bot_interface.stopMotor(MotorConfigs.ARM_LEFT_WRIST_MOTOR) + self.bot_interface.leftWriteVelocity(0.0) def rightWristCW(self, msg: Float32) -> None: if not self.can_send: @@ -92,11 +108,11 @@ def rightWristCW(self, msg: Float32) -> None: if joystick > 0: self._ros_node.get_logger().info("Right Wrist CW" + str(joystick)) - self.bot_interface.runMotorSpeed(MotorConfigs.ARM_RIGHT_WRIST_MOTOR, -self.WRIST_VEL) + self.bot_interface.rightWristVelocity(-self.WRIST_VEL) else: self._ros_node.get_logger().info("Right Wrist STOP") - self.bot_interface.stopMotor(MotorConfigs.ARM_RIGHT_WRIST_MOTOR) + self.bot_interface.rightWristVelocity(0.0) def rightWristCCW(self, msg: Float32) -> None: if not self.can_send: @@ -106,11 +122,11 @@ def rightWristCCW(self, msg: Float32) -> None: if joystick > 0: self._ros_node.get_logger().info("Right Wrist CCW" + str(joystick)) - self.bot_interface.runMotorSpeed(MotorConfigs.ARM_RIGHT_WRIST_MOTOR, -self.WRIST_VEL) + self.bot_interface.rightWristVelocity(-self.WRIST_VEL) else: self._ros_node.get_logger().info("Right Wrist STOP") - self.bot_interface.stopMotor(MotorConfigs.ARM_RIGHT_WRIST_MOTOR) + self.bot_interface.rightWristVelocity(0.0) def elbowUp(self, msg: Float32) -> None: if not self.can_send: @@ -120,11 +136,11 @@ def elbowUp(self, msg: Float32) -> None: if data > 0: self._ros_node.get_logger().info("Elbow up" + str(data)) - self.bot_interface.runMotorSpeed(MotorConfigs.ARM_ELBOW_MOTOR, -self.VEL) + self.bot_interface.elbowVelocity(-self.VEL) else: self._ros_node.get_logger().info("Elbow down STOP") - self.bot_interface.stopMotor(MotorConfigs.ARM_ELBOW_MOTOR) + self.bot_interface.elbowVelocity(0.0) def elbowDown(self, msg: Float32) -> None: if not self.can_send: @@ -134,11 +150,11 @@ def elbowDown(self, msg: Float32) -> None: if data > 0: self._ros_node.get_logger().info("Elbow down" + str(data)) - self.bot_interface.runMotorSpeed(MotorConfigs.ARM_ELBOW_MOTOR, self.VEL) + self.bot_interface.elbowVelocity(self.VEL) else: self._ros_node.get_logger().info("Elbow down STOP") - self.bot_interface.stopMotor(MotorConfigs.ARM_ELBOW_MOTOR) + self.bot_interface.elbowVelocity(0.0) def shoulderUp(self, msg: Float32) -> None: if not self.can_send: @@ -148,11 +164,11 @@ def shoulderUp(self, msg: Float32) -> None: if data > 0: self._ros_node.get_logger().info("Shoulder up" + str(data)) - self.bot_interface.runMotorSpeed(MotorConfigs.ARM_SHOULDER_MOTOR, -self.VEL) + self.bot_interface.shoulderVelocity(-self.VEL) else: self._ros_node.get_logger().info("Shoulder STOP") - self.bot_interface.stopMotor(MotorConfigs.ARM_SHOULDER_MOTOR) + self.bot_interface.shoulderVelocity(0.0) def shoulderDown(self, msg: Float32) -> None: if not self.can_send: @@ -162,11 +178,11 @@ def shoulderDown(self, msg: Float32) -> None: if data > 0: self._ros_node.get_logger().info("Shoulder down" + str(data)) - self.bot_interface.runMotorSpeed(MotorConfigs.ARM_SHOULDER_MOTOR, self.VEL) + self.bot_interface.shoulderVelocity(self.VEL) else: self._ros_node.get_logger().info("Shoulder STOP") - self.bot_interface.stopMotor(MotorConfigs.ARM_SHOULDER_MOTOR) + self.bot_interface.shoulderVelocity(0.0) def turntableCW(self, msg: Float32) -> None: if not self.can_send: @@ -176,11 +192,15 @@ def turntableCW(self, msg: Float32) -> None: if data > 0: self._ros_node.get_logger().info("Turntable clock wise") - self.bot_interface.runMotorSpeed(MotorConfigs.ARM_TURNTABLE_MOTOR, self.VEL) + self.bot_interface.armTurntableVelocity(self.VEL) else: self._ros_node.get_logger().info("Turntable STOP") - self.bot_interface.stopMotor(MotorConfigs.ARM_TURNTABLE_MOTOR) + self.bot_interface.armTurntableVelocity(0.0) + + def turntableCCW(self, msg: Float32) -> None: + if not self.can_send: + return def turntableCCW(self, msg: Float32) -> None: if not self.can_send: @@ -190,8 +210,8 @@ def turntableCCW(self, msg: Float32) -> None: if data > 0: self._ros_node.get_logger().info("Turntable counter clock wise") - self.bot_interface.runMotorSpeed(MotorConfigs.ARM_TURNTABLE_MOTOR, -self.VEL) + self.bot_interface.armTurntableVelocity(-self.VEL) else: self._ros_node.get_logger().info("Turntable STOP") - self.bot_interface.stopMotor(MotorConfigs.ARM_TURNTABLE_MOTOR) + self.bot_interface.armTurntableVelocity(0.0) diff --git a/src/arm/test/test_copyright.py b/src/arm/test/test_copyright.py index 95f0381..e69de29 100644 --- a/src/arm/test/test_copyright.py +++ b/src/arm/test/test_copyright.py @@ -1,25 +0,0 @@ -# Copyright 2015 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_copyright.main import main -import pytest - - -# Remove the `skip` decorator once the source file(s) have a copyright header -@pytest.mark.skip(reason="No copyright header has been placed in the generated source file.") -@pytest.mark.copyright -@pytest.mark.linter -def test_copyright(): - rc = main(argv=[".", "test"]) - assert rc == 0, "Found errors" diff --git a/src/can_moteus/can_moteus/moteus_motor.py b/src/can_moteus/can_moteus/moteus_motor.py index b2b5c67..8f2389c 100644 --- a/src/can_moteus/can_moteus/moteus_motor.py +++ b/src/can_moteus/can_moteus/moteus_motor.py @@ -1,19 +1,18 @@ from threading import Lock +from typing import Any +import moteus import std_msgs.msg -from moteus.moteus import Result -from rclpy.node import Node +from rclpy import Node from rclpy.publisher import Publisher from rclpy.subscription import Subscription from std_msgs.msg import String -from lib.configs import MoteusMotorConfig -from lib.moteus_motor_state import MoteusMotorState, MoteusRunSettings class MoteusMotor: - def __init__(self, config: MoteusMotorConfig, ros_node: Node) -> None: + def __init__(self, can_id: int, name: str, ros_node: Node) -> None: """ Create a logical representation of a motor that is using a Moteus controller. Contains a list of variables that should be @@ -21,34 +20,49 @@ def __init__(self, config: MoteusMotorConfig, ros_node: Node) -> None: Paramaters ------- - config : MoteusMotorConfig - The config of the motor. + canID : int + The canID of the Moteus Controller + name : string + The name of the motor. This is used in the topic names rosNode : Node The ROS node used to create the ros_moteus_bridge.py """ - self.config = config + self.can_id = can_id + self.name = name self._ros_node = ros_node self._subscriber = self._createSubscriber() self._publisher = self._createPublisher() + # Mutex - used to protect writing/reading the state of the motor + # Mutex - used to protect writing/reading the state of the motor self.mutex_lock = Lock() # The settings we can send to the moteus controller # using the make_position() method - self.run_settings: MoteusRunSettings = MoteusRunSettings() + self.position: float | None = None + self.velocity: float | None = None + self.feedforward_torque: float | None = None + self.kp_scale: float | None = None + self.kd_scale: float | None = None + self.max_torque: float | None = None + self.watchdog_timeout: float | None = None + self.velocity_limit: float | None = None + self.accel_limit: float | None = None + self.fixed_voltage_override: float | None = None # By default, the motor is shutoff self.set_stop = True + def _createSubscriber(self) -> Subscription: def _createSubscriber(self) -> Subscription: """ The subscriber to get data from. - The format of the topic is the following: moteusmotor__from_interface + The format of the topic is the following: _from_interface """ - topic_name = self.config.getInterfaceTopicName() + topic_name = self.name + "_from_interface" subscriber = self._ros_node.create_subscription( std_msgs.msg.String, topic_name, @@ -56,36 +70,76 @@ def _createSubscriber(self) -> Subscription: 1, # Size of queue is 1. All additional ones are dropped ) + return subscriber + def _createPublisher(self) -> Publisher: def _createPublisher(self) -> Publisher: """ The publisher to send data to. - The format of the topic is the following: moteusmotor__from_can + The format of the topic is the following: _from_can """ - topic_name = self.config.getCanTopicName() + topic_name = self.name + "_from_can" # Size of queue is 1. All additional ones are dropped publisher = self._ros_node.create_publisher(std_msgs.msg.String, topic_name, 1) return publisher + def dataInCallback(self, msg: String) -> None: def dataInCallback(self, msg: String) -> None: """ Update the motor state. Mutex protected, meaning that no one can go into any other "critical section" of code that also has a mutex protecting it. + Update the motor state. Mutex protected, + meaning that no one can go into any other "critical section" + of code that also has a mutex protecting it. + """ + self.mutex_lock.acquire() + try: + json_string = msg.data + self.updateMotorState(json_string) + finally: + self.mutex_lock.release() + + def updateMotorState(self, raw_json_string: str) -> None: + """ + Update the motor's variables from + the input JSON string """ - with self.mutex_lock: - self.run_settings = MoteusRunSettings.fromJsonMsg(msg) - def publishData(self, moteus_data: Result) -> None: + json_helper = MoteusDataInJsonHelper() + json_helper.buildHelper(raw_json_string) + + self.position = json_helper.getPosition() + self.velocity = json_helper.getVelocity() + self.feedforward_torque = json_helper.feedforward_torque + self.kp_scale = json_helper.kp_scale + self.kd_scale = json_helper.kd_scale + self.max_torque = json_helper.max_torque + self.watchdog_timeout = json_helper.watchdog_timeout + self.accel_limit = json_helper.accel_limit + self.fixed_voltage_override = json_helper.fixed_voltage_override + self.set_stop = json_helper.set_stop + + def publishData(self, moteus_data: Any) -> None: """ Publishes the data from the moteus controller + Publishes the data from the moteus controller """ - with self.mutex_lock: - try: - if not self._ros_node.context.ok(): - return + self.mutex_lock.acquire() + try: + if self._ros_node.context.ok: + json_helper = MoteusDataOutJsonHelper() + json_helper.can_id = self.can_id + json_helper.position = moteus_data.values[moteus.Register.POSITION] + json_helper.velocity = moteus_data.values[moteus.Register.VELOCITY] + json_helper.torque = moteus_data.values[moteus.Register.TORQUE] + json_helper.temperature = moteus_data.values[moteus.Register.TEMPERATURE] + json_helper.power = moteus_data.values[moteus.Register.POWER] + json_helper.input_voltage = moteus_data.values[moteus.Register.VOLTAGE] + json_helper.q_current = moteus_data.values[moteus.Register.Q_CURRENT] + json_helper.d_current = moteus_data.values[moteus.Register.D_CURRENT] # self._rosNode.get_logger().info(str(moteusData.values)) @@ -94,11 +148,17 @@ def publishData(self, moteus_data: Result) -> None: # https://discord.com/channels/633996205759791104/722434939676786688/1252380387783610428 # self._rosNode.get_logger().info(str(moteusData.values.keys())) - state = MoteusMotorState.fromMoteusData(self.config.can_id, moteus_data) - self._publisher.publish(state.toMsg()) - except Exception as error: # pylint: disable=broad-exception-caught - # This is used to handle any errors in order to prevent the thread from dying - # Specifically, when we crtl-c we want the motors to be set_stop(), but if this - # thread crashes we cannot do that. So we catch any errors - self._ros_node.get_logger().info("Failed to publish motor data") - self._ros_node.get_logger().info(str(error)) + json_string = json_helper.buildJSONString() + + msg = String() + msg.data = json_string + + self._publisher.publish(msg) + except Exception as error: # pylint: disable=broad-exception-caught + # This is used to handle any errors in order to prevent the thread from dying + # Specifically, when we crtl-c we want the motors to be set_stop(), but if this thread + # crashes we cannot do that. So we catch any errors + self._ros_node.get_logger().info("Failed to publish motor data") + self._ros_node.get_logger().info(str(error)) + finally: + self.mutex_lock.release() diff --git a/src/can_moteus/can_moteus/moteus_thread_manager.py b/src/can_moteus/can_moteus/moteus_thread_manager.py index 96ac3a8..5c2abc2 100644 --- a/src/can_moteus/can_moteus/moteus_thread_manager.py +++ b/src/can_moteus/can_moteus/moteus_thread_manager.py @@ -1,14 +1,13 @@ import asyncio +import asyncio import threading import moteus -from moteus.moteus import Result from rclpy.node import Node -from lib.color_codes import ColorCodes, colorStr -from lib.configs import MoteusMotorConfig +from utility.color_text import ColorCodes -from .moteus_motor import MoteusMotor +from . import moteus_motor class MoteusThreadManager: @@ -18,31 +17,31 @@ class MoteusThreadManager: """ This creates a new thread called "moteus_thread" to run all of the asyncio methods required by the Moteus library + This creates a new thread called "moteus_thread" to run all + of the asyncio methods required by the Moteus library """ def __init__(self, ros_node: Node): - self._id_to_moteus_motor: dict[int, MoteusMotor] = {} - self._id_to_moteus_controller: dict[int, moteus.Controller] = {} # Used by the thread + self._name_to_moteus_motor: dict[str, moteus_motor.MoteusMotor] = {} + self._name_to_moteus_controller: dict[str, moteus.Controller] = {} # Used by the thread self._ros_node = ros_node self._moteus_thread: threading.Thread | None = None self._should_moteus_thread_loop = True # No thread safety, but it works lololol self._should_reconnect = True # No thread safety, but it works lololol - def addMotor(self, config: MoteusMotorConfig) -> None: + def addMotor(self, can_id: int, motor_name: str) -> None: """ - Adds a motor to the list to attempt to connect to it. + Adds a motor to the list to attempt to connect to """ - if self._moteus_thread is not None: - self._ros_node.get_logger().error("Attempted to add motor after thread was started!") - return - # Create motor - motor = MoteusMotor(config, self._ros_node) - self._id_to_moteus_motor[config.can_id] = motor + motor = moteus_motor.MoteusMotor(can_id, motor_name, self._ros_node) + self._name_to_moteus_motor[motor_name] = motor + def start(self) -> None: def start(self) -> None: """ Starts a new thread. New motors cannot be added after this is called + Starts a new thread. New motors cannot be added after this is called """ self._moteus_thread = threading.Thread( @@ -53,47 +52,77 @@ def start(self) -> None: def reconnectMotors(self) -> None: self._should_reconnect = True + self._moteus_thread = threading.Thread( + target=self.threadEntry, name="moteus_thread", daemon=True + ) + self._moteus_thread.start() + + def reconnectMotors(self) -> None: + self._should_reconnect = True + + def terminateAllThreads(self) -> None: def terminateAllThreads(self) -> None: """ Gracefully shuts down the motors by calling set_stop(). Terminates the thread. Does not clean up this class + Gracefully shuts down the motors by calling set_stop(). + Terminates the thread. + Does not clean up this class """ self._should_moteus_thread_loop = False if self._moteus_thread is not None: self._moteus_thread.join() + def threadEntry(self) -> None: + self._should_moteus_thread_loop = False + if self._moteus_thread is not None: + self._moteus_thread.join() + def threadEntry(self) -> None: """ The entry of the thread that launches the asyncio loop + The entry of the thread that launches the asyncio loop """ - self._ros_node.get_logger().info(colorStr("Moteus Thread Launched", ColorCodes.BLUE_OK)) + self._ros_node.get_logger().info( + ColorCodes.BLUE_OK + "Moteus Thread Launched" + ColorCodes.ENDC + ) asyncio.run(self.startLoop()) - async def tryToShutdownMotor(self, can_id: int) -> None: + async def tryToShutdownMotor(self, motor_name: str) -> None: self._ros_node.get_logger().info( - colorStr(f"Unexpectedly trying to turn off motor: {can_id}", ColorCodes.WARNING_YELLOW) + ColorCodes.WARNING_YELLOW + + f"Unexpectedly trying to turn off motor \"{motor_name}\" (CANID " + + str(self._name_to_moteus_motor[motor_name].canID) + ")" + + ColorCodes.ENDC ) try: await asyncio.wait_for( - self._id_to_moteus_controller[can_id].set_stop(), + self._name_to_moteus_controller[motor_name].set_stop(), timeout=self.GENERAL_TIMEOUT, ) self._ros_node.get_logger().info( - colorStr(f"Stopped motor: {can_id}", ColorCodes.GREEN_OK) + ColorCodes.GREEN_OK + + f"Stopped motor \"{motor_name}\" (CANID " + + str(self._name_to_moteus_motor[motor_name].can_id) + ")" + + ColorCodes.ENDC ) except asyncio.TimeoutError: self._ros_node.get_logger().info( - colorStr(f'FAILED TO "set_stop" MOTOR. TIMED OUT {can_id}', ColorCodes.FAIL_RED) + ColorCodes.FAIL_RED + + F"FAILED TO \"set_stop\" MOTOR. TIMED OUT \"{motor_name}\" (CANID " + + str(self._name_to_moteus_motor[motor_name].can_id) + ")" + + ColorCodes.ENDC ) - del self._id_to_moteus_controller[can_id] - del self._id_to_moteus_motor[can_id] + del self._name_to_moteus_controller[motor_name] + del self._name_to_moteus_motor[motor_name] except RuntimeError as error: - self._ros_node.get_logger().info(colorStr(str(error), ColorCodes.FAIL_RED)) - del self._id_to_moteus_controller[can_id] - del self._id_to_moteus_motor[can_id] + self._ros_node.get_logger().info(ColorCodes.FAIL_RED + str(error) + ColorCodes.ENDC) + del self._name_to_moteus_controller[motor_name] + del self._name_to_moteus_motor[motor_name] + async def startLoop(self) -> None: async def startLoop(self) -> None: """ The main loop of the whole system. @@ -109,51 +138,66 @@ async def startLoop(self) -> None: 3) Reconnect to Moteus Controllers + The main loop of the whole system. + Reads/sends data to/from the Moteus controllers. + + This can handle the following edge cases + ---------- + 1) Motor faults + A) set_stop() the motor or + B) Remove the motor from the list of motors + 2) CAN Bus disconnection + A) Remove the motor from the list of motors + 3) Reconnect to Moteus Controllers + + """ # Connect the motor for the first time await self.connectToMoteusControllers() + while self._should_moteus_thread_loop: + if self._should_reconnect: while self._should_moteus_thread_loop: if self._should_reconnect: await self.connectToMoteusControllers() + # Go through each Moteus Controller to send data - for can_id, controller in self._id_to_moteus_controller.copy().items(): - motor = self._id_to_moteus_motor[can_id] + for name, controller in self._name_to_moteus_controller.copy().items(): + motor = self._name_to_moteus_motor[name] try: # Check for faults - result_from_moteus: Result = await asyncio.wait_for( + result_from_moteus = await asyncio.wait_for( controller.query(), self.GENERAL_TIMEOUT ) if result_from_moteus.values[moteus.Register.FAULT] != 0: self._ros_node.get_logger().info( - colorStr( - f"FAULT CODE: {result_from_moteus.values[moteus.Register.FAULT]} " - f"FOR {motor.config.can_id}", - ColorCodes.FAIL_RED, - ) + ColorCodes.FAIL_RED + + f"FAULT CODE: {result_from_moteus.values[moteus.Register.FAULT]} FOR " + + F"\"{name}\" (CANID {motor.can_id})" + + ColorCodes.ENDC ) - await self.tryToShutdownMotor(can_id) + await self.tryToShutdownMotor(name) continue - if motor.run_settings.set_stop is True: + if motor.setStop is True: await asyncio.wait_for(controller.set_stop(), self.GENERAL_TIMEOUT) else: result_from_moteus = await asyncio.wait_for( controller.set_position( - position=motor.run_settings.position, - velocity=motor.run_settings.velocity, - feedforward_torque=motor.run_settings.feedforward_torque, - kp_scale=motor.run_settings.kp_scale, - kd_scale=motor.run_settings.kd_scale, - maximum_torque=motor.run_settings.max_torque, - watchdog_timeout=motor.run_settings.watchdog_timeout, - velocity_limit=motor.run_settings.velocity_limit, - accel_limit=motor.run_settings.accel_limit, - fixed_voltage_override=motor.run_settings.fixed_voltage_override, + position=motor.position, + velocity=motor.velocity, + feedforward_torque=motor.feedforward_torque, + kp_scale=motor.kp_scale, + kd_scale=motor.kd_scale, + maximum_torque=motor.max_torque, + watchdog_timeout=motor.watchdog_timeout, + velocity_limit=motor.velocity_limit, + accel_limit=motor.accel_limit, + fixed_voltage_override=motor.fixed_voltage_override, query=True, ), self.GENERAL_TIMEOUT, @@ -163,98 +207,69 @@ async def startLoop(self) -> None: except asyncio.TimeoutError: self._ros_node.get_logger().info( - colorStr( - f"FAILED TO SEND/READ DATA TO MOTEUS MOTOR: {can_id} " - + "CAN-FD bus disconnected?", - ColorCodes.FAIL_RED, - ), + ColorCodes.FAIL_RED + + f"FAILED TO SEND/READ DATA TO MOTEUS MOTOR: \"{name}\" {motor.can_id}) " + + "CAN-FD bus disconnected?" + + ColorCodes.ENDC ) - del self._id_to_moteus_controller[can_id] - del self._id_to_moteus_motor[can_id] + del self._name_to_moteus_controller[name] + del self._name_to_moteus_motor[name] await asyncio.sleep(0.02) + # When we exit the while loop, via ctrl-c, we set_stop() all the motors # Watch out for the arm - for can_id, controller in self._id_to_moteus_controller.items(): + for name, controller in self._name_to_moteus_controller.items(): await controller.set_stop() + async def connectToMoteusControllers(self) -> None: + async def connectToMoteusControllers(self) -> None: """ Connect to the Moteus motors. There is a timeout until we give up trying to connect + Connect to the Moteus motors. + There is a timeout until we give up trying to connect """ - self._id_to_moteus_controller = {} + self._name_to_moteus_controller = {} self._should_reconnect = False - for can_id, motor in self._id_to_moteus_motor.items(): + for key, motor in self._name_to_moteus_motor.items(): qr = moteus.QueryResolution() qr.power = moteus.F32 qr.q_current = moteus.F32 qr.d_current = moteus.F32 - controller = moteus.Controller(motor.config.can_id, query_resolution=qr) + controller = moteus.Controller(motor.can_id, query_resolution=qr) try: # Reset the controller - self._ros_node.get_logger().info("Connecting to motor with id: " + str(can_id)) + self._ros_node.get_logger().info( + "Connecting to motor with name: " + str(motor.name) + ) await asyncio.wait_for( controller.query(), timeout=self.CONNECTION_TIMEOUT_IN_SECONDS ) # Try to get data, if timeout then cannot connect - self._id_to_moteus_controller[can_id] = controller + self._name_to_moteus_controller[key] = controller await controller.set_stop() self._ros_node.get_logger().info( - colorStr( - f"Moteus motor controller connected: {motor.config.can_id}", - ColorCodes.GREEN_OK, - ) - ) - - except asyncio.TimeoutError: - self._ros_node.get_logger().info( - colorStr( - "FAILED TO CONNECT TO MOTEUS CONTROLLER WITH CANID " - + str(motor.config.can_id), - ColorCodes.FAIL_RED, - ) - ) - continue - except RuntimeError as error: - self._ros_node.get_logger().info( - colorStr( - "ERROR WHEN set_stop() IS CALLED. MOST LIKELY CANNOT FIND CANBUS", - ColorCodes.FAIL_RED, - ) + ColorCodes.GREEN_OK + + f"Moteus motor controller connected: \"{motor.name}\" (CANID {motor.can_id})" + + ColorCodes.ENDC ) - self._ros_node.get_logger().info( - colorStr(str(error.with_traceback(None)), ColorCodes.FAIL_RED) - ) - continue - stream = moteus.Stream(controller, verbose=True) - try: - await asyncio.wait_for( - stream.command("conf load".encode(encoding="utf-8")), - timeout=self.CONNECTION_TIMEOUT_IN_SECONDS - ) - for key, value in motor.config.config.items(): - if key == "id.id": - continue - await asyncio.wait_for( - stream.command(f"conf set {key} {value}".encode(encoding="utf-8")), - timeout=self.CONNECTION_TIMEOUT_IN_SECONDS - ) except asyncio.TimeoutError: self._ros_node.get_logger().info( - colorStr( - "FAILED TO SET CONFIG ON MOTOR: " - + str(motor.config.can_id), - ColorCodes.FAIL_RED, - ) + ColorCodes.FAIL_RED + + "FAILED TO CONNECT TO MOTEUS CONTROLLER WITH CANID " + str(motor.can_id) + + ColorCodes.ENDC ) except RuntimeError as error: self._ros_node.get_logger().info( - colorStr("ERROR WHEN SETTING CONFIG.", ColorCodes.FAIL_RED) + ColorCodes.FAIL_RED + + "ERROR WHEN set_stop() IS CALLED. MOST LIKELY CANNOT FIND CANBUS" + + ColorCodes.ENDC ) self._ros_node.get_logger().info( - colorStr(str(error.with_traceback(None)), ColorCodes.FAIL_RED) + ColorCodes.FAIL_RED + str(error.with_traceback(None)) + ColorCodes.ENDC ) diff --git a/src/can_moteus/can_moteus/ros_moteus_bridge.py b/src/can_moteus/can_moteus/ros_moteus_bridge.py index 17888ae..ff88b89 100644 --- a/src/can_moteus/can_moteus/ros_moteus_bridge.py +++ b/src/can_moteus/can_moteus/ros_moteus_bridge.py @@ -1,13 +1,16 @@ import sys + import rclpy from rclpy.executors import ExternalShutdownException from rclpy.node import Node from std_msgs.msg import Float32 +from rclpy.node import Node +from std_msgs.msg import Float32 from usb.core import find as finddev -from lib.color_codes import ColorCodes, colorStr -from lib.configs import MotorConfigs +from utility.canbus_mappings import CanBusMappings +from utility.color_text import ColorCodes from . import moteus_thread_manager @@ -18,22 +21,34 @@ class RosMotuesBridge(Node): with the rest of the ROS codebase. You can easily add new motors using the addMotor() function from the self.threadManager. + You can attempt to reconnect to the Moteus Controllers during runtime. + The CANFD-USB is reset every time the code is execute from the ./launch.sh + This is the node that connects the Moteus Motor Controllers + with the rest of the ROS codebase. You can easily add new + motors using the addMotor() function from the self.threadManager. + You can attempt to reconnect to the Moteus Controllers during runtime. The CANFD-USB is reset every time the code is execute from the ./launch.sh """ + def __init__(self) -> None: + def __init__(self) -> None: super().__init__("can_moteus_node") - self.get_logger().info(colorStr("Launching can_moteus node", ColorCodes.BLUE_OK)) + self.get_logger().info( + ColorCodes.BLUE_OK + "Launching can_moteus node" + ColorCodes.ENDC + ) # Reset the CANFD-USB # run "lsusb" in cmd with the CANFD-USB connected # to find the idVendor and the idProduct dev = finddev(idVendor=0x0483, idProduct=0x5740) + if dev is not None: if dev is not None: dev.reset() self.thread_manager: moteus_thread_manager.MoteusThreadManager | None = None + self.canbus_mappings = CanBusMappings() self.reconnect_to_moteus_sub = self.create_subscription( Float32, "reconnectMoteusControllers", self.reconnect, 1 @@ -42,9 +57,9 @@ def __init__(self) -> None: self.createMoteusMotors() else: self.get_logger().info( - colorStr( - "Failed to find CANFD-USB usb device. Is it plugged in?", ColorCodes.FAIL_RED - ) + ColorCodes.FAIL_RED + + "Failed to find CANFD-USB usb device. Is it plugged in?" + + ColorCodes.ENDC ) def reconnect(self, _: Float32) -> None: @@ -52,32 +67,65 @@ def reconnect(self, _: Float32) -> None: Gracefully shuts down the threadManager and creates a new instance of the threadManager object. + Gracefully shuts down the threadManager and creates a new instance of + the threadManager object. + """ self.get_logger().info("Reconnecting") if self.thread_manager is not None: self.thread_manager.reconnectMotors() + if self.thread_manager is not None: + self.thread_manager.reconnectMotors() + def createMoteusMotors(self) -> None: def createMoteusMotors(self) -> None: """ Creates the threadManager and adds all the moteus motors + Creates the threadManager and adds all the moteus motors """ + self.thread_manager = moteus_thread_manager.MoteusThreadManager(self) + + self.thread_manager = moteus_thread_manager.MoteusThreadManager(self) # Drivebase - self.thread_manager.addMotor(MotorConfigs.REAR_RIGHT_DRIVE_MOTOR) - self.thread_manager.addMotor(MotorConfigs.MID_RIGHT_DRIVE_MOTOR) - self.thread_manager.addMotor(MotorConfigs.FRONT_RIGHT_DRIVE_MOTOR) - self.thread_manager.addMotor(MotorConfigs.REAR_LEFT_DRIVE_MOTOR) - self.thread_manager.addMotor(MotorConfigs.MID_LEFT_DRIVE_MOTOR) - self.thread_manager.addMotor(MotorConfigs.FRONT_LEFT_DRIVE_MOTOR) + self.thread_manager.addMotor( + CanBusMappings.CANID_REAR_RIGHT_DRIVE_MOTOR, "rear_right_drive_motor" + ) + self.thread_manager.addMotor( + CanBusMappings.CANID_MID_RIGHT_DRIVE_MOTOR, "mid_right_drive_motor" + ) + self.thread_manager.addMotor( + CanBusMappings.CANID_FRONT_RIGHT_DRIVE_MOTOR, "front_right_drive_motor" + ) + + self.thread_manager.addMotor( + CanBusMappings.CANID_REAR_LEFT_DRIVE_MOTOR, "rear_left_drive_motor" + ) + self.thread_manager.addMotor( + CanBusMappings.CANID_MID_LEFT_DRIVE_MOTOR, "mid_left_drive_motor" + ) + self.thread_manager.addMotor( + CanBusMappings.CANID_FRONT_LEFT_DRIVE_MOTOR, "front_left_drive_motor" + ) # Arm - self.thread_manager.addMotor(MotorConfigs.ARM_TURNTABLE_MOTOR) - self.thread_manager.addMotor(MotorConfigs.ARM_SHOULDER_MOTOR) - self.thread_manager.addMotor(MotorConfigs.ARM_ELBOW_MOTOR) - self.thread_manager.addMotor(MotorConfigs.ARM_LEFT_WRIST_MOTOR) - self.thread_manager.addMotor(MotorConfigs.ARM_RIGHT_WRIST_MOTOR) + self.thread_manager.addMotor( + CanBusMappings.CANID_ARM_TURNTABLE_MOTOR, "arm_turntable_motor" + ) + self.thread_manager.addMotor( + CanBusMappings.CANID_ARM_SHOULDER_MOTOR, "arm_shoulder_motor" + ) + self.thread_manager.addMotor( + CanBusMappings.CANID_ARM_ELBOW_MOTOR, "arm_elbow_motor" + ) + self.thread_manager.addMotor( + CanBusMappings.CANID_ARM_LEFT_WRIST_MOTOR, "arm_left_wrist_motor" + ) + self.thread_manager.addMotor( + CanBusMappings.CANID_ARM_RIGHT_WRIST_MOTOR, "arm_right_wrist_motor" + ) self.thread_manager.start() @@ -85,23 +133,27 @@ def createMoteusMotors(self) -> None: def main(args: list[str] | None = None) -> None: """ The entry point of the node. + The entry point of the node. """ + rclpy.init(args=args) try: node = RosMotuesBridge() rclpy.spin(node) + except KeyboardInterrupt: pass except ExternalShutdownException: # This is done when we ctrl-c the progam to shut it down - node.get_logger().info(colorStr("Shutting down can_moteus", ColorCodes.BLUE_OK)) + node.get_logger().info(ColorCodes.BLUE_OK + "Shutting down can_moteus" + ColorCodes.ENDC) if node.thread_manager is not None: node.thread_manager.terminateAllThreads() node.destroy_node() sys.exit(0) + if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/src/can_moteus/test/test_copyright.py b/src/can_moteus/test/test_copyright.py index 60c2d1e..0b3e7df 100644 --- a/src/can_moteus/test/test_copyright.py +++ b/src/can_moteus/test/test_copyright.py @@ -12,14 +12,19 @@ # See the License for the specific language governing permissions and # limitations under the License. +import pytest import pytest from ament_copyright.main import main # Remove the `skip` decorator once the source file(s) have a copyright header -@pytest.mark.skip(reason="No copyright header has been placed in the generated source file.") +@pytest.mark.skip( + reason="No copyright header has been placed in the generated source file." +) @pytest.mark.copyright @pytest.mark.linter def test_copyright(): rc = main(argv=[".", "test"]) assert rc == 0, "Found errors" + rc = main(argv=[".", "test"]) + assert rc == 0, "Found errors" diff --git a/src/custom_interfaces/robot_info.py b/src/custom_interfaces/robot_info.py index a34165e..c1639b4 100644 --- a/src/custom_interfaces/robot_info.py +++ b/src/custom_interfaces/robot_info.py @@ -1,15 +1,8 @@ -import math -from typing import Any, Callable, get_args, Literal, TYPE_CHECKING -import sys -sys.path.append("/home/trickfire/urc-2023/src") - -from utility.canbus_mappings import CanBusMappings -from utility.moteus_data_out_json_helper import MoteusDataOutJsonHelper - from rclpy.node import Node +from rclpy.subscription import Subscription from std_msgs.msg import String - +from utility.moteus_data_out_json_helper import MoteusDataOutJsonHelper moteusTopicList = { "front_left_drive_motor_from_can", @@ -26,41 +19,38 @@ } +class RobotInfo: + + def __init__(self, ros_node: Node): + self._ros_node = ros_node + self.sub_list: list[Subscription] = [] # empty array + self.can_id_to_json: dict[int, MoteusDataOutJsonHelper] = {} # Dict + + self.can_id_to_json[20] = MoteusDataOutJsonHelper() + self.can_id_to_json[21] = MoteusDataOutJsonHelper() + self.can_id_to_json[22] = MoteusDataOutJsonHelper() + self.can_id_to_json[23] = MoteusDataOutJsonHelper() + self.can_id_to_json[24] = MoteusDataOutJsonHelper() + self.can_id_to_json[25] = MoteusDataOutJsonHelper() + self.can_id_to_json[1] = MoteusDataOutJsonHelper() + self.can_id_to_json[2] = MoteusDataOutJsonHelper() + self.can_id_to_json[3] = MoteusDataOutJsonHelper() + self.can_id_to_json[4] = MoteusDataOutJsonHelper() + self.can_id_to_json[5] = MoteusDataOutJsonHelper() -class RobotInfo(): - - - def __init__(self, rosNode : Node): - self._rosNode = rosNode - self.subList = [] # empty array - self.canIDToJSON = {} #Dict - - self.canIDToJSON[20] = MoteusDataOutJsonHelper() - self.canIDToJSON[21] = MoteusDataOutJsonHelper() - self.canIDToJSON[22] = MoteusDataOutJsonHelper() - self.canIDToJSON[23] = MoteusDataOutJsonHelper() - self.canIDToJSON[24] = MoteusDataOutJsonHelper() - self.canIDToJSON[25] = MoteusDataOutJsonHelper() - self.canIDToJSON[1] = MoteusDataOutJsonHelper() - self.canIDToJSON[2] = MoteusDataOutJsonHelper() - self.canIDToJSON[3] = MoteusDataOutJsonHelper() - self.canIDToJSON[4] = MoteusDataOutJsonHelper() - self.canIDToJSON[5] = MoteusDataOutJsonHelper() - self.createSubscribers() - - def createSubscribers(self): - for topicName in moteusTopicList: - sub = self._rosNode.create_subscription(String, topicName, self.subCallback, 1) - self.subList.append(sub) - - def subCallback(self, msg): - jsonHelper = MoteusDataOutJsonHelper() - jsonHelper.buildHelper(msg.data) - self.canIDToJSON[jsonHelper.canID] = jsonHelper - - def getDataFromCanID(self, canID): - return self.canIDToJSON[canID] - - \ No newline at end of file + def createSubscribers(self) -> None: + for topic_name in moteusTopicList: + sub = self._ros_node.create_subscription( + String, topic_name, self.subCallback, 1 + ) + self.sub_list.append(sub) + + def subCallback(self, msg: String) -> None: + json_helper = MoteusDataOutJsonHelper() + json_helper.buildHelper(msg.data) + self.can_id_to_json[json_helper.can_id] = json_helper + + def getDataFromCanID(self, can_id: int) -> MoteusDataOutJsonHelper: + return self.can_id_to_json[can_id] diff --git a/src/custom_interfaces/robot_interface.py b/src/custom_interfaces/robot_interface.py index 65f453f..8df2633 100644 --- a/src/custom_interfaces/robot_interface.py +++ b/src/custom_interfaces/robot_interface.py @@ -1,197 +1,222 @@ -#!/usr/bin/env python3 - # General interface for robot funcitonality -import rclpy from rclpy.node import Node -import std_msgs.msg -from std_msgs.msg import String -from std_msgs.msg import Float32 -import math +from rclpy.publisher import Publisher +from std_msgs.msg import Float32, String + +from utility.moteus_data_in_json_helper import MoteusDataInJsonHelper VELOCITY_CONVERSION = 1 -POSITION_CONVERSION = 1 / (6.28) #Radians to position ticks -REV_TO_RADIANS = 6.28 # One Revolution = 2pi +POSITION_CONVERSION = 1 / (6.28) # Radians to position ticks +REV_TO_RADIANS = 6.28 # One Revolution = 2pi -from utility.moteus_data_in_json_helper import MoteusDataInJsonHelper -robotPublishers = dict() +robot_publishers: dict[str, Publisher] = {} -class RobotInterface(Node): + +class RobotInterface: # # Constructors/Destructors # - - def __init__(self, rosNode): - self._rosNode = rosNode + + def __init__(self, ros_node: Node) -> None: + self._ros_node = ros_node # Drive base - publisher = self._rosNode.create_publisher(String, 'front_left_drive_motor_from_interface', 10) - robotPublishers['front_left_drive_motor'] = publisher - publisher = self._rosNode.create_publisher(String, 'front_right_drive_motor_from_interface', 10) - robotPublishers['front_right_drive_motor'] = publisher - publisher = self._rosNode.create_publisher(String, 'mid_left_drive_motor_from_interface', 10) - robotPublishers['mid_left_drive_motor'] = publisher - publisher = self._rosNode.create_publisher(String, 'mid_right_drive_motor_from_interface', 10) - robotPublishers['mid_right_drive_motor'] = publisher - publisher = self._rosNode.create_publisher(String, 'rear_left_drive_motor_from_interface', 10) - robotPublishers['rear_left_drive_motor'] = publisher - publisher = self._rosNode.create_publisher(String, 'rear_right_drive_motor_from_interface', 10) - robotPublishers['rear_right_drive_motor'] = publisher - - robotPublishers['arm_fingers_motor'] = publisher + publisher = self._ros_node.create_publisher( + String, "front_left_drive_motor_from_interface", 10 + ) + robot_publishers["front_left_drive_motor"] = publisher + publisher = self._ros_node.create_publisher( + String, "front_right_drive_motor_from_interface", 10 + ) + robot_publishers["front_right_drive_motor"] = publisher + publisher = self._ros_node.create_publisher( + String, "mid_left_drive_motor_from_interface", 10 + ) + robot_publishers["mid_left_drive_motor"] = publisher + publisher = self._ros_node.create_publisher( + String, "mid_right_drive_motor_from_interface", 10 + ) + robot_publishers["mid_right_drive_motor"] = publisher + publisher = self._ros_node.create_publisher( + String, "rear_left_drive_motor_from_interface", 10 + ) + robot_publishers["rear_left_drive_motor"] = publisher + publisher = self._ros_node.create_publisher( + String, "rear_right_drive_motor_from_interface", 10 + ) + robot_publishers["rear_right_drive_motor"] = publisher + + robot_publishers["arm_fingers_motor"] = publisher # Antenna - publisher = self._rosNode.create_publisher(Float32, 'antenna_motor_position_from_interface', 10) - robotPublishers['antenna_motor'] = publisher - publisher = self._rosNode.create_publisher(Float32, 'antenna_turntable_motor_position_from_interface', 10) - robotPublishers['antenna_turntable_motor'] = publisher - - + publisher = self._ros_node.create_publisher( + Float32, "antenna_motor_position_from_interface", 10 + ) + robot_publishers["antenna_motor"] = publisher + publisher = self._ros_node.create_publisher( + Float32, "antenna_turntable_motor_position_from_interface", 10 + ) + robot_publishers["antenna_turntable_motor"] = publisher + # Arm - publisher = self._rosNode.create_publisher(String, 'arm_turntable_motor_from_interface', 10) - robotPublishers['arm_turntable_motor'] = publisher - publisher = self._rosNode.create_publisher(String, 'arm_shoulder_motor_from_interface', 10) - robotPublishers['arm_shoulder_motor'] = publisher - publisher = self._rosNode.create_publisher(String, 'arm_elbow_motor_from_interface', 10) - robotPublishers['arm_elbow_motor'] = publisher - publisher = self._rosNode.create_publisher(String, 'arm_left_wrist_motor_from_interface', 10) - robotPublishers['arm_left_wrist_motor'] = publisher - publisher = self._rosNode.create_publisher(String, 'arm_right_wrist_motor_from_interface', 10) - robotPublishers['arm_right_wrist_motor'] = publisher - - - def velocityConversion(self, amount): + publisher = self._ros_node.create_publisher( + String, "arm_turntable_motor_from_interface", 10 + ) + robot_publishers["arm_turntable_motor"] = publisher + publisher = self._ros_node.create_publisher( + String, "arm_shoulder_motor_from_interface", 10 + ) + robot_publishers["arm_shoulder_motor"] = publisher + publisher = self._ros_node.create_publisher( + String, "arm_elbow_motor_from_interface", 10 + ) + robot_publishers["arm_elbow_motor"] = publisher + publisher = self._ros_node.create_publisher( + String, "arm_left_wrist_motor_from_interface", 10 + ) + robot_publishers["arm_left_wrist_motor"] = publisher + publisher = self._ros_node.create_publisher( + String, "arm_right_wrist_motor_from_interface", 10 + ) + robot_publishers["arm_right_wrist_motor"] = publisher + + def velocityConversion(self, amount: float) -> float: return amount * VELOCITY_CONVERSION # Converting from input "radians" to output "revolutions" - def positionConversion(self, amount): + def positionConversion(self, amount: float) -> float: return amount * POSITION_CONVERSION - + # General movement including all wheels - def moveForward(): + def moveForward(self, amount: float) -> None: print() - def moveBackward(self, amount): + + def moveBackward(self, amount: float) -> None: print() - def turnLeft(self, amount): + + def turnLeft(self, amount: float) -> None: print() - def turnRight(self, amount): + + def turnRight(self, amount: float) -> None: print() # ------ DRIVEBASE ------ # Left front wheel - MEASURED IN REVOLUTIONS PER SECOND - def front_left_drive_motor(self, amount): - self._send_drive_motor("front_left_drive_motor", radiansPerSecond = (amount)) + def frontLeftDriveMotor(self, amount: float) -> None: + self._sendDriveMotor("front_left_drive_motor", radians_per_second=amount) # Right front wheel - def front_right_drive_motor(self, amount): - self._send_drive_motor("front_right_drive_motor", radiansPerSecond = (amount)) + def frontRightDriverMotor(self, amount: float) -> None: + self._sendDriveMotor("front_right_drive_motor", radians_per_second=amount) # Left middle wheel - def mid_left_drive_motor(self, amount): - self._send_drive_motor("mid_left_drive_motor", radiansPerSecond = (amount)) + def midLeftDriveMotor(self, amount: float) -> None: + self._sendDriveMotor("mid_left_drive_motor", radians_per_second=amount) # Right middle wheel - def mid_right_drive_motor(self, amount): - self._send_drive_motor("mid_right_drive_motor", radiansPerSecond = (amount)) + def midRightDriveMotor(self, amount: float) -> None: + self._sendDriveMotor("mid_right_drive_motor", radians_per_second=amount) # Left back wheel - def rear_left_drive_motor(self, amount): - self._send_drive_motor("rear_left_drive_motor", radiansPerSecond = (amount)) + def rearLeftDriveMotor(self, amount: float) -> None: + self._sendDriveMotor("rear_left_drive_motor", radians_per_second=amount) # Right back wheel - def rear_right_drive_motor(self, amount): - self._send_drive_motor("rear_right_drive_motor", radiansPerSecond = (amount)) - - def _send_drive_motor(self, pubName, radiansPerSecond = 0): - publisher = robotPublishers[pubName] - - strMsg = String() - jsonHelper = MoteusDataInJsonHelper() - jsonHelper.velocity = radiansPerSecond - jsonHelper.setStop = False - - strMsg.data = jsonHelper.buildJSONString() - publisher.publish(strMsg) + def rearRightDriveMotor(self, amount: float) -> None: + self._sendDriveMotor("rear_right_drive_motor", radians_per_second=amount) + + def _sendDriveMotor(self, pub_name: str, radians_per_second: float = 0.0) -> None: + publisher = robot_publishers[pub_name] + + str_msg = String() + json_helper = MoteusDataInJsonHelper() + json_helper.velocity = radians_per_second + json_helper.set_stop = False + + str_msg.data = json_helper.buildJSONString() + publisher.publish(str_msg) # ------ ARM ------ - - def arm_turntable_velocity(self, targetVel): - self._send_arm_velocity("arm_turntable_motor", targetVel) - - def shoulder_velocity(self, targetVel): - self._send_arm_velocity("arm_shoulder_motor", targetVel) - - def elbow_velocity(self, targetVel): - self._send_arm_velocity("arm_elbow_motor", targetVel) - - def leftWrist_velocity(self, targetVel): - self._send_arm_velocity("arm_left_wrist_motor", targetVel) - - def rightWrist_velocity(self, targetVel): - self._send_arm_velocity("arm_right_wrist_motor", targetVel) + + def armTurntableVelocity(self, target_vel: float) -> None: + self._sendArmVelocity("arm_turntable_motor", target_vel) + + def shoulderVelocity(self, target_vel: float) -> None: + self._sendArmVelocity("arm_shoulder_motor", target_vel) + + def elbowVelocity(self, target_vel: float) -> None: + self._sendArmVelocity("arm_elbow_motor", target_vel) + + def leftWriteVelocity(self, target_vel: float) -> None: + self._sendArmVelocity("arm_left_wrist_motor", target_vel) + + def rightWristVelocity(self, target_vel: float) -> None: + self._sendArmVelocity("arm_right_wrist_motor", target_vel) # For now, I am sending rev/sec - def _send_arm_velocity(self, pubName, velocity = 0): - publisher = robotPublishers[pubName] - - strMsg = String() - jsonHelper = MoteusDataInJsonHelper() - jsonHelper.velocity = velocity - jsonHelper.setStop = False - - strMsg.data = jsonHelper.buildJSONString() - publisher.publish(strMsg) - - - def disable_arm_turntable_motor(self): - self._disable_motor("arm_turntable_motor") - - def disable_arm_shoulder_motor(self): - self._disable_motor("arm_shoulder_motor") - - def disable_arm_elbow_motor(self): - self._disable_motor("arm_elbow_motor") - - def disable_arm_left_wrist_motor(self): - self._disable_motor("arm_left_wrist_motor") - - def disable_arm_right_wrist_motor(self): - self._disable_motor("arm_right_wrist_motor") - - def _disable_motor(self, pubName): - publisher = robotPublishers[pubName] - - strMsg = String() - jsonHelper = MoteusDataInJsonHelper() - jsonHelper.velocity = 0 # for extra security - jsonHelper.setStop = True - - strMsg.data = jsonHelper.buildJSONString() - publisher.publish(strMsg) - - + def _sendArmVelocity(self, pub_name: str, velocity: float = 0.0) -> None: + publisher = robot_publishers[pub_name] + + str_msg = String() + json_helper = MoteusDataInJsonHelper() + json_helper.velocity = velocity + json_helper.set_stop = False + + str_msg.data = json_helper.buildJSONString() + publisher.publish(str_msg) + + def disableArmTurntableMotor(self) -> None: + self._disableMotor("arm_turntable_motor") + + def disableArmShoulderMotor(self) -> None: + self._disableMotor("arm_shoulder_motor") + + def disableArmElbowMotor(self) -> None: + self._disableMotor("arm_elbow_motor") + + def disableArmLeftWristMotor(self) -> None: + self._disableMotor("arm_left_wrist_motor") + + def disableArmRightWristMotor(self) -> None: + self._disableMotor("arm_right_wrist_motor") + + def _disableMotor(self, pub_name: str) -> None: + publisher = robot_publishers[pub_name] + + str_msg = String() + json_helper = MoteusDataInJsonHelper() + json_helper.velocity = 0 # for extra security + json_helper.set_stop = True + + str_msg.data = json_helper.buildJSONString() + publisher.publish(str_msg) # Antenna movement - def antenna_motor_extend(self): + def antennaMotorExtend(self) -> None: # Output is in "revolutions" - revolutionsOutput = 1 # we don't know the actual position it should be. this is a placeholder - publisher = robotPublishers['antenna_motor'] - strMsg = Float32() - strMsg.data = revolutionsOutput - publisher.publish(strMsg) - - def antenna_motor_retract(self): + revolutions_output = ( + 1 # we don't know the actual position it should be. this is a placeholder + ) + publisher = robot_publishers["antenna_motor"] + str_msg = Float32() + str_msg.data = revolutions_output + publisher.publish(str_msg) + + def antennaMotorRetract(self) -> None: # Output is in "revolutions" - revolutionsOutput = 0 # we don't know the actual position it should be. this is a placeholder - publisher = robotPublishers['antenna_motor'] - strMsg = Float32() - strMsg.data = revolutionsOutput - publisher.publish(strMsg) - - def antenna_turntable_motor(self, amount): - revolutionsOutput = self.positionConversion(amount) - publisher = robotPublishers['antenna_turntable_motor'] - strMsg = Float32() - strMsg.data = revolutionsOutput - publisher.publish(strMsg) + revolutions_output = ( + 0 # we don't know the actual position it should be. this is a placeholder + ) + publisher = robot_publishers["antenna_motor"] + str_msg = Float32() + str_msg.data = revolutions_output + publisher.publish(str_msg) + + def antennaTurntableMotor(self, amount: float) -> None: + revolutions_output = self.positionConversion(amount) + publisher = robot_publishers["antenna_turntable_motor"] + str_msg = Float32() + str_msg.data = revolutions_output + publisher.publish(str_msg) diff --git a/src/drivebase/drivebase/drivebase.py b/src/drivebase/drivebase/drivebase.py index a9a2321..3f64351 100644 --- a/src/drivebase/drivebase/drivebase.py +++ b/src/drivebase/drivebase/drivebase.py @@ -5,17 +5,17 @@ from rclpy.node import Node from std_msgs.msg import Float32 -from lib.color_codes import ColorCodes, colorStr -from lib.configs import MotorConfigs -from lib.interface.robot_interface import RobotInterface +from interface.robot_interface import RobotInterface +from utility.color_text import ColorCodes class Drivebase(Node): - SPEED = 6.28 * 1.5 + SPEED = 1.5 def __init__(self) -> None: super().__init__("drivebase") - self.get_logger().info(colorStr("Launching drivebase node", ColorCodes.BLUE_OK)) + self.get_logger().info(ColorCodes.BLUE_OK + "Launching drivebase node" + ColorCodes.ENDC) + self.bot_interface = RobotInterface(self) self.left_subscription = self.create_subscription( @@ -27,15 +27,15 @@ def __init__(self) -> None: def moveLeftSide(self, msg: Float32) -> None: vel = msg.data * self.SPEED - self.bot_interface.runMotorSpeed(MotorConfigs.FRONT_LEFT_DRIVE_MOTOR, -vel) - self.bot_interface.runMotorSpeed(MotorConfigs.MID_LEFT_DRIVE_MOTOR, -vel) - self.bot_interface.runMotorSpeed(MotorConfigs.REAR_LEFT_DRIVE_MOTOR, -vel) + self.bot_interface.frontLeftDriveMotor(-vel) + self.bot_interface.midLeftDriveMotor(-vel) + self.bot_interface.rearLeftDriveMotor(-vel) def moveRightSide(self, msg: Float32) -> None: vel = msg.data * self.SPEED - self.bot_interface.runMotorSpeed(MotorConfigs.FRONT_RIGHT_DRIVE_MOTOR, vel) - self.bot_interface.runMotorSpeed(MotorConfigs.MID_RIGHT_DRIVE_MOTOR, vel) - self.bot_interface.runMotorSpeed(MotorConfigs.REAR_RIGHT_DRIVE_MOTOR, vel) + self.bot_interface.frontRightDriverMotor(vel) + self.bot_interface.midRightDriveMotor(vel) + self.bot_interface.rearRightDriveMotor(vel) def turnLeft(self, msg: Float32) -> None: self.moveLeftSide(msg) @@ -57,7 +57,9 @@ def main(args: list[str] | None = None) -> None: # Destroy the node explicitly # (optional - otherwise it will be done automatically # when the garbage collector destroys the node object) - drivebase.get_logger().info(colorStr("Shutting down drivebase", ColorCodes.BLUE_OK)) + drivebase.get_logger().info( + ColorCodes.BLUE_OK + "Shutting down drivebase" + ColorCodes.ENDC + ) drivebase.destroy_node() sys.exit(0) diff --git a/src/mission_control_updater/mission_control_updater/infoToJSONHelper.py b/src/mission_control_updater/mission_control_updater/infoToJSONHelper.py deleted file mode 100644 index dd6b949..0000000 --- a/src/mission_control_updater/mission_control_updater/infoToJSONHelper.py +++ /dev/null @@ -1,26 +0,0 @@ -import json -import array - - -class InfoToJSONHelper(): - - def __init__(self): - self.moteusEntries = [] - - - - def addMoteusEntry(self, entry): - self.moteusEntries.append(entry) - - def buildJSONString(self): - moteusDictArray = [] - - for moteusEntry in self.moteusEntries: - moteusDictArray.append(moteusEntry.buildPythonDict()) - - pythonDict = { - "moteusMotorLength": len(moteusDictArray), - "moteusMotors": moteusDictArray - } - - return json.dumps(pythonDict) \ No newline at end of file diff --git a/src/mission_control_updater/mission_control_updater/info_to_json_helper.py b/src/mission_control_updater/mission_control_updater/info_to_json_helper.py index b537ac9..a66f16e 100644 --- a/src/mission_control_updater/mission_control_updater/info_to_json_helper.py +++ b/src/mission_control_updater/mission_control_updater/info_to_json_helper.py @@ -1,21 +1,21 @@ import json -from lib.moteus_motor_state import MoteusMotorState +from utility.moteus_data_out_json_helper import MoteusDataOutJsonHelper class InfoToJSONHelper: def __init__(self) -> None: - self.moteus_entries: list[MoteusMotorState] = [] + self.moteus_entries: list[MoteusDataOutJsonHelper] = [] - def addMoteusEntry(self, entry: MoteusMotorState) -> None: + def addMoteusEntry(self, entry: MoteusDataOutJsonHelper) -> None: self.moteus_entries.append(entry) def buildJSONString(self) -> str: moteus_dict_array = [] for moteus_entry in self.moteus_entries: - moteus_dict_array.append(moteus_entry.toDict()) + moteus_dict_array.append(moteus_entry.buildPythonDict()) python_dict = { "moteusMotorLength": len(moteus_dict_array), diff --git a/src/mission_control_updater/mission_control_updater/updater.py b/src/mission_control_updater/mission_control_updater/updater.py index dd8a25f..7564422 100644 --- a/src/mission_control_updater/mission_control_updater/updater.py +++ b/src/mission_control_updater/mission_control_updater/updater.py @@ -1,23 +1,27 @@ import sys +import sys + import rclpy from rclpy.executors import ExternalShutdownException from rclpy.node import Node +from rclpy.node import Node from std_msgs.msg import String -from lib.color_codes import ColorCodes, colorStr -from lib.configs import MotorConfigs -from lib.interface.robot_info import RobotInfo +from interface.robot_info import RobotInfo +from utility.color_text import ColorCodes from . import info_to_json_helper class MissionControlUpdater(Node): + def __init__(self) -> None: + def __init__(self) -> None: super().__init__("mission_control_updater_node") self.get_logger().info( - colorStr("Launching mission_control_updater_node", ColorCodes.BLUE_OK) + ColorCodes.BLUE_OK + "Launching mission_control_updater_node" + ColorCodes.ENDC ) self.publisher_to_mc = self.create_publisher(String, "mission_control_updater", 1) @@ -26,36 +30,48 @@ def __init__(self) -> None: self.robot_info = RobotInfo(self) def sendData(self) -> None: + set_of_can_id = {20, 21, 22, 23, 24, 25, 1, 2, 3, 4, 5} + json_builder = info_to_json_helper.InfoToJSONHelper() - for motor in MotorConfigs.getAllMotors(): - json_builder.addMoteusEntry(self.robot_info.getMotorState(motor)) + for can_id in set_of_can_id: + json_builder.addMoteusEntry(self.robot_info.getDataFromCanID(can_id)) msg = String() msg.data = json_builder.buildJSONString() self.publisher_to_mc.publish(msg) +def main(args: list[str] | None = None) -> None: + msg.data = json_builder.buildJSONString() + self.publisher_to_mc.publish(msg) + + def main(args: list[str] | None = None) -> None: """ The entry point of the node. + The entry point of the node. """ + rclpy.init(args=args) try: node = MissionControlUpdater() rclpy.spin(node) + except KeyboardInterrupt: pass except ExternalShutdownException: # This is done when we ctrl-c the progam to shut it down node.get_logger().info( - colorStr("Shutting down mission_control_updater_node", ColorCodes.BLUE_OK) + ColorCodes.BLUE_OK + "Shutting down mission_control_updater_node" + ColorCodes.ENDC ) node.destroy_node() sys.exit(0) + if __name__ == "__main__": main() + diff --git a/src/mission_control_updater/setup.py b/src/mission_control_updater/setup.py index f6469a6..27a403d 100644 --- a/src/mission_control_updater/setup.py +++ b/src/mission_control_updater/setup.py @@ -1,23 +1,36 @@ from setuptools import find_packages, setup +package_name = "mission_control_updater" package_name = "mission_control_updater" setup( name=package_name, version="0.0.0", packages=find_packages(exclude=["test"]), + version="0.0.0", + packages=find_packages(exclude=["test"]), data_files=[ ("share/ament_index/resource_index/packages", ["resource/" + package_name]), ("share/" + package_name, ["package.xml"]), + ("share/ament_index/resource_index/packages", ["resource/" + package_name]), + ("share/" + package_name, ["package.xml"]), ], install_requires=["setuptools"], + install_requires=["setuptools"], zip_safe=True, maintainer="trickfire", maintainer_email="vladimirkupryukhin@gmail.com", description="TODO: Package description", license="TODO: License declaration", tests_require=["pytest"], + maintainer="trickfire", + maintainer_email="vladimirkupryukhin@gmail.com", + description="TODO: Package description", + license="TODO: License declaration", + tests_require=["pytest"], entry_points={ - "console_scripts": ["mission_control_updater = mission_control_updater.updater:main"], + "console_scripts": [ + "mission_control_updater = mission_control_updater.updater:main" + ], }, ) diff --git a/src/mission_control_updater/test/test_copyright.py b/src/mission_control_updater/test/test_copyright.py index 95f0381..e69de29 100644 --- a/src/mission_control_updater/test/test_copyright.py +++ b/src/mission_control_updater/test/test_copyright.py @@ -1,25 +0,0 @@ -# Copyright 2015 Open Source Robotics Foundation, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ament_copyright.main import main -import pytest - - -# Remove the `skip` decorator once the source file(s) have a copyright header -@pytest.mark.skip(reason="No copyright header has been placed in the generated source file.") -@pytest.mark.copyright -@pytest.mark.linter -def test_copyright(): - rc = main(argv=[".", "test"]) - assert rc == 0, "Found errors" diff --git a/src/utility/canbus_mappings.py b/src/utility/canbus_mappings.py index cdfa2fc..de61fba 100644 --- a/src/utility/canbus_mappings.py +++ b/src/utility/canbus_mappings.py @@ -1,5 +1,4 @@ - -class CanBusMappings(): +class CanBusMappings: # Drivebase CANID_REAR_RIGHT_DRIVE_MOTOR = 20 CANID_MID_RIGHT_DRIVE_MOTOR = 21 @@ -15,7 +14,6 @@ class CanBusMappings(): CANID_ARM_LEFT_WRIST_MOTOR = 3 CANID_ARM_RIGHT_WRIST_MOTOR = 4 CANID_ARM_TURNTABLE_MOTOR = 5 - - def __init__(self): - pass + def __init__(self) -> None: + pass diff --git a/src/utility/color_text.py b/src/utility/color_text.py index 060df29..2d8ff65 100644 --- a/src/utility/color_text.py +++ b/src/utility/color_text.py @@ -1,12 +1,12 @@ - -# "Borrowed" from here: https://stackoverflow.com/questions/287871/how-do-i-print-colored-text-to-the-terminal +# "Borrowed" from here: +# https://stackoverflow.com/questions/287871/how-do-i-print-colored-text-to-the-terminal class ColorCodes: - PINK = '\033[95m' - BLUE_OK = '\033[94m' - CYAN_OK = '\033[96m' - GREEN_OK = '\033[92m' - WARNING_YELLOW = '\033[93m' - FAIL_RED = '\033[91m' - ENDC = '\033[0m' - BOLD = '\033[1m' - UNDERLINE = '\033[4m' + PINK = "\033[95m" + BLUE_OK = "\033[94m" + CYAN_OK = "\033[96m" + GREEN_OK = "\033[92m" + WARNING_YELLOW = "\033[93m" + FAIL_RED = "\033[91m" + ENDC = "\033[0m" + BOLD = "\033[1m" + UNDERLINE = "\033[4m" diff --git a/src/utility/moteus_data_in_json_helper.py b/src/utility/moteus_data_in_json_helper.py index e13bbdb..a5d8311 100644 --- a/src/utility/moteus_data_in_json_helper.py +++ b/src/utility/moteus_data_in_json_helper.py @@ -2,37 +2,36 @@ import math -class MoteusDataInJsonHelper(): - - def __init__(self): - self.position = None - self.velocity = None - self.feedforward_torque = None - self.kp_scale = None - self.kd_scale = None - self.max_torque = None - self.watchdog_timeout = None - self.velocity_limit = None - self.accel_limit = None - self.fixed_voltage_override = None - - self.setStop = True - - def getPosition(self): +class MoteusDataInJsonHelper: + + def __init__(self) -> None: + self.position: float | None = None + self.velocity: float | None = None + self.feedforward_torque: float | None = None + self.kp_scale: float | None = None + self.kd_scale: float | None = None + self.max_torque: float | None = None + self.watchdog_timeout: float | None = None + self.velocity_limit: float | None = None + self.accel_limit: float | None = None + self.fixed_voltage_override: float | None = None + + self.set_stop = True + + def getPosition(self) -> float: if self.position is None: return math.nan - + return self.position - - def getVelocity(self): + + def getVelocity(self) -> float: if self.velocity is None: return math.nan - + return self.velocity - - - def buildJSONString(self): - pythonDict = { + + def buildJSONString(self) -> str: + python_dict = { "position": self.position, "velocity": self.velocity, "feedforward_torque": self.feedforward_torque, @@ -43,25 +42,22 @@ def buildJSONString(self): "velocity_limit": self.velocity_limit, "accel_limit": self.accel_limit, "fixed_voltage_override": self.fixed_voltage_override, - "set_stop": self.setStop + "set_stop": self.set_stop, } - - return json.dumps(pythonDict) - - - def buildHelper(self, jsonString): - pythonDict = json.loads(jsonString) - - self.position = pythonDict["position"] - self.velocity = pythonDict["velocity"] - self.feedforward_torque = pythonDict["feedforward_torque"] - self.kp_scale = pythonDict["kp_scale"] - self.kd_scale = pythonDict["kd_scale"] - self.max_torque = pythonDict["max_torque"] - self.watchdog_timeout = pythonDict["watchdog_timeout"] - self.velocity_limit = pythonDict["velocity_limit"] - self.accel_limit = pythonDict["accel_limit"] - self.fixed_voltage_override = pythonDict["fixed_voltage_override"] - self.setStop = pythonDict["set_stop"] - - \ No newline at end of file + + return json.dumps(python_dict) + + def buildHelper(self, json_string: str) -> None: + python_dict = json.loads(json_string) + + self.position = python_dict["position"] + self.velocity = python_dict["velocity"] + self.feedforward_torque = python_dict["feedforward_torque"] + self.kp_scale = python_dict["kp_scale"] + self.kd_scale = python_dict["kd_scale"] + self.max_torque = python_dict["max_torque"] + self.watchdog_timeout = python_dict["watchdog_timeout"] + self.velocity_limit = python_dict["velocity_limit"] + self.accel_limit = python_dict["accel_limit"] + self.fixed_voltage_override = python_dict["fixed_voltage_override"] + self.set_stop = python_dict["set_stop"] diff --git a/src/utility/moteus_data_out_json_helper.py b/src/utility/moteus_data_out_json_helper.py index 8e3d515..5859b29 100644 --- a/src/utility/moteus_data_out_json_helper.py +++ b/src/utility/moteus_data_out_json_helper.py @@ -1,57 +1,49 @@ import json -class MoteusDataOutJsonHelper(): - - def __init__(self): +class MoteusDataOutJsonHelper: + + def __init__(self) -> None: # take a look at moteus.Register - self.canID = -1 - self.position = None - self.velocity = None - self.torque = None - self.temperature = None - self.power = None - self.inputVoltage = None - self.qCurrent = None - self.dCurrent = None - - - - - - def buildJSONString(self): - pythonDict = self.buildPythonDict() - - return json.dumps(pythonDict) - - def buildPythonDict(self): - pythonDict = { - "canID": self.canID, + self.can_id = -1 + self.position: float | None = None + self.velocity: float | None = None + self.torque: float | None = None + self.temperature: float | None = None + self.power: float | None = None + self.input_voltage: float | None = None + self.q_current: float | None = None + self.d_current: float | None = None + + def buildJSONString(self) -> str: + python_dict = self.buildPythonDict() + + return json.dumps(python_dict) + + def buildPythonDict(self) -> dict[str, float | None]: + python_dict = { + "can_id": self.can_id, "position": self.position, "velocity": self.velocity, "torque": self.torque, "temperature": self.temperature, "power": self.power, - "inputVoltage": self.inputVoltage, - "qCurrent": self.qCurrent, - "dCurrent": self.dCurrent + "input_voltage": self.input_voltage, + "q_current": self.q_current, + "d_current": self.d_current, } - - return pythonDict - - def buildHelper(self, jsonString): - pythonDict = json.loads(jsonString) - - self.canID = pythonDict["canID"] - self.position = pythonDict["position"] - self.velocity = pythonDict["velocity"] - self.torque = pythonDict["torque"] - self.temperature = pythonDict["temperature"] - self.power = pythonDict["power"] - self.inputVoltage = pythonDict["inputVoltage"] - self.qCurrent = pythonDict["qCurrent"] - self.dCurrent = pythonDict["dCurrent"] - - - - \ No newline at end of file + + return python_dict + + def buildHelper(self, json_string: str) -> None: + python_dict = json.loads(json_string) + + self.can_id = python_dict["can_id"] + self.position = python_dict["position"] + self.velocity = python_dict["velocity"] + self.torque = python_dict["torque"] + self.temperature = python_dict["temperature"] + self.power = python_dict["power"] + self.input_voltage = python_dict["input_voltage"] + self.q_current = python_dict["q_current"] + self.d_current = python_dict["d_current"] diff --git a/src/viator_launch/launch/robot.launch.py b/src/viator_launch/launch/robot.launch.py index 37d651a..49001b4 100644 --- a/src/viator_launch/launch/robot.launch.py +++ b/src/viator_launch/launch/robot.launch.py @@ -1,35 +1,25 @@ import launch from launch_ros.actions import Node - -can_moteus_node = Node( - package='can_moteus', - executable='can_moteus', - name='can_moteus_node' -) +can_moteus_node = Node(package="can_moteus", executable="can_moteus", name="can_moteus_node") -drivebase_node = Node( - package='drivebase', - executable='drivebase', - name='drivebase_node' -) +drivebase_node = Node(package="drivebase", executable="drivebase", name="drivebase_node") mission_control_updater_node = Node( package="mission_control_updater", executable="mission_control_updater", name="mission_control_updater_node", + package="mission_control_updater", + executable="mission_control_updater", + name="mission_control_updater_node", ) -arm_node = Node( - package='arm', - executable='arm', - name='arm_node' -) +arm_node = Node(package="arm", executable="arm", name="arm_node") -def generate_launch_description() -> launch.LaunchDescription: # pylint: disable=invalid-name +def generate_launch_description() -> launch.LaunchDescription: # pylint: disable=invalid-name return launch.LaunchDescription( - [can_moteus_node, drivebase_node, mission_control_updater_node, arm_node, camera_node] + [can_moteus_node, drivebase_node, mission_control_updater_node, arm_node] ) From 4798ee90f3fc2889f717492e191e534f1f8ffd6a Mon Sep 17 00:00:00 2001 From: Kyler Li Date: Wed, 11 Sep 2024 08:11:17 +0000 Subject: [PATCH 33/50] THE GREAT REFORMATTENING (pt 2) --- .devcontainer/devcontainer.json | 1 - .vscode/settings.json | 1 + src/arm/arm/arm.py | 12 +++------ src/arm/arm/individual_control_vel.py | 4 +-- src/arm/test/test_copyright.py | 1 + src/can_moteus/can_moteus/moteus_motor.py | 2 +- .../can_moteus/moteus_thread_manager.py | 24 ++++++++++-------- .../can_moteus/ros_moteus_bridge.py | 12 +++------ src/can_moteus/test/test_copyright.py | 4 +-- src/custom_interfaces/robot_info.py | 4 +-- src/custom_interfaces/robot_interface.py | 8 ++---- src/mission_control_updater/setup.py | 4 +-- .../test/test_copyright.py | 25 +++++++++++++++++++ src/viator_launch/launch/robot.launch.py | 2 +- 14 files changed, 55 insertions(+), 49 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index cd1e6a1..852b7df 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -17,7 +17,6 @@ "ms-python.pylint", "ms-python.mypy-type-checker", "ms-python.isort", - "ms-python.black-formatter", "ms-vscode.cmake-tools", "ms-vscode.cpptools", "twxs.cmake", diff --git a/.vscode/settings.json b/.vscode/settings.json index e9d3d23..b077611 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -21,6 +21,7 @@ "editor.defaultFormatter": "ms-python.black-formatter", "editor.formatOnSave": true }, + "black-formatter.args": ["-l", "100"], "cmake.configureOnOpen": false, "cmake.sourceDirectory": "${workspaceFolder}/src/hello_world", "files.associations": { diff --git a/src/arm/arm/arm.py b/src/arm/arm/arm.py index 446b058..dac205e 100644 --- a/src/arm/arm/arm.py +++ b/src/arm/arm/arm.py @@ -36,9 +36,7 @@ class Arm(Node): def __init__(self) -> None: def __init__(self) -> None: super().__init__("arm_node") - self.get_logger().info( - ColorCodes.BLUE_OK + "Launching arm_node" + ColorCodes.ENDC - ) + self.get_logger().info(ColorCodes.BLUE_OK + "Launching arm_node" + ColorCodes.ENDC) self.change_arm_mode_sub = self.create_subscription( Int32, "update_arm_mode", self.updateArmMode, 10 @@ -46,9 +44,7 @@ def __init__(self) -> None: self.current_mode = ArmModeEnum.DISABLED - self.mode_service = self.create_service( - ArmMode, "get_arm_mode", self.modeServiceHandler - ) + self.mode_service = self.create_service(ArmMode, "get_arm_mode", self.modeServiceHandler) self.bot_interface = RobotInterface(self) @@ -97,9 +93,7 @@ def main(args: list[str] | None = None) -> None: pass except ExternalShutdownException: # This is done when we ctrl-c the progam to shut it down - node.get_logger().info( - ColorCodes.BLUE_OK + "Shutting down arm_node node" + ColorCodes.ENDC - ) + node.get_logger().info(ColorCodes.BLUE_OK + "Shutting down arm_node node" + ColorCodes.ENDC) node.destroy_node() sys.exit(0) diff --git a/src/arm/arm/individual_control_vel.py b/src/arm/arm/individual_control_vel.py index 4ee3e1c..e03bd8f 100644 --- a/src/arm/arm/individual_control_vel.py +++ b/src/arm/arm/individual_control_vel.py @@ -38,9 +38,7 @@ def __init__(self, ros_node: Node, interface: RobotInterface): ) # Elbow motor - self.elbow_up_sub = ros_node.create_subscription( - Float32, "elbow_up", self.elbowUp, 10 - ) + self.elbow_up_sub = ros_node.create_subscription(Float32, "elbow_up", self.elbowUp, 10) self.elbow_down_sub = ros_node.create_subscription( Float32, "elbow_down", self.elbowDown, 10 diff --git a/src/arm/test/test_copyright.py b/src/arm/test/test_copyright.py index e69de29..8b13789 100644 --- a/src/arm/test/test_copyright.py +++ b/src/arm/test/test_copyright.py @@ -0,0 +1 @@ + diff --git a/src/can_moteus/can_moteus/moteus_motor.py b/src/can_moteus/can_moteus/moteus_motor.py index 8f2389c..ad10369 100644 --- a/src/can_moteus/can_moteus/moteus_motor.py +++ b/src/can_moteus/can_moteus/moteus_motor.py @@ -154,7 +154,7 @@ def publishData(self, moteus_data: Any) -> None: msg.data = json_string self._publisher.publish(msg) - except Exception as error: # pylint: disable=broad-exception-caught + except Exception as error: # pylint: disable=broad-exception-caught # This is used to handle any errors in order to prevent the thread from dying # Specifically, when we crtl-c we want the motors to be set_stop(), but if this thread # crashes we cannot do that. So we catch any errors diff --git a/src/can_moteus/can_moteus/moteus_thread_manager.py b/src/can_moteus/can_moteus/moteus_thread_manager.py index 5c2abc2..01bcae1 100644 --- a/src/can_moteus/can_moteus/moteus_thread_manager.py +++ b/src/can_moteus/can_moteus/moteus_thread_manager.py @@ -92,8 +92,9 @@ def threadEntry(self) -> None: async def tryToShutdownMotor(self, motor_name: str) -> None: self._ros_node.get_logger().info( ColorCodes.WARNING_YELLOW - + f"Unexpectedly trying to turn off motor \"{motor_name}\" (CANID " - + str(self._name_to_moteus_motor[motor_name].canID) + ")" + + f'Unexpectedly trying to turn off motor "{motor_name}" (CANID ' + + str(self._name_to_moteus_motor[motor_name].canID) + + ")" + ColorCodes.ENDC ) @@ -104,15 +105,17 @@ async def tryToShutdownMotor(self, motor_name: str) -> None: ) self._ros_node.get_logger().info( ColorCodes.GREEN_OK - + f"Stopped motor \"{motor_name}\" (CANID " - + str(self._name_to_moteus_motor[motor_name].can_id) + ")" + + f'Stopped motor "{motor_name}" (CANID ' + + str(self._name_to_moteus_motor[motor_name].can_id) + + ")" + ColorCodes.ENDC ) except asyncio.TimeoutError: self._ros_node.get_logger().info( ColorCodes.FAIL_RED - + F"FAILED TO \"set_stop\" MOTOR. TIMED OUT \"{motor_name}\" (CANID " - + str(self._name_to_moteus_motor[motor_name].can_id) + ")" + + f'FAILED TO "set_stop" MOTOR. TIMED OUT "{motor_name}" (CANID ' + + str(self._name_to_moteus_motor[motor_name].can_id) + + ")" + ColorCodes.ENDC ) del self._name_to_moteus_controller[motor_name] @@ -176,7 +179,7 @@ async def startLoop(self) -> None: self._ros_node.get_logger().info( ColorCodes.FAIL_RED + f"FAULT CODE: {result_from_moteus.values[moteus.Register.FAULT]} FOR " - + F"\"{name}\" (CANID {motor.can_id})" + + f'"{name}" (CANID {motor.can_id})' + ColorCodes.ENDC ) await self.tryToShutdownMotor(name) @@ -208,7 +211,7 @@ async def startLoop(self) -> None: except asyncio.TimeoutError: self._ros_node.get_logger().info( ColorCodes.FAIL_RED - + f"FAILED TO SEND/READ DATA TO MOTEUS MOTOR: \"{name}\" {motor.can_id}) " + + f'FAILED TO SEND/READ DATA TO MOTEUS MOTOR: "{name}" {motor.can_id}) ' + "CAN-FD bus disconnected?" + ColorCodes.ENDC ) @@ -254,14 +257,15 @@ async def connectToMoteusControllers(self) -> None: await controller.set_stop() self._ros_node.get_logger().info( ColorCodes.GREEN_OK - + f"Moteus motor controller connected: \"{motor.name}\" (CANID {motor.can_id})" + + f'Moteus motor controller connected: "{motor.name}" (CANID {motor.can_id})' + ColorCodes.ENDC ) except asyncio.TimeoutError: self._ros_node.get_logger().info( ColorCodes.FAIL_RED - + "FAILED TO CONNECT TO MOTEUS CONTROLLER WITH CANID " + str(motor.can_id) + + "FAILED TO CONNECT TO MOTEUS CONTROLLER WITH CANID " + + str(motor.can_id) + ColorCodes.ENDC ) except RuntimeError as error: diff --git a/src/can_moteus/can_moteus/ros_moteus_bridge.py b/src/can_moteus/can_moteus/ros_moteus_bridge.py index ff88b89..28df1ff 100644 --- a/src/can_moteus/can_moteus/ros_moteus_bridge.py +++ b/src/can_moteus/can_moteus/ros_moteus_bridge.py @@ -35,9 +35,7 @@ def __init__(self) -> None: def __init__(self) -> None: super().__init__("can_moteus_node") - self.get_logger().info( - ColorCodes.BLUE_OK + "Launching can_moteus node" + ColorCodes.ENDC - ) + self.get_logger().info(ColorCodes.BLUE_OK + "Launching can_moteus node" + ColorCodes.ENDC) # Reset the CANFD-USB # run "lsusb" in cmd with the CANFD-USB connected @@ -114,12 +112,8 @@ def createMoteusMotors(self) -> None: self.thread_manager.addMotor( CanBusMappings.CANID_ARM_TURNTABLE_MOTOR, "arm_turntable_motor" ) - self.thread_manager.addMotor( - CanBusMappings.CANID_ARM_SHOULDER_MOTOR, "arm_shoulder_motor" - ) - self.thread_manager.addMotor( - CanBusMappings.CANID_ARM_ELBOW_MOTOR, "arm_elbow_motor" - ) + self.thread_manager.addMotor(CanBusMappings.CANID_ARM_SHOULDER_MOTOR, "arm_shoulder_motor") + self.thread_manager.addMotor(CanBusMappings.CANID_ARM_ELBOW_MOTOR, "arm_elbow_motor") self.thread_manager.addMotor( CanBusMappings.CANID_ARM_LEFT_WRIST_MOTOR, "arm_left_wrist_motor" ) diff --git a/src/can_moteus/test/test_copyright.py b/src/can_moteus/test/test_copyright.py index 0b3e7df..99f554f 100644 --- a/src/can_moteus/test/test_copyright.py +++ b/src/can_moteus/test/test_copyright.py @@ -18,9 +18,7 @@ # Remove the `skip` decorator once the source file(s) have a copyright header -@pytest.mark.skip( - reason="No copyright header has been placed in the generated source file." -) +@pytest.mark.skip(reason="No copyright header has been placed in the generated source file.") @pytest.mark.copyright @pytest.mark.linter def test_copyright(): diff --git a/src/custom_interfaces/robot_info.py b/src/custom_interfaces/robot_info.py index c1639b4..59e49ee 100644 --- a/src/custom_interfaces/robot_info.py +++ b/src/custom_interfaces/robot_info.py @@ -42,9 +42,7 @@ def __init__(self, ros_node: Node): def createSubscribers(self) -> None: for topic_name in moteusTopicList: - sub = self._ros_node.create_subscription( - String, topic_name, self.subCallback, 1 - ) + sub = self._ros_node.create_subscription(String, topic_name, self.subCallback, 1) self.sub_list.append(sub) def subCallback(self, msg: String) -> None: diff --git a/src/custom_interfaces/robot_interface.py b/src/custom_interfaces/robot_interface.py index 8df2633..893a978 100644 --- a/src/custom_interfaces/robot_interface.py +++ b/src/custom_interfaces/robot_interface.py @@ -65,13 +65,9 @@ def __init__(self, ros_node: Node) -> None: String, "arm_turntable_motor_from_interface", 10 ) robot_publishers["arm_turntable_motor"] = publisher - publisher = self._ros_node.create_publisher( - String, "arm_shoulder_motor_from_interface", 10 - ) + publisher = self._ros_node.create_publisher(String, "arm_shoulder_motor_from_interface", 10) robot_publishers["arm_shoulder_motor"] = publisher - publisher = self._ros_node.create_publisher( - String, "arm_elbow_motor_from_interface", 10 - ) + publisher = self._ros_node.create_publisher(String, "arm_elbow_motor_from_interface", 10) robot_publishers["arm_elbow_motor"] = publisher publisher = self._ros_node.create_publisher( String, "arm_left_wrist_motor_from_interface", 10 diff --git a/src/mission_control_updater/setup.py b/src/mission_control_updater/setup.py index 27a403d..a6c061a 100644 --- a/src/mission_control_updater/setup.py +++ b/src/mission_control_updater/setup.py @@ -29,8 +29,6 @@ license="TODO: License declaration", tests_require=["pytest"], entry_points={ - "console_scripts": [ - "mission_control_updater = mission_control_updater.updater:main" - ], + "console_scripts": ["mission_control_updater = mission_control_updater.updater:main"], }, ) diff --git a/src/mission_control_updater/test/test_copyright.py b/src/mission_control_updater/test/test_copyright.py index e69de29..95f0381 100644 --- a/src/mission_control_updater/test/test_copyright.py +++ b/src/mission_control_updater/test/test_copyright.py @@ -0,0 +1,25 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_copyright.main import main +import pytest + + +# Remove the `skip` decorator once the source file(s) have a copyright header +@pytest.mark.skip(reason="No copyright header has been placed in the generated source file.") +@pytest.mark.copyright +@pytest.mark.linter +def test_copyright(): + rc = main(argv=[".", "test"]) + assert rc == 0, "Found errors" diff --git a/src/viator_launch/launch/robot.launch.py b/src/viator_launch/launch/robot.launch.py index 49001b4..76070c9 100644 --- a/src/viator_launch/launch/robot.launch.py +++ b/src/viator_launch/launch/robot.launch.py @@ -19,7 +19,7 @@ arm_node = Node(package="arm", executable="arm", name="arm_node") -def generate_launch_description() -> launch.LaunchDescription: # pylint: disable=invalid-name +def generate_launch_description() -> launch.LaunchDescription: # pylint: disable=invalid-name return launch.LaunchDescription( [can_moteus_node, drivebase_node, mission_control_updater_node, arm_node] ) From 09ce8827391f88b6e76c28c7d4ec44b8289ba47c Mon Sep 17 00:00:00 2001 From: Kyler Li <46853114+loukylor@users.noreply.github.com> Date: Mon, 16 Sep 2024 15:09:31 -0700 Subject: [PATCH 34/50] [lib] Refactor non-node modules to be easier to work with (#59) * [lib] add lib folder and refactor constants into configs, removing motor names only relying on can id * [lib] refactor robot interface and info to take motor configs and new msg types * [lib] make coloring slightly less annoying * [lib] differentiate between disable and stop motor * [lib] set position to `nan` when stopping motor * add typing to moteus command results * [lib] debug in person to make it work * [lib] make robot info take motor configs over can ids * [lib] fix formatting * fix units on robot interface and document some motor state attributes * [lib] Changed drivebase speed to match radian/s inputs rather than rev/s --------- Co-authored-by: TrickFire Robotics --- .devcontainer/devcontainer.json | 5 +- launch.sh | 1 - src/arm/arm/arm.py | 19 +- src/arm/arm/individual_control_vel.py | 45 ++-- src/can_moteus/can_moteus/moteus_motor.py | 107 +++------ .../can_moteus/moteus_thread_manager.py | 149 ++++++------ .../can_moteus/ros_moteus_bridge.py | 56 ++--- src/custom_interfaces/robot_info.py | 54 ----- src/custom_interfaces/robot_interface.py | 218 ------------------ src/drivebase/drivebase/drivebase.py | 26 +-- src/lib/configs.py | 141 +---------- .../info_to_json_helper.py | 8 +- .../mission_control_updater/updater.py | 15 +- src/utility/canbus_mappings.py | 19 -- src/utility/color_text.py | 12 - src/utility/moteus_data_in_json_helper.py | 63 ----- src/utility/moteus_data_out_json_helper.py | 49 ---- 17 files changed, 188 insertions(+), 799 deletions(-) delete mode 100644 src/custom_interfaces/robot_info.py delete mode 100644 src/custom_interfaces/robot_interface.py delete mode 100644 src/utility/canbus_mappings.py delete mode 100644 src/utility/color_text.py delete mode 100644 src/utility/moteus_data_in_json_helper.py delete mode 100644 src/utility/moteus_data_out_json_helper.py diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 852b7df..f576f75 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -15,8 +15,9 @@ "ms-python.python", "ms-python.vscode-pylance", "ms-python.pylint", - "ms-python.mypy-type-checker", - "ms-python.isort", + "ms-python.mypy-type-checker", + "ms-python.isort", + "ms-python.black-formatter", "ms-vscode.cmake-tools", "ms-vscode.cpptools", "twxs.cmake", diff --git a/launch.sh b/launch.sh index 76e883f..aa11a7a 100755 --- a/launch.sh +++ b/launch.sh @@ -10,7 +10,6 @@ source /home/trickfire/urc-2023/install/setup.bash #ip link set can0 up # Add to the python import pathes. Not the best, but will work for now -# TODO: Switch this folder to the libs folder once that's done export PYTHONPATH="/home/trickfire/urc-2023/src/:$PYTHONPATH" ros2 launch viator_launch robot.launch.py & ros2 launch rosbridge_server rosbridge_websocket_launch.xml \ No newline at end of file diff --git a/src/arm/arm/arm.py b/src/arm/arm/arm.py index dac205e..44d5d93 100644 --- a/src/arm/arm/arm.py +++ b/src/arm/arm/arm.py @@ -14,8 +14,9 @@ from std_msgs.msg import Int32 from custom_interfaces.srv import ArmMode -from interface.robot_interface import RobotInterface -from utility.color_text import ColorCodes +from lib.color_codes import ColorCodes, colorStr +from lib.configs import MotorConfigs +from lib.interface.robot_interface import RobotInterface from .individual_control_vel import IndividualControlVel @@ -36,7 +37,7 @@ class Arm(Node): def __init__(self) -> None: def __init__(self) -> None: super().__init__("arm_node") - self.get_logger().info(ColorCodes.BLUE_OK + "Launching arm_node" + ColorCodes.ENDC) + self.get_logger().info(colorStr("Launching arm_node", ColorCodes.BLUE_OK)) self.change_arm_mode_sub = self.create_subscription( Int32, "update_arm_mode", self.updateArmMode, 10 @@ -61,11 +62,11 @@ def updateArmMode(self, msg: Int32) -> None: if self.current_mode == 0: - self.bot_interface.disableArmTurntableMotor() - self.bot_interface.disableArmShoulderMotor() - self.bot_interface.disableArmElbowMotor() - self.bot_interface.disableArmLeftWristMotor() - self.bot_interface.disableArmRightWristMotor() + self.bot_interface.disableMotor(MotorConfigs.ARM_TURNTABLE_MOTOR) + self.bot_interface.disableMotor(MotorConfigs.ARM_SHOULDER_MOTOR) + self.bot_interface.disableMotor(MotorConfigs.ARM_ELBOW_MOTOR) + self.bot_interface.disableMotor(MotorConfigs.ARM_LEFT_WRIST_MOTOR) + self.bot_interface.disableMotor(MotorConfigs.ARM_RIGHT_WRIST_MOTOR) self.individual_control_vel.can_send = False elif self.current_mode == 1: @@ -93,7 +94,7 @@ def main(args: list[str] | None = None) -> None: pass except ExternalShutdownException: # This is done when we ctrl-c the progam to shut it down - node.get_logger().info(ColorCodes.BLUE_OK + "Shutting down arm_node node" + ColorCodes.ENDC) + node.get_logger().info(colorStr("Shutting down arm_node node", ColorCodes.BLUE_OK)) node.destroy_node() sys.exit(0) diff --git a/src/arm/arm/individual_control_vel.py b/src/arm/arm/individual_control_vel.py index e03bd8f..e143c32 100644 --- a/src/arm/arm/individual_control_vel.py +++ b/src/arm/arm/individual_control_vel.py @@ -1,7 +1,8 @@ -from rclpy import Node +from rclpy.node import Node from std_msgs.msg import Float32 -from interface.robot_interface import RobotInterface +from lib.configs import MotorConfigs +from lib.interface.robot_interface import RobotInterface class IndividualControlVel: @@ -78,11 +79,11 @@ def leftWristCW(self, msg: Float32) -> None: if joystick > 0: self._ros_node.get_logger().info("Left Wrist CW" + str(joystick)) - self.bot_interface.leftWriteVelocity(self.WRIST_VEL) + self.bot_interface.runMotorSpeed(MotorConfigs.ARM_LEFT_WRIST_MOTOR, self.WRIST_VEL) else: self._ros_node.get_logger().info("Left Wrist STOP") - self.bot_interface.leftWriteVelocity(0.0) + self.bot_interface.stopMotor(MotorConfigs.ARM_LEFT_WRIST_MOTOR) def leftWristCCW(self, msg: Float32) -> None: if not self.can_send: @@ -92,11 +93,11 @@ def leftWristCCW(self, msg: Float32) -> None: if joystick > 0: self._ros_node.get_logger().info("Left Wrist CCW" + str(joystick)) - self.bot_interface.leftWriteVelocity(-self.WRIST_VEL) + self.bot_interface.runMotorSpeed(MotorConfigs.ARM_LEFT_WRIST_MOTOR, -self.WRIST_VEL) else: self._ros_node.get_logger().info("Left Wrist STOP") - self.bot_interface.leftWriteVelocity(0.0) + self.bot_interface.stopMotor(MotorConfigs.ARM_LEFT_WRIST_MOTOR) def rightWristCW(self, msg: Float32) -> None: if not self.can_send: @@ -106,11 +107,11 @@ def rightWristCW(self, msg: Float32) -> None: if joystick > 0: self._ros_node.get_logger().info("Right Wrist CW" + str(joystick)) - self.bot_interface.rightWristVelocity(-self.WRIST_VEL) + self.bot_interface.runMotorSpeed(MotorConfigs.ARM_RIGHT_WRIST_MOTOR, -self.WRIST_VEL) else: self._ros_node.get_logger().info("Right Wrist STOP") - self.bot_interface.rightWristVelocity(0.0) + self.bot_interface.stopMotor(MotorConfigs.ARM_RIGHT_WRIST_MOTOR) def rightWristCCW(self, msg: Float32) -> None: if not self.can_send: @@ -120,11 +121,11 @@ def rightWristCCW(self, msg: Float32) -> None: if joystick > 0: self._ros_node.get_logger().info("Right Wrist CCW" + str(joystick)) - self.bot_interface.rightWristVelocity(-self.WRIST_VEL) + self.bot_interface.runMotorSpeed(MotorConfigs.ARM_RIGHT_WRIST_MOTOR, -self.WRIST_VEL) else: self._ros_node.get_logger().info("Right Wrist STOP") - self.bot_interface.rightWristVelocity(0.0) + self.bot_interface.stopMotor(MotorConfigs.ARM_RIGHT_WRIST_MOTOR) def elbowUp(self, msg: Float32) -> None: if not self.can_send: @@ -134,11 +135,11 @@ def elbowUp(self, msg: Float32) -> None: if data > 0: self._ros_node.get_logger().info("Elbow up" + str(data)) - self.bot_interface.elbowVelocity(-self.VEL) + self.bot_interface.runMotorSpeed(MotorConfigs.ARM_ELBOW_MOTOR, -self.VEL) else: self._ros_node.get_logger().info("Elbow down STOP") - self.bot_interface.elbowVelocity(0.0) + self.bot_interface.stopMotor(MotorConfigs.ARM_ELBOW_MOTOR) def elbowDown(self, msg: Float32) -> None: if not self.can_send: @@ -148,11 +149,11 @@ def elbowDown(self, msg: Float32) -> None: if data > 0: self._ros_node.get_logger().info("Elbow down" + str(data)) - self.bot_interface.elbowVelocity(self.VEL) + self.bot_interface.runMotorSpeed(MotorConfigs.ARM_ELBOW_MOTOR, self.VEL) else: self._ros_node.get_logger().info("Elbow down STOP") - self.bot_interface.elbowVelocity(0.0) + self.bot_interface.stopMotor(MotorConfigs.ARM_ELBOW_MOTOR) def shoulderUp(self, msg: Float32) -> None: if not self.can_send: @@ -162,11 +163,11 @@ def shoulderUp(self, msg: Float32) -> None: if data > 0: self._ros_node.get_logger().info("Shoulder up" + str(data)) - self.bot_interface.shoulderVelocity(-self.VEL) + self.bot_interface.runMotorSpeed(MotorConfigs.ARM_SHOULDER_MOTOR, -self.VEL) else: self._ros_node.get_logger().info("Shoulder STOP") - self.bot_interface.shoulderVelocity(0.0) + self.bot_interface.stopMotor(MotorConfigs.ARM_SHOULDER_MOTOR) def shoulderDown(self, msg: Float32) -> None: if not self.can_send: @@ -176,11 +177,11 @@ def shoulderDown(self, msg: Float32) -> None: if data > 0: self._ros_node.get_logger().info("Shoulder down" + str(data)) - self.bot_interface.shoulderVelocity(self.VEL) + self.bot_interface.runMotorSpeed(MotorConfigs.ARM_SHOULDER_MOTOR, self.VEL) else: self._ros_node.get_logger().info("Shoulder STOP") - self.bot_interface.shoulderVelocity(0.0) + self.bot_interface.stopMotor(MotorConfigs.ARM_SHOULDER_MOTOR) def turntableCW(self, msg: Float32) -> None: if not self.can_send: @@ -190,11 +191,11 @@ def turntableCW(self, msg: Float32) -> None: if data > 0: self._ros_node.get_logger().info("Turntable clock wise") - self.bot_interface.armTurntableVelocity(self.VEL) + self.bot_interface.runMotorSpeed(MotorConfigs.ARM_TURNTABLE_MOTOR, self.VEL) else: self._ros_node.get_logger().info("Turntable STOP") - self.bot_interface.armTurntableVelocity(0.0) + self.bot_interface.stopMotor(MotorConfigs.ARM_TURNTABLE_MOTOR) def turntableCCW(self, msg: Float32) -> None: if not self.can_send: @@ -208,8 +209,8 @@ def turntableCCW(self, msg: Float32) -> None: if data > 0: self._ros_node.get_logger().info("Turntable counter clock wise") - self.bot_interface.armTurntableVelocity(-self.VEL) + self.bot_interface.runMotorSpeed(MotorConfigs.ARM_TURNTABLE_MOTOR, -self.VEL) else: self._ros_node.get_logger().info("Turntable STOP") - self.bot_interface.armTurntableVelocity(0.0) + self.bot_interface.stopMotor(MotorConfigs.ARM_TURNTABLE_MOTOR) diff --git a/src/can_moteus/can_moteus/moteus_motor.py b/src/can_moteus/can_moteus/moteus_motor.py index ad10369..50d79ae 100644 --- a/src/can_moteus/can_moteus/moteus_motor.py +++ b/src/can_moteus/can_moteus/moteus_motor.py @@ -1,18 +1,19 @@ from threading import Lock -from typing import Any -import moteus import std_msgs.msg -from rclpy import Node +from moteus.moteus import Result +from rclpy.node import Node from rclpy.publisher import Publisher from rclpy.subscription import Subscription from std_msgs.msg import String +from lib.configs import MoteusMotorConfig +from lib.moteus_motor_state import MoteusMotorState, MoteusRunSettings class MoteusMotor: - def __init__(self, can_id: int, name: str, ros_node: Node) -> None: + def __init__(self, config: MoteusMotorConfig, ros_node: Node) -> None: """ Create a logical representation of a motor that is using a Moteus controller. Contains a list of variables that should be @@ -20,16 +21,13 @@ def __init__(self, can_id: int, name: str, ros_node: Node) -> None: Paramaters ------- - canID : int - The canID of the Moteus Controller - name : string - The name of the motor. This is used in the topic names + config : MoteusMotorConfig + The config of the motor. rosNode : Node The ROS node used to create the ros_moteus_bridge.py """ - self.can_id = can_id - self.name = name + self.config = config self._ros_node = ros_node self._subscriber = self._createSubscriber() @@ -42,16 +40,7 @@ def __init__(self, can_id: int, name: str, ros_node: Node) -> None: # The settings we can send to the moteus controller # using the make_position() method - self.position: float | None = None - self.velocity: float | None = None - self.feedforward_torque: float | None = None - self.kp_scale: float | None = None - self.kd_scale: float | None = None - self.max_torque: float | None = None - self.watchdog_timeout: float | None = None - self.velocity_limit: float | None = None - self.accel_limit: float | None = None - self.fixed_voltage_override: float | None = None + self.run_settings: MoteusRunSettings = MoteusRunSettings() # By default, the motor is shutoff self.set_stop = True @@ -60,9 +49,9 @@ def _createSubscriber(self) -> Subscription: def _createSubscriber(self) -> Subscription: """ The subscriber to get data from. - The format of the topic is the following: _from_interface + The format of the topic is the following: moteusmotor__from_interface """ - topic_name = self.name + "_from_interface" + topic_name = self.config.getInterfaceTopicName() subscriber = self._ros_node.create_subscription( std_msgs.msg.String, topic_name, @@ -77,9 +66,9 @@ def _createPublisher(self) -> Publisher: def _createPublisher(self) -> Publisher: """ The publisher to send data to. - The format of the topic is the following: _from_can + The format of the topic is the following: moteusmotor__from_can """ - topic_name = self.name + "_from_can" + topic_name = self.config.getCanTopicName() # Size of queue is 1. All additional ones are dropped publisher = self._ros_node.create_publisher(std_msgs.msg.String, topic_name, 1) @@ -95,51 +84,17 @@ def dataInCallback(self, msg: String) -> None: meaning that no one can go into any other "critical section" of code that also has a mutex protecting it. """ - self.mutex_lock.acquire() - try: - json_string = msg.data - self.updateMotorState(json_string) - finally: - self.mutex_lock.release() - - def updateMotorState(self, raw_json_string: str) -> None: - """ - Update the motor's variables from - the input JSON string - """ + with self.mutex_lock: + self.run_settings = MoteusRunSettings.fromJsonMsg(msg) - json_helper = MoteusDataInJsonHelper() - json_helper.buildHelper(raw_json_string) - - self.position = json_helper.getPosition() - self.velocity = json_helper.getVelocity() - self.feedforward_torque = json_helper.feedforward_torque - self.kp_scale = json_helper.kp_scale - self.kd_scale = json_helper.kd_scale - self.max_torque = json_helper.max_torque - self.watchdog_timeout = json_helper.watchdog_timeout - self.accel_limit = json_helper.accel_limit - self.fixed_voltage_override = json_helper.fixed_voltage_override - self.set_stop = json_helper.set_stop - - def publishData(self, moteus_data: Any) -> None: + def publishData(self, moteus_data: Result) -> None: """ Publishes the data from the moteus controller - Publishes the data from the moteus controller """ - self.mutex_lock.acquire() - try: - if self._ros_node.context.ok: - json_helper = MoteusDataOutJsonHelper() - json_helper.can_id = self.can_id - json_helper.position = moteus_data.values[moteus.Register.POSITION] - json_helper.velocity = moteus_data.values[moteus.Register.VELOCITY] - json_helper.torque = moteus_data.values[moteus.Register.TORQUE] - json_helper.temperature = moteus_data.values[moteus.Register.TEMPERATURE] - json_helper.power = moteus_data.values[moteus.Register.POWER] - json_helper.input_voltage = moteus_data.values[moteus.Register.VOLTAGE] - json_helper.q_current = moteus_data.values[moteus.Register.Q_CURRENT] - json_helper.d_current = moteus_data.values[moteus.Register.D_CURRENT] + with self.mutex_lock: + try: + if not self._ros_node.context.ok(): + return # self._rosNode.get_logger().info(str(moteusData.values)) @@ -148,17 +103,11 @@ def publishData(self, moteus_data: Any) -> None: # https://discord.com/channels/633996205759791104/722434939676786688/1252380387783610428 # self._rosNode.get_logger().info(str(moteusData.values.keys())) - json_string = json_helper.buildJSONString() - - msg = String() - msg.data = json_string - - self._publisher.publish(msg) - except Exception as error: # pylint: disable=broad-exception-caught - # This is used to handle any errors in order to prevent the thread from dying - # Specifically, when we crtl-c we want the motors to be set_stop(), but if this thread - # crashes we cannot do that. So we catch any errors - self._ros_node.get_logger().info("Failed to publish motor data") - self._ros_node.get_logger().info(str(error)) - finally: - self.mutex_lock.release() + state = MoteusMotorState.fromMoteusData(self.config.can_id, moteus_data) + self._publisher.publish(state.toMsg()) + except Exception as error: # pylint: disable=broad-exception-caught + # This is used to handle any errors in order to prevent the thread from dying + # Specifically, when we crtl-c we want the motors to be set_stop(), but if this + # thread crashes we cannot do that. So we catch any errors + self._ros_node.get_logger().info("Failed to publish motor data") + self._ros_node.get_logger().info(str(error)) diff --git a/src/can_moteus/can_moteus/moteus_thread_manager.py b/src/can_moteus/can_moteus/moteus_thread_manager.py index 01bcae1..dda6d5d 100644 --- a/src/can_moteus/can_moteus/moteus_thread_manager.py +++ b/src/can_moteus/can_moteus/moteus_thread_manager.py @@ -3,11 +3,13 @@ import threading import moteus +from moteus.moteus import Result from rclpy.node import Node -from utility.color_text import ColorCodes +from lib.color_codes import ColorCodes, colorStr +from lib.configs import MoteusMotorConfig -from . import moteus_motor +from .moteus_motor import MoteusMotor class MoteusThreadManager: @@ -22,20 +24,24 @@ class MoteusThreadManager: """ def __init__(self, ros_node: Node): - self._name_to_moteus_motor: dict[str, moteus_motor.MoteusMotor] = {} - self._name_to_moteus_controller: dict[str, moteus.Controller] = {} # Used by the thread + self._id_to_moteus_motor: dict[int, MoteusMotor] = {} + self._id_to_moteus_controller: dict[int, moteus.Controller] = {} # Used by the thread self._ros_node = ros_node self._moteus_thread: threading.Thread | None = None self._should_moteus_thread_loop = True # No thread safety, but it works lololol self._should_reconnect = True # No thread safety, but it works lololol - def addMotor(self, can_id: int, motor_name: str) -> None: + def addMotor(self, config: MoteusMotorConfig) -> None: """ - Adds a motor to the list to attempt to connect to + Adds a motor to the list to attempt to connect to it. """ + if self._moteus_thread is not None: + self._ros_node.get_logger().error("Attempted to add motor after thread was started!") + return + # Create motor - motor = moteus_motor.MoteusMotor(can_id, motor_name, self._ros_node) - self._name_to_moteus_motor[motor_name] = motor + motor = MoteusMotor(config, self._ros_node) + self._id_to_moteus_motor[config.can_id] = motor def start(self) -> None: def start(self) -> None: @@ -84,46 +90,32 @@ def threadEntry(self) -> None: The entry of the thread that launches the asyncio loop The entry of the thread that launches the asyncio loop """ - self._ros_node.get_logger().info( - ColorCodes.BLUE_OK + "Moteus Thread Launched" + ColorCodes.ENDC - ) + self._ros_node.get_logger().info(colorStr("Moteus Thread Launched", ColorCodes.BLUE_OK)) asyncio.run(self.startLoop()) - async def tryToShutdownMotor(self, motor_name: str) -> None: + async def tryToShutdownMotor(self, can_id: int) -> None: self._ros_node.get_logger().info( - ColorCodes.WARNING_YELLOW - + f'Unexpectedly trying to turn off motor "{motor_name}" (CANID ' - + str(self._name_to_moteus_motor[motor_name].canID) - + ")" - + ColorCodes.ENDC + colorStr(f"Unexpectedly trying to turn off motor: {can_id}", ColorCodes.WARNING_YELLOW) ) try: await asyncio.wait_for( - self._name_to_moteus_controller[motor_name].set_stop(), + self._id_to_moteus_controller[can_id].set_stop(), timeout=self.GENERAL_TIMEOUT, ) self._ros_node.get_logger().info( - ColorCodes.GREEN_OK - + f'Stopped motor "{motor_name}" (CANID ' - + str(self._name_to_moteus_motor[motor_name].can_id) - + ")" - + ColorCodes.ENDC + colorStr(f"Stopped motor: {can_id}", ColorCodes.GREEN_OK) ) except asyncio.TimeoutError: self._ros_node.get_logger().info( - ColorCodes.FAIL_RED - + f'FAILED TO "set_stop" MOTOR. TIMED OUT "{motor_name}" (CANID ' - + str(self._name_to_moteus_motor[motor_name].can_id) - + ")" - + ColorCodes.ENDC + colorStr(f'FAILED TO "set_stop" MOTOR. TIMED OUT {can_id}', ColorCodes.FAIL_RED) ) - del self._name_to_moteus_controller[motor_name] - del self._name_to_moteus_motor[motor_name] + del self._id_to_moteus_controller[can_id] + del self._id_to_moteus_motor[can_id] except RuntimeError as error: - self._ros_node.get_logger().info(ColorCodes.FAIL_RED + str(error) + ColorCodes.ENDC) - del self._name_to_moteus_controller[motor_name] - del self._name_to_moteus_motor[motor_name] + self._ros_node.get_logger().info(colorStr(str(error), ColorCodes.FAIL_RED)) + del self._id_to_moteus_controller[can_id] + del self._id_to_moteus_motor[can_id] async def startLoop(self) -> None: async def startLoop(self) -> None: @@ -166,41 +158,42 @@ async def startLoop(self) -> None: # Go through each Moteus Controller to send data - for name, controller in self._name_to_moteus_controller.copy().items(): - motor = self._name_to_moteus_motor[name] + for can_id, controller in self._id_to_moteus_controller.copy().items(): + motor = self._id_to_moteus_motor[can_id] try: # Check for faults - result_from_moteus = await asyncio.wait_for( + result_from_moteus: Result = await asyncio.wait_for( controller.query(), self.GENERAL_TIMEOUT ) if result_from_moteus.values[moteus.Register.FAULT] != 0: self._ros_node.get_logger().info( - ColorCodes.FAIL_RED - + f"FAULT CODE: {result_from_moteus.values[moteus.Register.FAULT]} FOR " - + f'"{name}" (CANID {motor.can_id})' - + ColorCodes.ENDC + colorStr( + f"FAULT CODE: {result_from_moteus.values[moteus.Register.FAULT]} " + f"FOR {motor.config.can_id}", + ColorCodes.FAIL_RED, + ) ) - await self.tryToShutdownMotor(name) + await self.tryToShutdownMotor(can_id) continue - if motor.setStop is True: + if motor.run_settings.set_stop is True: await asyncio.wait_for(controller.set_stop(), self.GENERAL_TIMEOUT) else: result_from_moteus = await asyncio.wait_for( controller.set_position( - position=motor.position, - velocity=motor.velocity, - feedforward_torque=motor.feedforward_torque, - kp_scale=motor.kp_scale, - kd_scale=motor.kd_scale, - maximum_torque=motor.max_torque, - watchdog_timeout=motor.watchdog_timeout, - velocity_limit=motor.velocity_limit, - accel_limit=motor.accel_limit, - fixed_voltage_override=motor.fixed_voltage_override, + position=motor.run_settings.position, + velocity=motor.run_settings.velocity, + feedforward_torque=motor.run_settings.feedforward_torque, + kp_scale=motor.run_settings.kp_scale, + kd_scale=motor.run_settings.kd_scale, + maximum_torque=motor.run_settings.max_torque, + watchdog_timeout=motor.run_settings.watchdog_timeout, + velocity_limit=motor.run_settings.velocity_limit, + accel_limit=motor.run_settings.accel_limit, + fixed_voltage_override=motor.run_settings.fixed_voltage_override, query=True, ), self.GENERAL_TIMEOUT, @@ -210,20 +203,21 @@ async def startLoop(self) -> None: except asyncio.TimeoutError: self._ros_node.get_logger().info( - ColorCodes.FAIL_RED - + f'FAILED TO SEND/READ DATA TO MOTEUS MOTOR: "{name}" {motor.can_id}) ' - + "CAN-FD bus disconnected?" - + ColorCodes.ENDC + colorStr( + f"FAILED TO SEND/READ DATA TO MOTEUS MOTOR: {can_id} " + + "CAN-FD bus disconnected?", + ColorCodes.FAIL_RED, + ), ) - del self._name_to_moteus_controller[name] - del self._name_to_moteus_motor[name] + del self._id_to_moteus_controller[can_id] + del self._id_to_moteus_motor[can_id] await asyncio.sleep(0.02) # When we exit the while loop, via ctrl-c, we set_stop() all the motors # Watch out for the arm - for name, controller in self._name_to_moteus_controller.items(): + for can_id, controller in self._id_to_moteus_controller.items(): await controller.set_stop() async def connectToMoteusControllers(self) -> None: @@ -235,45 +229,46 @@ async def connectToMoteusControllers(self) -> None: Connect to the Moteus motors. There is a timeout until we give up trying to connect """ - self._name_to_moteus_controller = {} + self._id_to_moteus_controller = {} self._should_reconnect = False - for key, motor in self._name_to_moteus_motor.items(): + for can_id, motor in self._id_to_moteus_motor.items(): qr = moteus.QueryResolution() qr.power = moteus.F32 qr.q_current = moteus.F32 qr.d_current = moteus.F32 - controller = moteus.Controller(motor.can_id, query_resolution=qr) + controller = moteus.Controller(motor.config.can_id, query_resolution=qr) try: # Reset the controller - self._ros_node.get_logger().info( - "Connecting to motor with name: " + str(motor.name) - ) + self._ros_node.get_logger().info("Connecting to motor with id: " + str(can_id)) await asyncio.wait_for( controller.query(), timeout=self.CONNECTION_TIMEOUT_IN_SECONDS ) # Try to get data, if timeout then cannot connect - self._name_to_moteus_controller[key] = controller + self._id_to_moteus_controller[can_id] = controller await controller.set_stop() self._ros_node.get_logger().info( - ColorCodes.GREEN_OK - + f'Moteus motor controller connected: "{motor.name}" (CANID {motor.can_id})' - + ColorCodes.ENDC + colorStr( + f"Moteus motor controller connected: {motor.config.can_id}", + ColorCodes.GREEN_OK, + ) ) except asyncio.TimeoutError: self._ros_node.get_logger().info( - ColorCodes.FAIL_RED - + "FAILED TO CONNECT TO MOTEUS CONTROLLER WITH CANID " - + str(motor.can_id) - + ColorCodes.ENDC + colorStr( + "FAILED TO CONNECT TO MOTEUS CONTROLLER WITH CANID " + + str(motor.config.can_id), + ColorCodes.FAIL_RED, + ) ) except RuntimeError as error: self._ros_node.get_logger().info( - ColorCodes.FAIL_RED - + "ERROR WHEN set_stop() IS CALLED. MOST LIKELY CANNOT FIND CANBUS" - + ColorCodes.ENDC + colorStr( + "ERROR WHEN set_stop() IS CALLED. MOST LIKELY CANNOT FIND CANBUS", + ColorCodes.FAIL_RED, + ) ) self._ros_node.get_logger().info( - ColorCodes.FAIL_RED + str(error.with_traceback(None)) + ColorCodes.ENDC + colorStr(str(error.with_traceback(None)), ColorCodes.FAIL_RED) ) diff --git a/src/can_moteus/can_moteus/ros_moteus_bridge.py b/src/can_moteus/can_moteus/ros_moteus_bridge.py index 28df1ff..671983a 100644 --- a/src/can_moteus/can_moteus/ros_moteus_bridge.py +++ b/src/can_moteus/can_moteus/ros_moteus_bridge.py @@ -9,8 +9,8 @@ from std_msgs.msg import Float32 from usb.core import find as finddev -from utility.canbus_mappings import CanBusMappings -from utility.color_text import ColorCodes +from lib.color_codes import ColorCodes, colorStr +from lib.configs import MotorConfigs from . import moteus_thread_manager @@ -35,7 +35,7 @@ def __init__(self) -> None: def __init__(self) -> None: super().__init__("can_moteus_node") - self.get_logger().info(ColorCodes.BLUE_OK + "Launching can_moteus node" + ColorCodes.ENDC) + self.get_logger().info(colorStr("Launching can_moteus node", ColorCodes.BLUE_OK)) # Reset the CANFD-USB # run "lsusb" in cmd with the CANFD-USB connected @@ -46,7 +46,6 @@ def __init__(self) -> None: if dev is not None: dev.reset() self.thread_manager: moteus_thread_manager.MoteusThreadManager | None = None - self.canbus_mappings = CanBusMappings() self.reconnect_to_moteus_sub = self.create_subscription( Float32, "reconnectMoteusControllers", self.reconnect, 1 @@ -55,9 +54,9 @@ def __init__(self) -> None: self.createMoteusMotors() else: self.get_logger().info( - ColorCodes.FAIL_RED - + "Failed to find CANFD-USB usb device. Is it plugged in?" - + ColorCodes.ENDC + colorStr( + "Failed to find CANFD-USB usb device. Is it plugged in?", ColorCodes.FAIL_RED + ) ) def reconnect(self, _: Float32) -> None: @@ -88,38 +87,19 @@ def createMoteusMotors(self) -> None: self.thread_manager = moteus_thread_manager.MoteusThreadManager(self) # Drivebase - self.thread_manager.addMotor( - CanBusMappings.CANID_REAR_RIGHT_DRIVE_MOTOR, "rear_right_drive_motor" - ) - self.thread_manager.addMotor( - CanBusMappings.CANID_MID_RIGHT_DRIVE_MOTOR, "mid_right_drive_motor" - ) - self.thread_manager.addMotor( - CanBusMappings.CANID_FRONT_RIGHT_DRIVE_MOTOR, "front_right_drive_motor" - ) - - self.thread_manager.addMotor( - CanBusMappings.CANID_REAR_LEFT_DRIVE_MOTOR, "rear_left_drive_motor" - ) - self.thread_manager.addMotor( - CanBusMappings.CANID_MID_LEFT_DRIVE_MOTOR, "mid_left_drive_motor" - ) - self.thread_manager.addMotor( - CanBusMappings.CANID_FRONT_LEFT_DRIVE_MOTOR, "front_left_drive_motor" - ) + self.thread_manager.addMotor(MotorConfigs.REAR_RIGHT_DRIVE_MOTOR) + self.thread_manager.addMotor(MotorConfigs.MID_RIGHT_DRIVE_MOTOR) + self.thread_manager.addMotor(MotorConfigs.FRONT_RIGHT_DRIVE_MOTOR) + self.thread_manager.addMotor(MotorConfigs.REAR_LEFT_DRIVE_MOTOR) + self.thread_manager.addMotor(MotorConfigs.MID_LEFT_DRIVE_MOTOR) + self.thread_manager.addMotor(MotorConfigs.FRONT_LEFT_DRIVE_MOTOR) # Arm - self.thread_manager.addMotor( - CanBusMappings.CANID_ARM_TURNTABLE_MOTOR, "arm_turntable_motor" - ) - self.thread_manager.addMotor(CanBusMappings.CANID_ARM_SHOULDER_MOTOR, "arm_shoulder_motor") - self.thread_manager.addMotor(CanBusMappings.CANID_ARM_ELBOW_MOTOR, "arm_elbow_motor") - self.thread_manager.addMotor( - CanBusMappings.CANID_ARM_LEFT_WRIST_MOTOR, "arm_left_wrist_motor" - ) - self.thread_manager.addMotor( - CanBusMappings.CANID_ARM_RIGHT_WRIST_MOTOR, "arm_right_wrist_motor" - ) + self.thread_manager.addMotor(MotorConfigs.ARM_TURNTABLE_MOTOR) + self.thread_manager.addMotor(MotorConfigs.ARM_SHOULDER_MOTOR) + self.thread_manager.addMotor(MotorConfigs.ARM_ELBOW_MOTOR) + self.thread_manager.addMotor(MotorConfigs.ARM_LEFT_WRIST_MOTOR) + self.thread_manager.addMotor(MotorConfigs.ARM_RIGHT_WRIST_MOTOR) self.thread_manager.start() @@ -141,7 +121,7 @@ def main(args: list[str] | None = None) -> None: pass except ExternalShutdownException: # This is done when we ctrl-c the progam to shut it down - node.get_logger().info(ColorCodes.BLUE_OK + "Shutting down can_moteus" + ColorCodes.ENDC) + node.get_logger().info(colorStr("Shutting down can_moteus", ColorCodes.BLUE_OK)) if node.thread_manager is not None: node.thread_manager.terminateAllThreads() node.destroy_node() diff --git a/src/custom_interfaces/robot_info.py b/src/custom_interfaces/robot_info.py deleted file mode 100644 index 59e49ee..0000000 --- a/src/custom_interfaces/robot_info.py +++ /dev/null @@ -1,54 +0,0 @@ -from rclpy.node import Node -from rclpy.subscription import Subscription -from std_msgs.msg import String - -from utility.moteus_data_out_json_helper import MoteusDataOutJsonHelper - -moteusTopicList = { - "front_left_drive_motor_from_can", - "mid_left_drive_motor_from_can", - "rear_left_drive_motor_from_can", - "front_right_drive_motor_from_can", - "mid_right_drive_motor_from_can", - "rear_right_drive_motor_from_can", - "arm_turntable_motor_from_can", - "arm_shoulder_motor_from_can", - "arm_elbow_motor_from_can", - "arm_left_wrist_motor_from_can", - "arm_right_wrist_motor_from_can", -} - - -class RobotInfo: - - def __init__(self, ros_node: Node): - self._ros_node = ros_node - self.sub_list: list[Subscription] = [] # empty array - self.can_id_to_json: dict[int, MoteusDataOutJsonHelper] = {} # Dict - - self.can_id_to_json[20] = MoteusDataOutJsonHelper() - self.can_id_to_json[21] = MoteusDataOutJsonHelper() - self.can_id_to_json[22] = MoteusDataOutJsonHelper() - self.can_id_to_json[23] = MoteusDataOutJsonHelper() - self.can_id_to_json[24] = MoteusDataOutJsonHelper() - self.can_id_to_json[25] = MoteusDataOutJsonHelper() - self.can_id_to_json[1] = MoteusDataOutJsonHelper() - self.can_id_to_json[2] = MoteusDataOutJsonHelper() - self.can_id_to_json[3] = MoteusDataOutJsonHelper() - self.can_id_to_json[4] = MoteusDataOutJsonHelper() - self.can_id_to_json[5] = MoteusDataOutJsonHelper() - - self.createSubscribers() - - def createSubscribers(self) -> None: - for topic_name in moteusTopicList: - sub = self._ros_node.create_subscription(String, topic_name, self.subCallback, 1) - self.sub_list.append(sub) - - def subCallback(self, msg: String) -> None: - json_helper = MoteusDataOutJsonHelper() - json_helper.buildHelper(msg.data) - self.can_id_to_json[json_helper.can_id] = json_helper - - def getDataFromCanID(self, can_id: int) -> MoteusDataOutJsonHelper: - return self.can_id_to_json[can_id] diff --git a/src/custom_interfaces/robot_interface.py b/src/custom_interfaces/robot_interface.py deleted file mode 100644 index 893a978..0000000 --- a/src/custom_interfaces/robot_interface.py +++ /dev/null @@ -1,218 +0,0 @@ -# General interface for robot funcitonality - -from rclpy.node import Node -from rclpy.publisher import Publisher -from std_msgs.msg import Float32, String - -from utility.moteus_data_in_json_helper import MoteusDataInJsonHelper - -VELOCITY_CONVERSION = 1 -POSITION_CONVERSION = 1 / (6.28) # Radians to position ticks -REV_TO_RADIANS = 6.28 # One Revolution = 2pi - - -robot_publishers: dict[str, Publisher] = {} - - -class RobotInterface: - # - # Constructors/Destructors - # - - def __init__(self, ros_node: Node) -> None: - self._ros_node = ros_node - - # Drive base - publisher = self._ros_node.create_publisher( - String, "front_left_drive_motor_from_interface", 10 - ) - robot_publishers["front_left_drive_motor"] = publisher - publisher = self._ros_node.create_publisher( - String, "front_right_drive_motor_from_interface", 10 - ) - robot_publishers["front_right_drive_motor"] = publisher - publisher = self._ros_node.create_publisher( - String, "mid_left_drive_motor_from_interface", 10 - ) - robot_publishers["mid_left_drive_motor"] = publisher - publisher = self._ros_node.create_publisher( - String, "mid_right_drive_motor_from_interface", 10 - ) - robot_publishers["mid_right_drive_motor"] = publisher - publisher = self._ros_node.create_publisher( - String, "rear_left_drive_motor_from_interface", 10 - ) - robot_publishers["rear_left_drive_motor"] = publisher - publisher = self._ros_node.create_publisher( - String, "rear_right_drive_motor_from_interface", 10 - ) - robot_publishers["rear_right_drive_motor"] = publisher - - robot_publishers["arm_fingers_motor"] = publisher - - # Antenna - publisher = self._ros_node.create_publisher( - Float32, "antenna_motor_position_from_interface", 10 - ) - robot_publishers["antenna_motor"] = publisher - publisher = self._ros_node.create_publisher( - Float32, "antenna_turntable_motor_position_from_interface", 10 - ) - robot_publishers["antenna_turntable_motor"] = publisher - - # Arm - publisher = self._ros_node.create_publisher( - String, "arm_turntable_motor_from_interface", 10 - ) - robot_publishers["arm_turntable_motor"] = publisher - publisher = self._ros_node.create_publisher(String, "arm_shoulder_motor_from_interface", 10) - robot_publishers["arm_shoulder_motor"] = publisher - publisher = self._ros_node.create_publisher(String, "arm_elbow_motor_from_interface", 10) - robot_publishers["arm_elbow_motor"] = publisher - publisher = self._ros_node.create_publisher( - String, "arm_left_wrist_motor_from_interface", 10 - ) - robot_publishers["arm_left_wrist_motor"] = publisher - publisher = self._ros_node.create_publisher( - String, "arm_right_wrist_motor_from_interface", 10 - ) - robot_publishers["arm_right_wrist_motor"] = publisher - - def velocityConversion(self, amount: float) -> float: - return amount * VELOCITY_CONVERSION - - # Converting from input "radians" to output "revolutions" - def positionConversion(self, amount: float) -> float: - return amount * POSITION_CONVERSION - - # General movement including all wheels - def moveForward(self, amount: float) -> None: - print() - - def moveBackward(self, amount: float) -> None: - print() - - def turnLeft(self, amount: float) -> None: - print() - - def turnRight(self, amount: float) -> None: - print() - - # ------ DRIVEBASE ------ - # Left front wheel - MEASURED IN REVOLUTIONS PER SECOND - def frontLeftDriveMotor(self, amount: float) -> None: - self._sendDriveMotor("front_left_drive_motor", radians_per_second=amount) - - # Right front wheel - def frontRightDriverMotor(self, amount: float) -> None: - self._sendDriveMotor("front_right_drive_motor", radians_per_second=amount) - - # Left middle wheel - def midLeftDriveMotor(self, amount: float) -> None: - self._sendDriveMotor("mid_left_drive_motor", radians_per_second=amount) - - # Right middle wheel - def midRightDriveMotor(self, amount: float) -> None: - self._sendDriveMotor("mid_right_drive_motor", radians_per_second=amount) - - # Left back wheel - def rearLeftDriveMotor(self, amount: float) -> None: - self._sendDriveMotor("rear_left_drive_motor", radians_per_second=amount) - - # Right back wheel - def rearRightDriveMotor(self, amount: float) -> None: - self._sendDriveMotor("rear_right_drive_motor", radians_per_second=amount) - - def _sendDriveMotor(self, pub_name: str, radians_per_second: float = 0.0) -> None: - publisher = robot_publishers[pub_name] - - str_msg = String() - json_helper = MoteusDataInJsonHelper() - json_helper.velocity = radians_per_second - json_helper.set_stop = False - - str_msg.data = json_helper.buildJSONString() - publisher.publish(str_msg) - - # ------ ARM ------ - - def armTurntableVelocity(self, target_vel: float) -> None: - self._sendArmVelocity("arm_turntable_motor", target_vel) - - def shoulderVelocity(self, target_vel: float) -> None: - self._sendArmVelocity("arm_shoulder_motor", target_vel) - - def elbowVelocity(self, target_vel: float) -> None: - self._sendArmVelocity("arm_elbow_motor", target_vel) - - def leftWriteVelocity(self, target_vel: float) -> None: - self._sendArmVelocity("arm_left_wrist_motor", target_vel) - - def rightWristVelocity(self, target_vel: float) -> None: - self._sendArmVelocity("arm_right_wrist_motor", target_vel) - - # For now, I am sending rev/sec - def _sendArmVelocity(self, pub_name: str, velocity: float = 0.0) -> None: - publisher = robot_publishers[pub_name] - - str_msg = String() - json_helper = MoteusDataInJsonHelper() - json_helper.velocity = velocity - json_helper.set_stop = False - - str_msg.data = json_helper.buildJSONString() - publisher.publish(str_msg) - - def disableArmTurntableMotor(self) -> None: - self._disableMotor("arm_turntable_motor") - - def disableArmShoulderMotor(self) -> None: - self._disableMotor("arm_shoulder_motor") - - def disableArmElbowMotor(self) -> None: - self._disableMotor("arm_elbow_motor") - - def disableArmLeftWristMotor(self) -> None: - self._disableMotor("arm_left_wrist_motor") - - def disableArmRightWristMotor(self) -> None: - self._disableMotor("arm_right_wrist_motor") - - def _disableMotor(self, pub_name: str) -> None: - publisher = robot_publishers[pub_name] - - str_msg = String() - json_helper = MoteusDataInJsonHelper() - json_helper.velocity = 0 # for extra security - json_helper.set_stop = True - - str_msg.data = json_helper.buildJSONString() - publisher.publish(str_msg) - - # Antenna movement - def antennaMotorExtend(self) -> None: - # Output is in "revolutions" - revolutions_output = ( - 1 # we don't know the actual position it should be. this is a placeholder - ) - publisher = robot_publishers["antenna_motor"] - str_msg = Float32() - str_msg.data = revolutions_output - publisher.publish(str_msg) - - def antennaMotorRetract(self) -> None: - # Output is in "revolutions" - revolutions_output = ( - 0 # we don't know the actual position it should be. this is a placeholder - ) - publisher = robot_publishers["antenna_motor"] - str_msg = Float32() - str_msg.data = revolutions_output - publisher.publish(str_msg) - - def antennaTurntableMotor(self, amount: float) -> None: - revolutions_output = self.positionConversion(amount) - publisher = robot_publishers["antenna_turntable_motor"] - str_msg = Float32() - str_msg.data = revolutions_output - publisher.publish(str_msg) diff --git a/src/drivebase/drivebase/drivebase.py b/src/drivebase/drivebase/drivebase.py index 3f64351..a9a2321 100644 --- a/src/drivebase/drivebase/drivebase.py +++ b/src/drivebase/drivebase/drivebase.py @@ -5,17 +5,17 @@ from rclpy.node import Node from std_msgs.msg import Float32 -from interface.robot_interface import RobotInterface -from utility.color_text import ColorCodes +from lib.color_codes import ColorCodes, colorStr +from lib.configs import MotorConfigs +from lib.interface.robot_interface import RobotInterface class Drivebase(Node): - SPEED = 1.5 + SPEED = 6.28 * 1.5 def __init__(self) -> None: super().__init__("drivebase") - self.get_logger().info(ColorCodes.BLUE_OK + "Launching drivebase node" + ColorCodes.ENDC) - + self.get_logger().info(colorStr("Launching drivebase node", ColorCodes.BLUE_OK)) self.bot_interface = RobotInterface(self) self.left_subscription = self.create_subscription( @@ -27,15 +27,15 @@ def __init__(self) -> None: def moveLeftSide(self, msg: Float32) -> None: vel = msg.data * self.SPEED - self.bot_interface.frontLeftDriveMotor(-vel) - self.bot_interface.midLeftDriveMotor(-vel) - self.bot_interface.rearLeftDriveMotor(-vel) + self.bot_interface.runMotorSpeed(MotorConfigs.FRONT_LEFT_DRIVE_MOTOR, -vel) + self.bot_interface.runMotorSpeed(MotorConfigs.MID_LEFT_DRIVE_MOTOR, -vel) + self.bot_interface.runMotorSpeed(MotorConfigs.REAR_LEFT_DRIVE_MOTOR, -vel) def moveRightSide(self, msg: Float32) -> None: vel = msg.data * self.SPEED - self.bot_interface.frontRightDriverMotor(vel) - self.bot_interface.midRightDriveMotor(vel) - self.bot_interface.rearRightDriveMotor(vel) + self.bot_interface.runMotorSpeed(MotorConfigs.FRONT_RIGHT_DRIVE_MOTOR, vel) + self.bot_interface.runMotorSpeed(MotorConfigs.MID_RIGHT_DRIVE_MOTOR, vel) + self.bot_interface.runMotorSpeed(MotorConfigs.REAR_RIGHT_DRIVE_MOTOR, vel) def turnLeft(self, msg: Float32) -> None: self.moveLeftSide(msg) @@ -57,9 +57,7 @@ def main(args: list[str] | None = None) -> None: # Destroy the node explicitly # (optional - otherwise it will be done automatically # when the garbage collector destroys the node object) - drivebase.get_logger().info( - ColorCodes.BLUE_OK + "Shutting down drivebase" + ColorCodes.ENDC - ) + drivebase.get_logger().info(colorStr("Shutting down drivebase", ColorCodes.BLUE_OK)) drivebase.destroy_node() sys.exit(0) diff --git a/src/lib/configs.py b/src/lib/configs.py index 77a6dce..b4b1086 100644 --- a/src/lib/configs.py +++ b/src/lib/configs.py @@ -3,7 +3,6 @@ configs. """ -import math from dataclasses import dataclass from typing import Any @@ -19,14 +18,6 @@ class MoteusMotorConfig: The can id of the motor. """ - config: dict[str, float | int] - """ - The config of the motor. See: - https://github.com/mjbots/moteus/blob/main/docs/reference.md#c-configurable-values - - The `id.id` will be ignored. - """ - def getCanTopicName(self) -> str: """ Gets the motor's topic name for data sourced from can. @@ -50,130 +41,20 @@ class MotorConfigs: """ # Drivebase - REAR_RIGHT_DRIVE_MOTOR = MoteusMotorConfig( - can_id=20, - config={ - "servo.pwm_rate_hz": 50000, - "servo.pid_position.kp": 20.0, - "servo.pid_position.ki": 0.0, - "servo.pid_position.kd": 0.0, - "servo.default_timeout_s": 0.5, - "servo.max_current_A": 10.0, - "servo.max_velocity": 100.0, - "servopos.position_min": math.nan, - "servopos.position_max": math.nan, - }, - ) - MID_RIGHT_DRIVE_MOTOR = MoteusMotorConfig( - can_id=21, - config={ - "servo.pwm_rate_hz": 50000, - "servo.pid_position.kp": 20.0, - "servo.pid_position.ki": 0.0, - "servo.pid_position.kd": 0.0, - "servo.default_timeout_s": 0.5, - "servo.max_current_A": 10.0, - "servo.max_velocity": 100.0, - "servopos.position_min": math.nan, - "servopos.position_max": math.nan, - }, - ) - FRONT_RIGHT_DRIVE_MOTOR = MoteusMotorConfig( - can_id=22, - config={ - "servo.pid_position.kp": 20.0, - "servo.pid_position.ki": 0.0, - "servo.pid_position.kd": 0.0, - "servo.default_timeout_s": 0.5, - "servo.max_current_A": 10.0, - "servo.max_velocity": 100.0, - "servopos.position_min": math.nan, - "servopos.position_max": math.nan, - }, - ) + REAR_RIGHT_DRIVE_MOTOR = MoteusMotorConfig(can_id=20) + MID_RIGHT_DRIVE_MOTOR = MoteusMotorConfig(can_id=21) + FRONT_RIGHT_DRIVE_MOTOR = MoteusMotorConfig(can_id=22) - REAR_LEFT_DRIVE_MOTOR = MoteusMotorConfig( - can_id=23, - config={ - "servo.pwm_rate_hz": 50000, - "servo.pid_position.kp": 20.0, - "servo.pid_position.ki": 0.0, - "servo.pid_position.kd": 0.0, - "servo.default_timeout_s": 0.5, - "servo.max_current_A": 10.0, - "servo.max_velocity": 100.0, - "servopos.position_min": math.nan, - "servopos.position_max": math.nan, - }, - ) - MID_LEFT_DRIVE_MOTOR = MoteusMotorConfig( - can_id=24, - config={ - "servo.pwm_rate_hz": 50000, - "servo.pid_position.kp": 20.0, - "servo.pid_position.ki": 0.0, - "servo.pid_position.kd": 0.0, - "servo.default_timeout_s": 0.5, - "servo.max_current_A": 10.0, - "servo.max_velocity": 100.0, - "servopos.position_min": math.nan, - "servopos.position_max": math.nan, - }, - ) - FRONT_LEFT_DRIVE_MOTOR = MoteusMotorConfig( - can_id=25, - config={ - "servo.pwm_rate_hz": 50000, - "servo.pid_position.kp": 20.0, - "servo.pid_position.ki": 0.0, - "servo.pid_position.kd": 0.0, - "servo.default_timeout_s": 0.5, - "servo.max_current_A": 10.0, - "servo.max_velocity": 100.0, - "servopos.position_min": math.nan, - "servopos.position_max": math.nan, - }, - ) + REAR_LEFT_DRIVE_MOTOR = MoteusMotorConfig(can_id=23) + MID_LEFT_DRIVE_MOTOR = MoteusMotorConfig(can_id=24) + FRONT_LEFT_DRIVE_MOTOR = MoteusMotorConfig(can_id=25) # Arm - ARM_SHOULDER_MOTOR = MoteusMotorConfig( - can_id=1, - config={ - "servo.max_voltage": 56.0, - "servopos.position_min": math.nan, - "servopos.position_max": math.nan, - }, - ) - ARM_ELBOW_MOTOR = MoteusMotorConfig( - can_id=2, - config={ - "motor_position.rotor_to_output_ratio": 0.01666, - "servo.pwm_rate_hz": 60000, - "servo.pid_position.kp": 10000.0, - "servo.pid_position.ki": 0.0, - "servo.pid_position.kd": 0.0, - "servo.default_timeout_s": 1.0, - "servo.max_current_A": 6.0, - "servo.max_velocity": 0.1, - "servopos.position_min": -0.5, - "servopos.position_max": 0.0, - }, - ) - ARM_LEFT_WRIST_MOTOR = MoteusMotorConfig(can_id=3, config={}) - ARM_RIGHT_WRIST_MOTOR = MoteusMotorConfig(can_id=4, config={}) - ARM_TURNTABLE_MOTOR = MoteusMotorConfig( - can_id=5, - config={ - "motor_position.rotor_to_output_ratio": 0.030581, - "servo.pid_position.kp": 16.0, - "servo.pid_position.ki": 0.0, - "servo.pid_position.kd": 1.0, - "servo.max_current_A": 10.0, - "servo.max_velocity": 1.0, - "servopos.position_min": math.nan, - "servopos.position_max": math.nan, - }, - ) + ARM_SHOULDER_MOTOR = MoteusMotorConfig(can_id=1) + ARM_ELBOW_MOTOR = MoteusMotorConfig(can_id=2) + ARM_LEFT_WRIST_MOTOR = MoteusMotorConfig(can_id=3) + ARM_RIGHT_WRIST_MOTOR = MoteusMotorConfig(can_id=4) + ARM_TURNTABLE_MOTOR = MoteusMotorConfig(can_id=5) # Don't allow anyone to change this class's attributes def __setattr__(self, _: str, __: Any) -> Any: diff --git a/src/mission_control_updater/mission_control_updater/info_to_json_helper.py b/src/mission_control_updater/mission_control_updater/info_to_json_helper.py index a66f16e..b537ac9 100644 --- a/src/mission_control_updater/mission_control_updater/info_to_json_helper.py +++ b/src/mission_control_updater/mission_control_updater/info_to_json_helper.py @@ -1,21 +1,21 @@ import json -from utility.moteus_data_out_json_helper import MoteusDataOutJsonHelper +from lib.moteus_motor_state import MoteusMotorState class InfoToJSONHelper: def __init__(self) -> None: - self.moteus_entries: list[MoteusDataOutJsonHelper] = [] + self.moteus_entries: list[MoteusMotorState] = [] - def addMoteusEntry(self, entry: MoteusDataOutJsonHelper) -> None: + def addMoteusEntry(self, entry: MoteusMotorState) -> None: self.moteus_entries.append(entry) def buildJSONString(self) -> str: moteus_dict_array = [] for moteus_entry in self.moteus_entries: - moteus_dict_array.append(moteus_entry.buildPythonDict()) + moteus_dict_array.append(moteus_entry.toDict()) python_dict = { "moteusMotorLength": len(moteus_dict_array), diff --git a/src/mission_control_updater/mission_control_updater/updater.py b/src/mission_control_updater/mission_control_updater/updater.py index 7564422..2903ec2 100644 --- a/src/mission_control_updater/mission_control_updater/updater.py +++ b/src/mission_control_updater/mission_control_updater/updater.py @@ -8,8 +8,9 @@ from rclpy.node import Node from std_msgs.msg import String -from interface.robot_info import RobotInfo -from utility.color_text import ColorCodes +from lib.color_codes import ColorCodes, colorStr +from lib.configs import MotorConfigs +from lib.interface.robot_info import RobotInfo from . import info_to_json_helper @@ -21,7 +22,7 @@ def __init__(self) -> None: def __init__(self) -> None: super().__init__("mission_control_updater_node") self.get_logger().info( - ColorCodes.BLUE_OK + "Launching mission_control_updater_node" + ColorCodes.ENDC + colorStr("Launching mission_control_updater_node", ColorCodes.BLUE_OK) ) self.publisher_to_mc = self.create_publisher(String, "mission_control_updater", 1) @@ -30,12 +31,10 @@ def __init__(self) -> None: self.robot_info = RobotInfo(self) def sendData(self) -> None: - set_of_can_id = {20, 21, 22, 23, 24, 25, 1, 2, 3, 4, 5} - json_builder = info_to_json_helper.InfoToJSONHelper() - for can_id in set_of_can_id: - json_builder.addMoteusEntry(self.robot_info.getDataFromCanID(can_id)) + for motor in MotorConfigs.getAllMotors(): + json_builder.addMoteusEntry(self.robot_info.getMotorState(motor)) msg = String() msg.data = json_builder.buildJSONString() @@ -65,7 +64,7 @@ def main(args: list[str] | None = None) -> None: except ExternalShutdownException: # This is done when we ctrl-c the progam to shut it down node.get_logger().info( - ColorCodes.BLUE_OK + "Shutting down mission_control_updater_node" + ColorCodes.ENDC + colorStr("Shutting down mission_control_updater_node", ColorCodes.BLUE_OK) ) node.destroy_node() sys.exit(0) diff --git a/src/utility/canbus_mappings.py b/src/utility/canbus_mappings.py deleted file mode 100644 index de61fba..0000000 --- a/src/utility/canbus_mappings.py +++ /dev/null @@ -1,19 +0,0 @@ -class CanBusMappings: - # Drivebase - CANID_REAR_RIGHT_DRIVE_MOTOR = 20 - CANID_MID_RIGHT_DRIVE_MOTOR = 21 - CANID_FRONT_RIGHT_DRIVE_MOTOR = 22 - - CANID_REAR_LEFT_DRIVE_MOTOR = 23 - CANID_MID_LEFT_DRIVE_MOTOR = 24 - CANID_FRONT_LEFT_DRIVE_MOTOR = 25 - - # Arm - CANID_ARM_SHOULDER_MOTOR = 1 - CANID_ARM_ELBOW_MOTOR = 2 - CANID_ARM_LEFT_WRIST_MOTOR = 3 - CANID_ARM_RIGHT_WRIST_MOTOR = 4 - CANID_ARM_TURNTABLE_MOTOR = 5 - - def __init__(self) -> None: - pass diff --git a/src/utility/color_text.py b/src/utility/color_text.py deleted file mode 100644 index 2d8ff65..0000000 --- a/src/utility/color_text.py +++ /dev/null @@ -1,12 +0,0 @@ -# "Borrowed" from here: -# https://stackoverflow.com/questions/287871/how-do-i-print-colored-text-to-the-terminal -class ColorCodes: - PINK = "\033[95m" - BLUE_OK = "\033[94m" - CYAN_OK = "\033[96m" - GREEN_OK = "\033[92m" - WARNING_YELLOW = "\033[93m" - FAIL_RED = "\033[91m" - ENDC = "\033[0m" - BOLD = "\033[1m" - UNDERLINE = "\033[4m" diff --git a/src/utility/moteus_data_in_json_helper.py b/src/utility/moteus_data_in_json_helper.py deleted file mode 100644 index a5d8311..0000000 --- a/src/utility/moteus_data_in_json_helper.py +++ /dev/null @@ -1,63 +0,0 @@ -import json -import math - - -class MoteusDataInJsonHelper: - - def __init__(self) -> None: - self.position: float | None = None - self.velocity: float | None = None - self.feedforward_torque: float | None = None - self.kp_scale: float | None = None - self.kd_scale: float | None = None - self.max_torque: float | None = None - self.watchdog_timeout: float | None = None - self.velocity_limit: float | None = None - self.accel_limit: float | None = None - self.fixed_voltage_override: float | None = None - - self.set_stop = True - - def getPosition(self) -> float: - if self.position is None: - return math.nan - - return self.position - - def getVelocity(self) -> float: - if self.velocity is None: - return math.nan - - return self.velocity - - def buildJSONString(self) -> str: - python_dict = { - "position": self.position, - "velocity": self.velocity, - "feedforward_torque": self.feedforward_torque, - "kp_scale": self.kp_scale, - "kd_scale": self.kd_scale, - "max_torque": self.max_torque, - "watchdog_timeout": self.watchdog_timeout, - "velocity_limit": self.velocity_limit, - "accel_limit": self.accel_limit, - "fixed_voltage_override": self.fixed_voltage_override, - "set_stop": self.set_stop, - } - - return json.dumps(python_dict) - - def buildHelper(self, json_string: str) -> None: - python_dict = json.loads(json_string) - - self.position = python_dict["position"] - self.velocity = python_dict["velocity"] - self.feedforward_torque = python_dict["feedforward_torque"] - self.kp_scale = python_dict["kp_scale"] - self.kd_scale = python_dict["kd_scale"] - self.max_torque = python_dict["max_torque"] - self.watchdog_timeout = python_dict["watchdog_timeout"] - self.velocity_limit = python_dict["velocity_limit"] - self.accel_limit = python_dict["accel_limit"] - self.fixed_voltage_override = python_dict["fixed_voltage_override"] - self.set_stop = python_dict["set_stop"] diff --git a/src/utility/moteus_data_out_json_helper.py b/src/utility/moteus_data_out_json_helper.py deleted file mode 100644 index 5859b29..0000000 --- a/src/utility/moteus_data_out_json_helper.py +++ /dev/null @@ -1,49 +0,0 @@ -import json - - -class MoteusDataOutJsonHelper: - - def __init__(self) -> None: - # take a look at moteus.Register - self.can_id = -1 - self.position: float | None = None - self.velocity: float | None = None - self.torque: float | None = None - self.temperature: float | None = None - self.power: float | None = None - self.input_voltage: float | None = None - self.q_current: float | None = None - self.d_current: float | None = None - - def buildJSONString(self) -> str: - python_dict = self.buildPythonDict() - - return json.dumps(python_dict) - - def buildPythonDict(self) -> dict[str, float | None]: - python_dict = { - "can_id": self.can_id, - "position": self.position, - "velocity": self.velocity, - "torque": self.torque, - "temperature": self.temperature, - "power": self.power, - "input_voltage": self.input_voltage, - "q_current": self.q_current, - "d_current": self.d_current, - } - - return python_dict - - def buildHelper(self, json_string: str) -> None: - python_dict = json.loads(json_string) - - self.can_id = python_dict["can_id"] - self.position = python_dict["position"] - self.velocity = python_dict["velocity"] - self.torque = python_dict["torque"] - self.temperature = python_dict["temperature"] - self.power = python_dict["power"] - self.input_voltage = python_dict["input_voltage"] - self.q_current = python_dict["q_current"] - self.d_current = python_dict["d_current"] From 898940bc32be29898922b909f599b013ee432ae2 Mon Sep 17 00:00:00 2001 From: Vladimir Kupryukhin <45701631+VladimirKupryukhin@users.noreply.github.com> Date: Mon, 16 Sep 2024 15:30:33 -0700 Subject: [PATCH 35/50] [lib] Add support for setting moteus config values in lib #61 (#62) * [lib] add lib folder and refactor constants into configs, removing motor names only relying on can id * [lib] refactor robot interface and info to take motor configs and new msg types * [lib] make coloring slightly less annoying * [lib] differentiate between disable and stop motor * [lib] set position to `nan` when stopping motor * add typing to moteus command results * [lib] debug in person to make it work * [lib] make robot info take motor configs over can ids * [lib] fix formatting * fix units on robot interface and document some motor state attributes * [lib] implement config setting * [lib] add configs * [lib] remove conf default and fix bugs for config * [lib] skip can id config value --------- Co-authored-by: Kyler Li Co-authored-by: TrickFire Robotics --- .../can_moteus/moteus_thread_manager.py | 31 ++++ src/lib/configs.py | 141 ++++++++++++++++-- 2 files changed, 161 insertions(+), 11 deletions(-) diff --git a/src/can_moteus/can_moteus/moteus_thread_manager.py b/src/can_moteus/can_moteus/moteus_thread_manager.py index dda6d5d..85b202d 100644 --- a/src/can_moteus/can_moteus/moteus_thread_manager.py +++ b/src/can_moteus/can_moteus/moteus_thread_manager.py @@ -262,6 +262,7 @@ async def connectToMoteusControllers(self) -> None: ColorCodes.FAIL_RED, ) ) + continue except RuntimeError as error: self._ros_node.get_logger().info( colorStr( @@ -272,3 +273,33 @@ async def connectToMoteusControllers(self) -> None: self._ros_node.get_logger().info( colorStr(str(error.with_traceback(None)), ColorCodes.FAIL_RED) ) + continue + + stream = moteus.Stream(controller, verbose=True) + try: + await asyncio.wait_for( + stream.command("conf load".encode(encoding="utf-8")), + timeout=self.CONNECTION_TIMEOUT_IN_SECONDS + ) + for key, value in motor.config.config.items(): + if key == "id.id": + continue + await asyncio.wait_for( + stream.command(f"conf set {key} {value}".encode(encoding="utf-8")), + timeout=self.CONNECTION_TIMEOUT_IN_SECONDS + ) + except asyncio.TimeoutError: + self._ros_node.get_logger().info( + colorStr( + "FAILED TO SET CONFIG ON MOTOR: " + + str(motor.config.can_id), + ColorCodes.FAIL_RED, + ) + ) + except RuntimeError as error: + self._ros_node.get_logger().info( + colorStr("ERROR WHEN SETTING CONFIG.", ColorCodes.FAIL_RED) + ) + self._ros_node.get_logger().info( + colorStr(str(error.with_traceback(None)), ColorCodes.FAIL_RED) + ) diff --git a/src/lib/configs.py b/src/lib/configs.py index b4b1086..77a6dce 100644 --- a/src/lib/configs.py +++ b/src/lib/configs.py @@ -3,6 +3,7 @@ configs. """ +import math from dataclasses import dataclass from typing import Any @@ -18,6 +19,14 @@ class MoteusMotorConfig: The can id of the motor. """ + config: dict[str, float | int] + """ + The config of the motor. See: + https://github.com/mjbots/moteus/blob/main/docs/reference.md#c-configurable-values + + The `id.id` will be ignored. + """ + def getCanTopicName(self) -> str: """ Gets the motor's topic name for data sourced from can. @@ -41,20 +50,130 @@ class MotorConfigs: """ # Drivebase - REAR_RIGHT_DRIVE_MOTOR = MoteusMotorConfig(can_id=20) - MID_RIGHT_DRIVE_MOTOR = MoteusMotorConfig(can_id=21) - FRONT_RIGHT_DRIVE_MOTOR = MoteusMotorConfig(can_id=22) + REAR_RIGHT_DRIVE_MOTOR = MoteusMotorConfig( + can_id=20, + config={ + "servo.pwm_rate_hz": 50000, + "servo.pid_position.kp": 20.0, + "servo.pid_position.ki": 0.0, + "servo.pid_position.kd": 0.0, + "servo.default_timeout_s": 0.5, + "servo.max_current_A": 10.0, + "servo.max_velocity": 100.0, + "servopos.position_min": math.nan, + "servopos.position_max": math.nan, + }, + ) + MID_RIGHT_DRIVE_MOTOR = MoteusMotorConfig( + can_id=21, + config={ + "servo.pwm_rate_hz": 50000, + "servo.pid_position.kp": 20.0, + "servo.pid_position.ki": 0.0, + "servo.pid_position.kd": 0.0, + "servo.default_timeout_s": 0.5, + "servo.max_current_A": 10.0, + "servo.max_velocity": 100.0, + "servopos.position_min": math.nan, + "servopos.position_max": math.nan, + }, + ) + FRONT_RIGHT_DRIVE_MOTOR = MoteusMotorConfig( + can_id=22, + config={ + "servo.pid_position.kp": 20.0, + "servo.pid_position.ki": 0.0, + "servo.pid_position.kd": 0.0, + "servo.default_timeout_s": 0.5, + "servo.max_current_A": 10.0, + "servo.max_velocity": 100.0, + "servopos.position_min": math.nan, + "servopos.position_max": math.nan, + }, + ) - REAR_LEFT_DRIVE_MOTOR = MoteusMotorConfig(can_id=23) - MID_LEFT_DRIVE_MOTOR = MoteusMotorConfig(can_id=24) - FRONT_LEFT_DRIVE_MOTOR = MoteusMotorConfig(can_id=25) + REAR_LEFT_DRIVE_MOTOR = MoteusMotorConfig( + can_id=23, + config={ + "servo.pwm_rate_hz": 50000, + "servo.pid_position.kp": 20.0, + "servo.pid_position.ki": 0.0, + "servo.pid_position.kd": 0.0, + "servo.default_timeout_s": 0.5, + "servo.max_current_A": 10.0, + "servo.max_velocity": 100.0, + "servopos.position_min": math.nan, + "servopos.position_max": math.nan, + }, + ) + MID_LEFT_DRIVE_MOTOR = MoteusMotorConfig( + can_id=24, + config={ + "servo.pwm_rate_hz": 50000, + "servo.pid_position.kp": 20.0, + "servo.pid_position.ki": 0.0, + "servo.pid_position.kd": 0.0, + "servo.default_timeout_s": 0.5, + "servo.max_current_A": 10.0, + "servo.max_velocity": 100.0, + "servopos.position_min": math.nan, + "servopos.position_max": math.nan, + }, + ) + FRONT_LEFT_DRIVE_MOTOR = MoteusMotorConfig( + can_id=25, + config={ + "servo.pwm_rate_hz": 50000, + "servo.pid_position.kp": 20.0, + "servo.pid_position.ki": 0.0, + "servo.pid_position.kd": 0.0, + "servo.default_timeout_s": 0.5, + "servo.max_current_A": 10.0, + "servo.max_velocity": 100.0, + "servopos.position_min": math.nan, + "servopos.position_max": math.nan, + }, + ) # Arm - ARM_SHOULDER_MOTOR = MoteusMotorConfig(can_id=1) - ARM_ELBOW_MOTOR = MoteusMotorConfig(can_id=2) - ARM_LEFT_WRIST_MOTOR = MoteusMotorConfig(can_id=3) - ARM_RIGHT_WRIST_MOTOR = MoteusMotorConfig(can_id=4) - ARM_TURNTABLE_MOTOR = MoteusMotorConfig(can_id=5) + ARM_SHOULDER_MOTOR = MoteusMotorConfig( + can_id=1, + config={ + "servo.max_voltage": 56.0, + "servopos.position_min": math.nan, + "servopos.position_max": math.nan, + }, + ) + ARM_ELBOW_MOTOR = MoteusMotorConfig( + can_id=2, + config={ + "motor_position.rotor_to_output_ratio": 0.01666, + "servo.pwm_rate_hz": 60000, + "servo.pid_position.kp": 10000.0, + "servo.pid_position.ki": 0.0, + "servo.pid_position.kd": 0.0, + "servo.default_timeout_s": 1.0, + "servo.max_current_A": 6.0, + "servo.max_velocity": 0.1, + "servopos.position_min": -0.5, + "servopos.position_max": 0.0, + }, + ) + ARM_LEFT_WRIST_MOTOR = MoteusMotorConfig(can_id=3, config={}) + ARM_RIGHT_WRIST_MOTOR = MoteusMotorConfig(can_id=4, config={}) + ARM_TURNTABLE_MOTOR = MoteusMotorConfig( + can_id=5, + config={ + "motor_position.rotor_to_output_ratio": 0.030581, + "servo.pid_position.kp": 16.0, + "servo.pid_position.ki": 0.0, + "servo.pid_position.kd": 1.0, + "servo.max_current_A": 10.0, + "servo.max_velocity": 1.0, + "servopos.position_min": math.nan, + "servopos.position_max": math.nan, + }, + ) # Don't allow anyone to change this class's attributes def __setattr__(self, _: str, __: Any) -> Any: From d38efe618fbc068ba5a181b9fbe0bcf60f54f83c Mon Sep 17 00:00:00 2001 From: Vladimir kupryukhin Date: Wed, 18 Sep 2024 13:48:09 -0700 Subject: [PATCH 36/50] [launch] Make a shell script to launch, run, build, create docker images/containers --- container_launch.sh | 56 ++++++++++---------------------- kill_trickfirerobot_container.sh | 1 + 2 files changed, 19 insertions(+), 38 deletions(-) create mode 100755 kill_trickfirerobot_container.sh diff --git a/container_launch.sh b/container_launch.sh index e85c327..b2a5f5c 100755 --- a/container_launch.sh +++ b/container_launch.sh @@ -1,17 +1,7 @@ # /bin/bash -# A script file `./container_launch.sh` that handles connecting to the `trickfirerobot` Docker container. - -# You can add the following flags to the shell script: -# `-b` -> Force build the `trickfireimage`, even if it exists -# `-n` -> Force the `trickfireimage` image to be built without cache -# `-c` -> Force create the `trickfirerobot` container, even if it exists - text_helper="TRICKFIRE DOCKER LAUNCH" -trickire_container="trickfirerobot" -trickfire_image="trickfireimage" -# Colors bold=$(tput bold) BLUE='\033[0;34m' NC='\033[0m' # No Color @@ -20,7 +10,6 @@ b_flag='' # Force build docker container "-b" no_cache_flag='' # Build docker container without cache "-n" c_flag='' # Force create container "-c" -# Read the flags, if any were passed while getopts 'bnc' flag; do case "${flag}" in b) b_flag='true' ;; @@ -30,51 +19,42 @@ while getopts 'bnc' flag; do esac done -# --- Shutdown the current trickfirerobot container if it is running -if [ "$( docker container inspect -f '{{.State.Running}}' ${trickire_container} )" = "true" ]; then - echo -e "${BLUE}$(tput bold)[${text_helper}] Shutting down current \"${trickire_container}\" container${NC}" - docker container kill ${trickire_container} -fi - # --- Handle the Docker image --- # If the image does NOT exist OR we force the image to be built -if [ -z "$(docker images -q ${trickire_container}:latest 2> /dev/null)" ] || [ "$b_flag" = true ]; then - # Should we build without cache? +if [ -z "$(docker images -q trickfireimage:latest 2> /dev/null)" ] || [ "$b_flag" = true ]; then if [ "$no_cache_flag" = true ]; then - echo -e "${BLUE}$(tput bold)[${text_helper}] Building \"${trickire_container}\" without cache${NC}" - docker build --no-cache -t ${trickire_container} -f .devcontainer/Dockerfile . + echo -e "${BLUE}$(tput bold)[${text_helper}] Building trickfireimage without cache${NC}" + docker build --no-cache -t trickfireimage -f .devcontainer/Dockerfile . else - echo -e "${BLUE}$(tput bold)[${text_helper}] Building \"${trickire_container}\" with cache${NC}" - docker build -t ${trickire_container} -f .devcontainer/Dockerfile . + echo -e "${BLUE}$(tput bold)[${text_helper}] Building trickfireimage with cache${NC}" + docker build -t trickfireimage -f .devcontainer/Dockerfile . fi else - echo -e "${BLUE}$(tput bold)[${text_helper}] Image \"${trickire_container}\" exists. Skipping${NC}" + echo -e "${BLUE}$(tput bold)[${text_helper}] Image trickfireimage exists. Skipping${NC}" fi # Handle the Docker image # If the container does NOT exist OR we force the container to be built -if [ ! "$(docker ps -a -q -f name=${trickire_container})" ]; then - echo -e "${BLUE}$(tput bold)[${text_helper}] Container \"${trickire_container}\" does not exist. Creating${NC}" - docker create --mount type=bind,source="$(pwd)",target="/home/trickfire/urc-2023" --name ${trickire_container} -it --privileged --network=host --workdir /home/trickfire/urc-2023 ${trickire_container} +if [ ! "$(docker ps -a -q -f name=trickfirerobot)" ]; then + echo -e "${BLUE}$(tput bold)[${text_helper}] Container trickfirerobot does not exist. Creating${NC}" + docker create --mount type=bind,source="$(pwd)",target="/home/trickfire/urc-2023" --name trickfirerobot -i --privileged --network=host --workdir /home/trickfire/urc-2023 trickfireimage else - echo -e "${BLUE}$(tput bold)[${text_helper}] Container \"${trickire_container}\" does exist${NC}" - # Should we remake the container? + echo -e "${BLUE}$(tput bold)[${text_helper}] Container \"trickfirerobot\" does exist${NC}" if [ "$c_flag" = true ]; then - echo -e "${BLUE}$(tput bold)[${text_helper}] Container trickfire exists. Forcing removal and creation of a new \"${trickire_container}\" container${NC}" - docker container rm ${trickire_container} - docker create --mount type=bind,source="$(pwd)",target="/home/trickfire/urc-2023" --name ${trickire_container} -it --privileged --network=host --workdir /home/trickfire/urc-2023 ${trickire_container} + echo -e "${BLUE}$(tput bold)[${text_helper}] Container trickfire exists. Forcing removal and creation of a new trickfirerobot container${NC}" + docker container rm trickfirerobot + docker create --mount type=bind,source="$(pwd)",target="/home/trickfire/urc-2023" --name trickfirerobot -t --privileged --network=host --workdir /home/trickfire/urc-2023 trickfireimage fi fi -#Start the container -echo -e "${BLUE}$(tput bold)[${text_helper}] Starting \"${trickire_container}\" container${NC}" -docker container restart ${trickire_container} +#start the container +echo -e "${BLUE}$(tput bold)[${text_helper}] Starting trickfirerobot container${NC}" +docker container restart trickfirerobot -# Have the container take over the shell that executed this script -echo -e "${BLUE}$(tput bold)[${text_helper}] Connecting to \"${trickire_container}\" container${NC}" -docker exec -it ${trickire_container} /bin/bash +echo -e "${BLUE}$(tput bold)[${text_helper}] Connecting to trickfirerobot container${NC}" +docker exec -it trickfirerobot /bin/bash echo "" \ No newline at end of file diff --git a/kill_trickfirerobot_container.sh b/kill_trickfirerobot_container.sh new file mode 100755 index 0000000..bc75e72 --- /dev/null +++ b/kill_trickfirerobot_container.sh @@ -0,0 +1 @@ +docker container kill trickfirerobot \ No newline at end of file From 3a5fb1459411ffaffb2efaa06558b1fcab5cea6c Mon Sep 17 00:00:00 2001 From: Vladimir kupryukhin Date: Wed, 18 Sep 2024 14:19:06 -0700 Subject: [PATCH 37/50] [launch] added -t for tty --- container_launch.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/container_launch.sh b/container_launch.sh index b2a5f5c..051ea14 100755 --- a/container_launch.sh +++ b/container_launch.sh @@ -40,13 +40,13 @@ fi # If the container does NOT exist OR we force the container to be built if [ ! "$(docker ps -a -q -f name=trickfirerobot)" ]; then echo -e "${BLUE}$(tput bold)[${text_helper}] Container trickfirerobot does not exist. Creating${NC}" - docker create --mount type=bind,source="$(pwd)",target="/home/trickfire/urc-2023" --name trickfirerobot -i --privileged --network=host --workdir /home/trickfire/urc-2023 trickfireimage + docker create --mount type=bind,source="$(pwd)",target="/home/trickfire/urc-2023" --name trickfirerobot -it --privileged --network=host --workdir /home/trickfire/urc-2023 trickfireimage else echo -e "${BLUE}$(tput bold)[${text_helper}] Container \"trickfirerobot\" does exist${NC}" if [ "$c_flag" = true ]; then echo -e "${BLUE}$(tput bold)[${text_helper}] Container trickfire exists. Forcing removal and creation of a new trickfirerobot container${NC}" docker container rm trickfirerobot - docker create --mount type=bind,source="$(pwd)",target="/home/trickfire/urc-2023" --name trickfirerobot -t --privileged --network=host --workdir /home/trickfire/urc-2023 trickfireimage + docker create --mount type=bind,source="$(pwd)",target="/home/trickfire/urc-2023" --name trickfirerobot -it --privileged --network=host --workdir /home/trickfire/urc-2023 trickfireimage fi fi From 71b11ad13ec73c46339c2783363625177df217e0 Mon Sep 17 00:00:00 2001 From: Vladimir kupryukhin Date: Wed, 18 Sep 2024 14:30:00 -0700 Subject: [PATCH 38/50] [launch] Added some comments to container_launch.sh --- container_launch.sh | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/container_launch.sh b/container_launch.sh index 051ea14..e844ef5 100755 --- a/container_launch.sh +++ b/container_launch.sh @@ -1,7 +1,15 @@ # /bin/bash +# A script file `./container_launch.sh` that handles connecting to the `trickfirerobot` Docker container. + +# You can add the following flags to the shell script: +# `-b` -> Force build the `trickfireimage`, even if it exists +# `-n` -> Force the `trickfireimage` image to be built without cache +# `-c` -> Force create the `trickfirerobot` container, even if it exists + text_helper="TRICKFIRE DOCKER LAUNCH" +# Colors bold=$(tput bold) BLUE='\033[0;34m' NC='\033[0m' # No Color @@ -10,6 +18,7 @@ b_flag='' # Force build docker container "-b" no_cache_flag='' # Build docker container without cache "-n" c_flag='' # Force create container "-c" +# Read the flags, if any were passed while getopts 'bnc' flag; do case "${flag}" in b) b_flag='true' ;; @@ -23,6 +32,7 @@ done # If the image does NOT exist OR we force the image to be built if [ -z "$(docker images -q trickfireimage:latest 2> /dev/null)" ] || [ "$b_flag" = true ]; then + # Should we build without cache? if [ "$no_cache_flag" = true ]; then echo -e "${BLUE}$(tput bold)[${text_helper}] Building trickfireimage without cache${NC}" docker build --no-cache -t trickfireimage -f .devcontainer/Dockerfile . @@ -43,6 +53,7 @@ if [ ! "$(docker ps -a -q -f name=trickfirerobot)" ]; then docker create --mount type=bind,source="$(pwd)",target="/home/trickfire/urc-2023" --name trickfirerobot -it --privileged --network=host --workdir /home/trickfire/urc-2023 trickfireimage else echo -e "${BLUE}$(tput bold)[${text_helper}] Container \"trickfirerobot\" does exist${NC}" + # Should we remake the container? if [ "$c_flag" = true ]; then echo -e "${BLUE}$(tput bold)[${text_helper}] Container trickfire exists. Forcing removal and creation of a new trickfirerobot container${NC}" docker container rm trickfirerobot @@ -51,10 +62,11 @@ else fi fi -#start the container +#Start the container echo -e "${BLUE}$(tput bold)[${text_helper}] Starting trickfirerobot container${NC}" docker container restart trickfirerobot +# Have the container take over the shell that executed this script echo -e "${BLUE}$(tput bold)[${text_helper}] Connecting to trickfirerobot container${NC}" docker exec -it trickfirerobot /bin/bash echo "" \ No newline at end of file From e8ede72cb175a9604f3c3345a7ba602838321d58 Mon Sep 17 00:00:00 2001 From: Vladimir kupryukhin Date: Wed, 18 Sep 2024 14:37:48 -0700 Subject: [PATCH 39/50] Automatically stop the old container from running --- container_launch.sh | 42 +++++++++++++++++++------------- kill_trickfirerobot_container.sh | 1 - 2 files changed, 25 insertions(+), 18 deletions(-) delete mode 100755 kill_trickfirerobot_container.sh diff --git a/container_launch.sh b/container_launch.sh index e844ef5..e85c327 100755 --- a/container_launch.sh +++ b/container_launch.sh @@ -8,6 +8,8 @@ # `-c` -> Force create the `trickfirerobot` container, even if it exists text_helper="TRICKFIRE DOCKER LAUNCH" +trickire_container="trickfirerobot" +trickfire_image="trickfireimage" # Colors bold=$(tput bold) @@ -28,45 +30,51 @@ while getopts 'bnc' flag; do esac done +# --- Shutdown the current trickfirerobot container if it is running +if [ "$( docker container inspect -f '{{.State.Running}}' ${trickire_container} )" = "true" ]; then + echo -e "${BLUE}$(tput bold)[${text_helper}] Shutting down current \"${trickire_container}\" container${NC}" + docker container kill ${trickire_container} +fi + # --- Handle the Docker image --- # If the image does NOT exist OR we force the image to be built -if [ -z "$(docker images -q trickfireimage:latest 2> /dev/null)" ] || [ "$b_flag" = true ]; then +if [ -z "$(docker images -q ${trickire_container}:latest 2> /dev/null)" ] || [ "$b_flag" = true ]; then # Should we build without cache? if [ "$no_cache_flag" = true ]; then - echo -e "${BLUE}$(tput bold)[${text_helper}] Building trickfireimage without cache${NC}" - docker build --no-cache -t trickfireimage -f .devcontainer/Dockerfile . + echo -e "${BLUE}$(tput bold)[${text_helper}] Building \"${trickire_container}\" without cache${NC}" + docker build --no-cache -t ${trickire_container} -f .devcontainer/Dockerfile . else - echo -e "${BLUE}$(tput bold)[${text_helper}] Building trickfireimage with cache${NC}" - docker build -t trickfireimage -f .devcontainer/Dockerfile . + echo -e "${BLUE}$(tput bold)[${text_helper}] Building \"${trickire_container}\" with cache${NC}" + docker build -t ${trickire_container} -f .devcontainer/Dockerfile . fi else - echo -e "${BLUE}$(tput bold)[${text_helper}] Image trickfireimage exists. Skipping${NC}" + echo -e "${BLUE}$(tput bold)[${text_helper}] Image \"${trickire_container}\" exists. Skipping${NC}" fi # Handle the Docker image # If the container does NOT exist OR we force the container to be built -if [ ! "$(docker ps -a -q -f name=trickfirerobot)" ]; then - echo -e "${BLUE}$(tput bold)[${text_helper}] Container trickfirerobot does not exist. Creating${NC}" - docker create --mount type=bind,source="$(pwd)",target="/home/trickfire/urc-2023" --name trickfirerobot -it --privileged --network=host --workdir /home/trickfire/urc-2023 trickfireimage +if [ ! "$(docker ps -a -q -f name=${trickire_container})" ]; then + echo -e "${BLUE}$(tput bold)[${text_helper}] Container \"${trickire_container}\" does not exist. Creating${NC}" + docker create --mount type=bind,source="$(pwd)",target="/home/trickfire/urc-2023" --name ${trickire_container} -it --privileged --network=host --workdir /home/trickfire/urc-2023 ${trickire_container} else - echo -e "${BLUE}$(tput bold)[${text_helper}] Container \"trickfirerobot\" does exist${NC}" + echo -e "${BLUE}$(tput bold)[${text_helper}] Container \"${trickire_container}\" does exist${NC}" # Should we remake the container? if [ "$c_flag" = true ]; then - echo -e "${BLUE}$(tput bold)[${text_helper}] Container trickfire exists. Forcing removal and creation of a new trickfirerobot container${NC}" - docker container rm trickfirerobot - docker create --mount type=bind,source="$(pwd)",target="/home/trickfire/urc-2023" --name trickfirerobot -it --privileged --network=host --workdir /home/trickfire/urc-2023 trickfireimage + echo -e "${BLUE}$(tput bold)[${text_helper}] Container trickfire exists. Forcing removal and creation of a new \"${trickire_container}\" container${NC}" + docker container rm ${trickire_container} + docker create --mount type=bind,source="$(pwd)",target="/home/trickfire/urc-2023" --name ${trickire_container} -it --privileged --network=host --workdir /home/trickfire/urc-2023 ${trickire_container} fi fi #Start the container -echo -e "${BLUE}$(tput bold)[${text_helper}] Starting trickfirerobot container${NC}" -docker container restart trickfirerobot +echo -e "${BLUE}$(tput bold)[${text_helper}] Starting \"${trickire_container}\" container${NC}" +docker container restart ${trickire_container} # Have the container take over the shell that executed this script -echo -e "${BLUE}$(tput bold)[${text_helper}] Connecting to trickfirerobot container${NC}" -docker exec -it trickfirerobot /bin/bash +echo -e "${BLUE}$(tput bold)[${text_helper}] Connecting to \"${trickire_container}\" container${NC}" +docker exec -it ${trickire_container} /bin/bash echo "" \ No newline at end of file diff --git a/kill_trickfirerobot_container.sh b/kill_trickfirerobot_container.sh deleted file mode 100755 index bc75e72..0000000 --- a/kill_trickfirerobot_container.sh +++ /dev/null @@ -1 +0,0 @@ -docker container kill trickfirerobot \ No newline at end of file From 67610f40035638c56acb8b810904c642d87b1b03 Mon Sep 17 00:00:00 2001 From: Vladimir Kupryukhin <45701631+VladimirKupryukhin@users.noreply.github.com> Date: Wed, 18 Sep 2024 17:19:46 -0700 Subject: [PATCH 40/50] Adds an Example Node as well as Some Additional Documentation (#63) * [example/docs] Remade coder_overview.md * [example/docs] Added basic example node that has hello world in it * Added example node with timer, pub, sub * Spelling fixes for docs * Removed example_node from the node launch array * [example/docs] Small .md formatting changes and sentence restructure * [example/lib] Update main README.md * Formatted the example.py * [example/docs] add building and testing docs --------- Co-authored-by: loukylor --- src/example_node/package.xml | 18 +++++++++++++++++ src/example_node/setup.py | 24 +++++++++++++++++++++++ src/example_node/test/test_copyright.py | 25 ++++++++++++++++++++++++ src/viator_launch/launch/robot.launch.py | 6 +++++- src/viator_launch/package.xml | 1 - 5 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 src/example_node/package.xml create mode 100644 src/example_node/setup.py create mode 100644 src/example_node/test/test_copyright.py diff --git a/src/example_node/package.xml b/src/example_node/package.xml new file mode 100644 index 0000000..ff37b33 --- /dev/null +++ b/src/example_node/package.xml @@ -0,0 +1,18 @@ + + + + example_node + 0.0.0 + TODO: Package description + trickfire + TODO: License declaration + + ament_copyright + ament_flake8 + ament_pep257 + python3-pytest + + + ament_python + + diff --git a/src/example_node/setup.py b/src/example_node/setup.py new file mode 100644 index 0000000..571f53b --- /dev/null +++ b/src/example_node/setup.py @@ -0,0 +1,24 @@ +from setuptools import find_packages, setup + +package_name = 'example_node' + +setup( + name=package_name, + version='0.0.0', + packages=find_packages(exclude=['test']), + data_files=[ + ('share/ament_index/resource_index/packages', + ['resource/' + package_name]), + ('share/' + package_name, ['package.xml']), + ], + install_requires=['setuptools'], + zip_safe=True, + maintainer='trickfire', + maintainer_email='vladimirkupryukhin@gmail.com', + description='TODO: Package description', + license='TODO: License declaration', + tests_require=['pytest'], + entry_points={ + 'console_scripts': ["myExampleNode = example_node.example:main"], + }, +) diff --git a/src/example_node/test/test_copyright.py b/src/example_node/test/test_copyright.py new file mode 100644 index 0000000..97a3919 --- /dev/null +++ b/src/example_node/test/test_copyright.py @@ -0,0 +1,25 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_copyright.main import main +import pytest + + +# Remove the `skip` decorator once the source file(s) have a copyright header +@pytest.mark.skip(reason='No copyright header has been placed in the generated source file.') +@pytest.mark.copyright +@pytest.mark.linter +def test_copyright(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found errors' diff --git a/src/viator_launch/launch/robot.launch.py b/src/viator_launch/launch/robot.launch.py index 76070c9..28c938b 100644 --- a/src/viator_launch/launch/robot.launch.py +++ b/src/viator_launch/launch/robot.launch.py @@ -18,8 +18,12 @@ arm_node = Node(package="arm", executable="arm", name="arm_node") +# This is the example node. It will show ROS timers, subscribers, and publishers +# To include it in the startup, add it to the array in the generate_launch_description() method +example_node = Node(package="example_node", executable="myExampleNode", name="my_example_node") + def generate_launch_description() -> launch.LaunchDescription: # pylint: disable=invalid-name return launch.LaunchDescription( - [can_moteus_node, drivebase_node, mission_control_updater_node, arm_node] + [can_moteus_node, drivebase_node, mission_control_updater_node, arm_node, example_node] ) diff --git a/src/viator_launch/package.xml b/src/viator_launch/package.xml index 7f08692..58a78d9 100644 --- a/src/viator_launch/package.xml +++ b/src/viator_launch/package.xml @@ -11,7 +11,6 @@ ros2launch mission_control_updater arm - camera example_node From 75d032e7e60c31b8e99e553f7fce3ca3b692adff Mon Sep 17 00:00:00 2001 From: Kyler Li <46853114+loukylor@users.noreply.github.com> Date: Wed, 18 Sep 2024 22:25:04 -0700 Subject: [PATCH 41/50] [doc/example] remove example node from viator lauch (#65) --- src/viator_launch/launch/robot.launch.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/viator_launch/launch/robot.launch.py b/src/viator_launch/launch/robot.launch.py index 28c938b..7bb35d8 100644 --- a/src/viator_launch/launch/robot.launch.py +++ b/src/viator_launch/launch/robot.launch.py @@ -25,5 +25,5 @@ def generate_launch_description() -> launch.LaunchDescription: # pylint: disable=invalid-name return launch.LaunchDescription( - [can_moteus_node, drivebase_node, mission_control_updater_node, arm_node, example_node] + [can_moteus_node, drivebase_node, mission_control_updater_node, arm_node] ) From 0b5094f2673aa6cd240542d4237aeff7fb333587 Mon Sep 17 00:00:00 2001 From: dkim03 Date: Tue, 22 Oct 2024 12:33:39 -0700 Subject: [PATCH 42/50] Hong/heartbeat (#70) * heartbeat: finished heartbeat code [untested] * heartbeat: remove unnecessary file * heartbeat: change initialization wait time from 3s to 10s * heartbeat: tested [on 10/1] --- .vscode/settings.json | 19 +++ src/camera/test/test_copyright.py | 25 ++++ src/heartbeat/heartbeat/__init__.py | 0 src/heartbeat/heartbeat/heartbeat.py | 145 +++++++++++++++++++++++ src/heartbeat/resource/heartbeat | 0 src/heartbeat/setup.cfg | 4 + src/heartbeat/test/test_copyright.py | 29 +++++ src/viator_launch/launch/robot.launch.py | 7 +- src/viator_launch/package.xml | 1 + 9 files changed, 229 insertions(+), 1 deletion(-) create mode 100644 src/camera/test/test_copyright.py create mode 100644 src/heartbeat/heartbeat/__init__.py create mode 100644 src/heartbeat/heartbeat/heartbeat.py create mode 100644 src/heartbeat/resource/heartbeat create mode 100644 src/heartbeat/setup.cfg create mode 100644 src/heartbeat/test/test_copyright.py diff --git a/.vscode/settings.json b/.vscode/settings.json index b077611..01093dc 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,11 +4,18 @@ "./src", // Add type checking to srv files and msg files "/home/trickfire/urc-2023/install/custom_interfaces/local/lib/python3.10/dist-packages" + "/opt/ros/humble/lib/python3.10/site-packages", + "./src", + // Add type checking to srv files and msg files + "/home/trickfire/urc-2023/install/custom_interfaces/local/lib/python3.10/dist-packages" ], "python.analysis.extraPaths": [ "/opt/ros/humble/lib/python3.10/site-packages", "./src", "/home/trickfire/urc-2023/install/custom_interfaces/local/lib/python3.10/dist-packages" + "/opt/ros/humble/lib/python3.10/site-packages", + "./src", + "/home/trickfire/urc-2023/install/custom_interfaces/local/lib/python3.10/dist-packages" ], "python.defaultInterpreterPath": "python3", "pylint.args": [ @@ -22,6 +29,18 @@ "editor.formatOnSave": true }, "black-formatter.args": ["-l", "100"], + "python.defaultInterpreterPath": "python3", + "pylint.args": [ + "--rcfile=.pylintrc" + ], + "editor.codeActionsOnSave": { + "source.organizeImports": "explicit" + }, + "[python]": { + "editor.defaultFormatter": "ms-python.black-formatter", + "editor.formatOnSave": true + }, + "black-formatter.args": ["-l", "100"], "cmake.configureOnOpen": false, "cmake.sourceDirectory": "${workspaceFolder}/src/hello_world", "files.associations": { diff --git a/src/camera/test/test_copyright.py b/src/camera/test/test_copyright.py new file mode 100644 index 0000000..97a3919 --- /dev/null +++ b/src/camera/test/test_copyright.py @@ -0,0 +1,25 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_copyright.main import main +import pytest + + +# Remove the `skip` decorator once the source file(s) have a copyright header +@pytest.mark.skip(reason='No copyright header has been placed in the generated source file.') +@pytest.mark.copyright +@pytest.mark.linter +def test_copyright(): + rc = main(argv=['.', 'test']) + assert rc == 0, 'Found errors' diff --git a/src/heartbeat/heartbeat/__init__.py b/src/heartbeat/heartbeat/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/heartbeat/heartbeat/heartbeat.py b/src/heartbeat/heartbeat/heartbeat.py new file mode 100644 index 0000000..fec2511 --- /dev/null +++ b/src/heartbeat/heartbeat/heartbeat.py @@ -0,0 +1,145 @@ +#!/usr/bin/env python3 + +import rclpy +from rclpy.node import Node +from std_msgs.msg import Bool +import time + +import sys +sys.path.append("/home/trickfire/urc-2023/src") + +from lib.color_codes import ColorCodes, colorStr + +from lib.interface.robot_interface import RobotInterface +from lib.interface.robot_info import RobotInfo +from lib import configs + +# Credit: Most of this code is credit to Anna. I (Hong) just +# add some finishing code and clean up the class. + +class Heartbeat(Node): + """ + The Heartbeat is responsible to check the connection status + of the rover and shut down all motors if the connection is lost. + + Args: + Node (Node): ROS Node + """ + + def __init__(self): + """ + Initialize the heartbeat node and provides it with a timer + to keep track of the connection status of the rover. + """ + + # initialize heartbeat node + super().__init__("heartbeat_node") + + # print node name [debug purpose] + self.get_logger().info(colorStr("Launching heartbeat_node", ColorCodes.BLUE_OK)) + + # robot interface: send data + # robot info: retrieve data + # self._robot_info = RobotInfo(self) + self._robot_interface = RobotInterface(self) + + # give enough time (10s) for others to initialize + time.sleep(10) + + # flag to store connection status + self._connection_lost = False + + # create subscription to mission control + self._is_alive_subscriber = self.create_subscription( + Bool, # message type (might change later) + "/heartbeat", # topic name + self.heartbeat_callback, # callback function + 10 # Quality of Service (QoS) profile + ) + + # store the most recent hearbeat time + self._last_heartbeat_time = time.time() + + # check connection every 1 second + self._timer = self.create_timer(1.0, self.check_connection) + + + + def heartbeat_callback(self, msg): + """ + A call back method for the heartbeat everytime the + mission control publish a message indicating that the + connection is still active. + + Args: + msg (Bool): a ROS message type retrieved from the + publisher that indicates the connection + status. + """ + + # self.get_logger().info("heartbeat call back") + + # Update the timestamp of the last received heartbeat message + self._last_heartbeat_time = time.time() + + # Log connection active as before + # doesn't matter the data, pub always pub True + # just check to make sure nothing is wrong with pub + if msg.data == True: + self.get_logger().info(colorStr("Connection active", ColorCodes.GREEN_OK)) + self._connection_lost = False + + + def check_connection(self): + """ + A method for checking the connection status. If the heartbeat + does not receive a message within 1s, meaning the connection was + lost, then it will shut down all motors. + """ + + # Check if the last heartbeat was received more than a threshold ago + if time.time() - self._last_heartbeat_time > 2: # threshold = 2 seconds + # if already shut down motor, don't have to do this again + if self._connection_lost: + return + + self.get_logger().warning(colorStr("Connection lost", ColorCodes.WARNING_YELLOW)) + self._connection_lost = True + + # call the robot interface to stop all motors + self._stop_all_motors() + + + # *************** + # Private helper method + # *************** + def _stop_all_motors(self): + """ + Get all motors from the motor configs file and stop all of them. + """ + + # get all the motors from configs.py + all_motors = configs.MotorConfigs.getAllMotors() + + # loop through each motor and stop it via the robot interface + for motor in all_motors: + self._robot_interface.stopMotor(motor) + + # debug message + self.get_logger().info(colorStr("Stop motor can id" + str(motor.can_id), ColorCodes.FAIL_RED)) + + + # finish [debug message] + self.get_logger().info(colorStr("Stop all motors!", ColorCodes.FAIL_RED)) + + +def main(args=None): + rclpy.init(args=args) + heartbeat_node = Heartbeat() + rclpy.spin(heartbeat_node) + + heartbeat_node.destroy_node() + rclpy.shutdown() + +if __name__ == '__main__': + Heartbeat.main() \ No newline at end of file diff --git a/src/heartbeat/resource/heartbeat b/src/heartbeat/resource/heartbeat new file mode 100644 index 0000000..e69de29 diff --git a/src/heartbeat/setup.cfg b/src/heartbeat/setup.cfg new file mode 100644 index 0000000..3a78b4d --- /dev/null +++ b/src/heartbeat/setup.cfg @@ -0,0 +1,4 @@ +[develop] +script_dir=$base/lib/heartbeat +[install] +install_scripts=$base/lib/heartbeat diff --git a/src/heartbeat/test/test_copyright.py b/src/heartbeat/test/test_copyright.py new file mode 100644 index 0000000..03df111 --- /dev/null +++ b/src/heartbeat/test/test_copyright.py @@ -0,0 +1,29 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ament_copyright.main import main +import pytest + + +# Remove the `skip` decorator once the source file(s) have a copyright header +<<<<<<<< HEAD:src/heartbeat/test/test_copyright.py +@pytest.mark.skip(reason='No copyright header has been placed in the generated source file.') +======== +@pytest.mark.skip(reason="No copyright header has been placed in the generated source file.") +>>>>>>>> 0153dc0 (rebase + updated roscamera.py with on, off functionality instead of toggle and added better documentation, fixed formatting):src/mission_control_updater/test/test_copyright.py +@pytest.mark.copyright +@pytest.mark.linter +def test_copyright(): + rc = main(argv=[".", "test"]) + assert rc == 0, "Found errors" diff --git a/src/viator_launch/launch/robot.launch.py b/src/viator_launch/launch/robot.launch.py index 7bb35d8..81f9913 100644 --- a/src/viator_launch/launch/robot.launch.py +++ b/src/viator_launch/launch/robot.launch.py @@ -18,6 +18,11 @@ arm_node = Node(package="arm", executable="arm", name="arm_node") +camera_node = Node(package="camera", executable="roscamera", name="camera_node") + +# This is the example node. It will show ROS timers, subscribers, and publishers +# To include it in the startup, add it to the array in the generate_launch_description() method +example_node = Node(package="example_node", executable="myExampleNode", name="my_example_node") # This is the example node. It will show ROS timers, subscribers, and publishers # To include it in the startup, add it to the array in the generate_launch_description() method example_node = Node(package="example_node", executable="myExampleNode", name="my_example_node") @@ -25,5 +30,5 @@ def generate_launch_description() -> launch.LaunchDescription: # pylint: disable=invalid-name return launch.LaunchDescription( - [can_moteus_node, drivebase_node, mission_control_updater_node, arm_node] + [can_moteus_node, drivebase_node, mission_control_updater_node, arm_node, camera_node] ) diff --git a/src/viator_launch/package.xml b/src/viator_launch/package.xml index 58a78d9..7f08692 100644 --- a/src/viator_launch/package.xml +++ b/src/viator_launch/package.xml @@ -11,6 +11,7 @@ ros2launch mission_control_updater arm + camera example_node From 8548751cb469459527de7e8744a8b12b20c02ba8 Mon Sep 17 00:00:00 2001 From: David Kim Date: Fri, 25 Oct 2024 13:16:03 -0700 Subject: [PATCH 43/50] added the missing Docker modules in the Dockerfile for OpenCV and cv_bridge --- .devcontainer/Dockerfile | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 6fe2b1c..0502240 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -15,15 +15,24 @@ RUN apt-get update && apt-get install -y \ can-utils \ iproute2 \ kmod \ + # Used for cv_bridge + python3-numpy \ + libboost-python-dev \ + # OpenCV + libopencv-dev \ + python3-opencv \ # Clean out the apt lists after `apt-get update` && rm -rf /var/lib/apt/lists/* -#Install moteus python library https://github.com/mjbots/moteus/tree/main/lib/python +# Install moteus python library https://github.com/mjbots/moteus/tree/main/lib/python RUN pip3 install moteus RUN pip3 install pyusb +# Install OpenCV for python +RUN pip3 install opencv-python + # Update pydocstyle to remove a deprecation warning when testing for PEP257 RUN pip install --upgrade pydocstyle From 6c78982e53986977f0ceafc8cd4a8b99a331cf47 Mon Sep 17 00:00:00 2001 From: TrickFire Robotics Date: Mon, 25 Nov 2024 15:17:39 -0800 Subject: [PATCH 44/50] Final Luncheon code --- src/arm/arm/individual_control_vel.py | 2 +- src/camera/camera/roscamera.py | 2 +- src/camera/camera/roscamera.py.save | 162 ++++++++++++++++++++++++++ src/lib/configs.py | 8 +- 4 files changed, 170 insertions(+), 4 deletions(-) create mode 100644 src/camera/camera/roscamera.py.save diff --git a/src/arm/arm/individual_control_vel.py b/src/arm/arm/individual_control_vel.py index dfefb52..83c8ce3 100644 --- a/src/arm/arm/individual_control_vel.py +++ b/src/arm/arm/individual_control_vel.py @@ -176,7 +176,7 @@ def turntableCW(self, msg: Float32) -> None: if data > 0: self._ros_node.get_logger().info("Turntable clock wise") - self.bot_interface.runMotorSpeed(MotorConfigs.ARM_TURNTABLE_MOTOR, self.VEL) + self.bot_interface.runMotorSpeed(MotorConfigs.ARM_TURNTABLE_MOTOR, self.VEL * 0.5) else: self._ros_node.get_logger().info("Turntable STOP") diff --git a/src/camera/camera/roscamera.py b/src/camera/camera/roscamera.py index a6de338..f814d68 100644 --- a/src/camera/camera/roscamera.py +++ b/src/camera/camera/roscamera.py @@ -57,7 +57,7 @@ def __init__(self, topicName: str, camera: int): # We will publish a message every 0.1 seconds # timer_period = 0.1 # seconds - timer_period = 2 # seconds + timer_period = 0.1 # seconds # Create the timer self.timer = self.create_timer(timer_period, self.publishCameraFrame) diff --git a/src/camera/camera/roscamera.py.save b/src/camera/camera/roscamera.py.save new file mode 100644 index 0000000..f82abf4 --- /dev/null +++ b/src/camera/camera/roscamera.py.save @@ -0,0 +1,162 @@ +from pathlib import Path + +import cv2 # OpenCV library +import rclpy # Python Client Library for ROS 2 +from cv_bridge import CvBridge # Package to convert between ROS and OpenCV Images +from rclpy.executors import MultiThreadedExecutor +from rclpy.node import Node # Handles the creation of nodes +from sensor_msgs.msg import CompressedImage # Image is the message type +from std_msgs.msg import String + +""" +Function returns a list of working camera IDs to capture every camera connected to the robot +""" + + +def getCameras() -> list[int]: + nonWorkingPorts = 0 + devPort = 0 + workingPorts = [] + + while nonWorkingPorts < 6: + camera = cv2.VideoCapture(devPort) + if not camera.isOpened(): + nonWorkingPorts += 1 + else: + isReading, img = camera.read() + _ = camera.get(3) + _ = camera.get(4) + if isReading: + workingPorts.append(devPort) + + devPort += 1 + + return workingPorts + + +class RosCamera(Node): + + def __init__(self, topicName: str, camera: int): + super().__init__("ros_camera") + self.get_logger().info("Launching ros_camera node") + + # Create the publisher. This publisher will publish an Image + # to the video_frames topic. The queue size is 10 messages. + self._publisher = self.create_publisher(CompressedImage, topicName, 10) + self.get_logger().info("Created Publisher " + topicName) + + # Create a subscription to read 'camera_control' topic from + # mission control. Topic messages are Strings. + # ex. topic message: "0 off", "0 on" + # The topic message should always have the corresponding camera number + # at the first index of each message. + subTopicName = "camera_control" + self.subscription = self.create_subscription(String, subTopicName, self.setCameraState, 10) + self.subscription + self.get_logger().info("Created Subscription to" + subTopicName) + + # We will publish a message every 0.1 seconds + # timer_period = 0.1 # seconds + timer_period = 0.1 + # seconds + + # Create the timer + self.timer = self.create_timer(timer_period, self.publishCameraFrame) + + # Create a VideoCapture object + # The argument '0' gets the default webcam. + self.cap = cv2.VideoCapture(camera) + self.get_logger().info( + "Using video ID: " + str(camera) + ", ON: " + str(self.cap.isOpened()) + ) + + # Used to convert between ROS and OpenCV images + self.br = CvBridge() + + # Declare parameters for each 'ros_camera' node thread + self.declare_parameter("cameraNumber", camera) + self.declare_parameter("isOn", True) + + """ + Callback function publishes a frame captured from a camera to /video_framesX (X is specific + camera ID) every 0.1 seconds + """ + + def publishCameraFrame(self): + # Capture frame-by-frame + # This method returns True/False as well as the video frame. + ret, frame = self.cap.read() + + # Get bool parameter, isOn, and check the state of the camera to publish frame or not + # Value of isOn is controlled by setCameraState() + isOn = bool(self.get_parameter("isOn")._value) + if ret and isOn: + # Publish the image. + self._publisher.publish(self.br.cv2_to_compressed_imgmsg(frame)) + + """ + Function reads str msgs from topic, 'camera_control' (published by mission control), and + turns on/off the periodic publishing of frames by a certain camera + + Function is called whenever a msg is published to 'camera_control' + + Function assumes str msgs sent to 'camera_control' begin with a number and ends with an 'f' + (meaning off) or 'n' (meaning on) + ex. + "0 off" -> to turn off camera with id=0 + "2 on" -> to turn on camera with id=2 + """ + + def setCameraState(self, msg) -> None: + # Check if this specific camera is targeted by mission control, stop the function otherwise + cameraNumber = int(self.get_parameter("cameraNumber")._value) + if int(msg.data[0]) != cameraNumber: + return + + # Check if the desired camera state is already fulfilled, print and stop the function if so + cameraOn = bool(self.get_parameter("isOn")._value) + if str(msg.data[-1]) == "f" and not cameraOn: + self.get_logger().info("camera" + str(cameraNumber) + " is already off!") + return + elif str(msg.data[-1]) == "n" and cameraOn: + self.get_logger().info("camera" + str(cameraNumber) + " is already on!") + return + + # Set isOn bool parameter to either stop or restart the publishing of frames + self.undeclare_parameter("isOn") + if str(msg.data[-1]) == "f": + # self.get_logger().info("turning camera" + str(cameraNumber) + " off!") + self.declare_parameter("isOn", False) + else: + # self.get_logger().info("turning camera" + str(cameraNumber) + " on!") + self.declare_parameter("isOn", True) + + +def main(args=None): + rclpy.init(args=args) + try: + # We need an executor because running .spin() is a blocking function. + # using the MultiThreadedExecutor, we can control multiple nodes + executor = MultiThreadedExecutor() + nodes = [] + cameraNum = 0 + + for cameraID in getCameras(): + node = RosCamera("video_frames" + str(cameraNum), cameraID) + nodes.append(node) + executor.add_node(node) + cameraNum += 1 + + try: + executor.spin() + finally: + executor.shutdown() + for node in nodes: + node.destroy_node() + + finally: + rclpy.shutdown() + + +if __name__ == "__main__": + main() diff --git a/src/lib/configs.py b/src/lib/configs.py index 77a6dce..b0a34a3 100644 --- a/src/lib/configs.py +++ b/src/lib/configs.py @@ -142,6 +142,7 @@ class MotorConfigs: "servo.max_voltage": 56.0, "servopos.position_min": math.nan, "servopos.position_max": math.nan, + "servo.default_timeout_s": 0.5, }, ) ARM_ELBOW_MOTOR = MoteusMotorConfig( @@ -159,13 +160,16 @@ class MotorConfigs: "servopos.position_max": 0.0, }, ) - ARM_LEFT_WRIST_MOTOR = MoteusMotorConfig(can_id=3, config={}) + ARM_LEFT_WRIST_MOTOR = MoteusMotorConfig(can_id=3, config={ + "servopos.position_min": math.nan, + "servopos.position_max": math.nan, + }) ARM_RIGHT_WRIST_MOTOR = MoteusMotorConfig(can_id=4, config={}) ARM_TURNTABLE_MOTOR = MoteusMotorConfig( can_id=5, config={ "motor_position.rotor_to_output_ratio": 0.030581, - "servo.pid_position.kp": 16.0, + "servo.pid_position.kp": 1000.0, "servo.pid_position.ki": 0.0, "servo.pid_position.kd": 1.0, "servo.max_current_A": 10.0, From 9cf64e8a37cd2d9d0d8c51822d46dac7e3cdaf33 Mon Sep 17 00:00:00 2001 From: uellenberg Date: Fri, 10 Jan 2025 18:21:41 -0800 Subject: [PATCH 45/50] Cleanup --- .devcontainer/devcontainer.json | 2 +- src/arm/arm/individual_control_vel.py | 2 +- src/camera/camera/roscamera.py.save | 162 -------------------------- src/lib/configs.py | 8 +- 4 files changed, 4 insertions(+), 170 deletions(-) delete mode 100644 src/camera/camera/roscamera.py.save diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 035ae15..f2069ab 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -7,7 +7,7 @@ "workspaceFolder": "/home/trickfire/${localWorkspaceFolderBasename}", "runArgs": [ "--cap-add=SYS_PTRACE", - //"--device=/dev/ttyUSB0", + "--device=/dev/video0", "--security-opt", "seccomp=unconfined" ], "customizations": { diff --git a/src/arm/arm/individual_control_vel.py b/src/arm/arm/individual_control_vel.py index 83c8ce3..dfefb52 100644 --- a/src/arm/arm/individual_control_vel.py +++ b/src/arm/arm/individual_control_vel.py @@ -176,7 +176,7 @@ def turntableCW(self, msg: Float32) -> None: if data > 0: self._ros_node.get_logger().info("Turntable clock wise") - self.bot_interface.runMotorSpeed(MotorConfigs.ARM_TURNTABLE_MOTOR, self.VEL * 0.5) + self.bot_interface.runMotorSpeed(MotorConfigs.ARM_TURNTABLE_MOTOR, self.VEL) else: self._ros_node.get_logger().info("Turntable STOP") diff --git a/src/camera/camera/roscamera.py.save b/src/camera/camera/roscamera.py.save deleted file mode 100644 index f82abf4..0000000 --- a/src/camera/camera/roscamera.py.save +++ /dev/null @@ -1,162 +0,0 @@ -from pathlib import Path - -import cv2 # OpenCV library -import rclpy # Python Client Library for ROS 2 -from cv_bridge import CvBridge # Package to convert between ROS and OpenCV Images -from rclpy.executors import MultiThreadedExecutor -from rclpy.node import Node # Handles the creation of nodes -from sensor_msgs.msg import CompressedImage # Image is the message type -from std_msgs.msg import String - -""" -Function returns a list of working camera IDs to capture every camera connected to the robot -""" - - -def getCameras() -> list[int]: - nonWorkingPorts = 0 - devPort = 0 - workingPorts = [] - - while nonWorkingPorts < 6: - camera = cv2.VideoCapture(devPort) - if not camera.isOpened(): - nonWorkingPorts += 1 - else: - isReading, img = camera.read() - _ = camera.get(3) - _ = camera.get(4) - if isReading: - workingPorts.append(devPort) - - devPort += 1 - - return workingPorts - - -class RosCamera(Node): - - def __init__(self, topicName: str, camera: int): - super().__init__("ros_camera") - self.get_logger().info("Launching ros_camera node") - - # Create the publisher. This publisher will publish an Image - # to the video_frames topic. The queue size is 10 messages. - self._publisher = self.create_publisher(CompressedImage, topicName, 10) - self.get_logger().info("Created Publisher " + topicName) - - # Create a subscription to read 'camera_control' topic from - # mission control. Topic messages are Strings. - # ex. topic message: "0 off", "0 on" - # The topic message should always have the corresponding camera number - # at the first index of each message. - subTopicName = "camera_control" - self.subscription = self.create_subscription(String, subTopicName, self.setCameraState, 10) - self.subscription - self.get_logger().info("Created Subscription to" + subTopicName) - - # We will publish a message every 0.1 seconds - # timer_period = 0.1 # seconds - timer_period = 0.1 - # seconds - - # Create the timer - self.timer = self.create_timer(timer_period, self.publishCameraFrame) - - # Create a VideoCapture object - # The argument '0' gets the default webcam. - self.cap = cv2.VideoCapture(camera) - self.get_logger().info( - "Using video ID: " + str(camera) + ", ON: " + str(self.cap.isOpened()) - ) - - # Used to convert between ROS and OpenCV images - self.br = CvBridge() - - # Declare parameters for each 'ros_camera' node thread - self.declare_parameter("cameraNumber", camera) - self.declare_parameter("isOn", True) - - """ - Callback function publishes a frame captured from a camera to /video_framesX (X is specific - camera ID) every 0.1 seconds - """ - - def publishCameraFrame(self): - # Capture frame-by-frame - # This method returns True/False as well as the video frame. - ret, frame = self.cap.read() - - # Get bool parameter, isOn, and check the state of the camera to publish frame or not - # Value of isOn is controlled by setCameraState() - isOn = bool(self.get_parameter("isOn")._value) - if ret and isOn: - # Publish the image. - self._publisher.publish(self.br.cv2_to_compressed_imgmsg(frame)) - - """ - Function reads str msgs from topic, 'camera_control' (published by mission control), and - turns on/off the periodic publishing of frames by a certain camera - - Function is called whenever a msg is published to 'camera_control' - - Function assumes str msgs sent to 'camera_control' begin with a number and ends with an 'f' - (meaning off) or 'n' (meaning on) - ex. - "0 off" -> to turn off camera with id=0 - "2 on" -> to turn on camera with id=2 - """ - - def setCameraState(self, msg) -> None: - # Check if this specific camera is targeted by mission control, stop the function otherwise - cameraNumber = int(self.get_parameter("cameraNumber")._value) - if int(msg.data[0]) != cameraNumber: - return - - # Check if the desired camera state is already fulfilled, print and stop the function if so - cameraOn = bool(self.get_parameter("isOn")._value) - if str(msg.data[-1]) == "f" and not cameraOn: - self.get_logger().info("camera" + str(cameraNumber) + " is already off!") - return - elif str(msg.data[-1]) == "n" and cameraOn: - self.get_logger().info("camera" + str(cameraNumber) + " is already on!") - return - - # Set isOn bool parameter to either stop or restart the publishing of frames - self.undeclare_parameter("isOn") - if str(msg.data[-1]) == "f": - # self.get_logger().info("turning camera" + str(cameraNumber) + " off!") - self.declare_parameter("isOn", False) - else: - # self.get_logger().info("turning camera" + str(cameraNumber) + " on!") - self.declare_parameter("isOn", True) - - -def main(args=None): - rclpy.init(args=args) - try: - # We need an executor because running .spin() is a blocking function. - # using the MultiThreadedExecutor, we can control multiple nodes - executor = MultiThreadedExecutor() - nodes = [] - cameraNum = 0 - - for cameraID in getCameras(): - node = RosCamera("video_frames" + str(cameraNum), cameraID) - nodes.append(node) - executor.add_node(node) - cameraNum += 1 - - try: - executor.spin() - finally: - executor.shutdown() - for node in nodes: - node.destroy_node() - - finally: - rclpy.shutdown() - - -if __name__ == "__main__": - main() diff --git a/src/lib/configs.py b/src/lib/configs.py index b0a34a3..77a6dce 100644 --- a/src/lib/configs.py +++ b/src/lib/configs.py @@ -142,7 +142,6 @@ class MotorConfigs: "servo.max_voltage": 56.0, "servopos.position_min": math.nan, "servopos.position_max": math.nan, - "servo.default_timeout_s": 0.5, }, ) ARM_ELBOW_MOTOR = MoteusMotorConfig( @@ -160,16 +159,13 @@ class MotorConfigs: "servopos.position_max": 0.0, }, ) - ARM_LEFT_WRIST_MOTOR = MoteusMotorConfig(can_id=3, config={ - "servopos.position_min": math.nan, - "servopos.position_max": math.nan, - }) + ARM_LEFT_WRIST_MOTOR = MoteusMotorConfig(can_id=3, config={}) ARM_RIGHT_WRIST_MOTOR = MoteusMotorConfig(can_id=4, config={}) ARM_TURNTABLE_MOTOR = MoteusMotorConfig( can_id=5, config={ "motor_position.rotor_to_output_ratio": 0.030581, - "servo.pid_position.kp": 1000.0, + "servo.pid_position.kp": 16.0, "servo.pid_position.ki": 0.0, "servo.pid_position.kd": 1.0, "servo.max_current_A": 10.0, From 451bc55d92e3197f23d74f010ca311a6f3c952a5 Mon Sep 17 00:00:00 2001 From: uellenberg Date: Fri, 17 Jan 2025 09:24:40 +0000 Subject: [PATCH 46/50] Further cleanup --- src/camera/camera/roscamera.py | 109 +++++++++++++++++---------------- 1 file changed, 56 insertions(+), 53 deletions(-) diff --git a/src/camera/camera/roscamera.py b/src/camera/camera/roscamera.py index f814d68..14dd635 100644 --- a/src/camera/camera/roscamera.py +++ b/src/camera/camera/roscamera.py @@ -1,5 +1,3 @@ -from pathlib import Path - import cv2 # OpenCV library import rclpy # Python Client Library for ROS 2 from cv_bridge import CvBridge # Package to convert between ROS and OpenCV Images @@ -8,30 +6,30 @@ from sensor_msgs.msg import CompressedImage # Image is the message type from std_msgs.msg import String -""" -Function returns a list of working camera IDs to capture every camera connected to the robot -""" - def getCameras() -> list[int]: - nonWorkingPorts = 0 - devPort = 0 - workingPorts = [] + """ + Function returns a list of working camera IDs to capture every camera connected to the robot + """ - while nonWorkingPorts < 6: - camera = cv2.VideoCapture(devPort) + non_working_ports = 0 + dev_port = 0 + working_ports = [] + + while non_working_ports < 6: + camera = cv2.VideoCapture(dev_port) if not camera.isOpened(): - nonWorkingPorts += 1 + non_working_ports += 1 else: - isReading, img = camera.read() + is_reading, img = camera.read() _ = camera.get(3) _ = camera.get(4) - if isReading: - workingPorts.append(devPort) + if is_reading: + working_ports.append(dev_port) - devPort += 1 + dev_port += 1 - return workingPorts + return working_ports class RosCamera(Node): @@ -50,10 +48,11 @@ def __init__(self, topicName: str, camera: int): # ex. topic message: "0 off", "0 on" # The topic message should always have the corresponding camera number # at the first index of each message. - subTopicName = "camera_control" - self.subscription = self.create_subscription(String, subTopicName, self.setCameraState, 10) - self.subscription - self.get_logger().info("Created Subscription to" + subTopicName) + sub_topic_name = "camera_control" + self.subscription = self.create_subscription( + String, sub_topic_name, self.setCameraState, 10 + ) + self.get_logger().info("Created Subscription to" + sub_topic_name) # We will publish a message every 0.1 seconds # timer_period = 0.1 # seconds @@ -76,49 +75,49 @@ def __init__(self, topicName: str, camera: int): self.declare_parameter("cameraNumber", camera) self.declare_parameter("isOn", True) - """ - Callback function publishes a frame captured from a camera to /video_framesX (X is specific - camera ID) every 0.1 seconds - """ + def publishCameraFrame(self) -> None: + """ + Callback function publishes a frame captured from a camera to /video_framesX (X is specific + camera ID) every 0.1 seconds + """ - def publishCameraFrame(self): # Capture frame-by-frame # This method returns True/False as well as the video frame. ret, frame = self.cap.read() # Get bool parameter, isOn, and check the state of the camera to publish frame or not # Value of isOn is controlled by setCameraState() - isOn = bool(self.get_parameter("isOn")._value) - if ret and isOn: + is_on = bool(self.get_parameter("isOn")._value) + if ret and is_on: # Publish the image. self._publisher.publish(self.br.cv2_to_compressed_imgmsg(frame)) - """ - Function reads str msgs from topic, 'camera_control' (published by mission control), and - turns on/off the periodic publishing of frames by a certain camera - - Function is called whenever a msg is published to 'camera_control' - - Function assumes str msgs sent to 'camera_control' begin with a number and ends with an 'f' - (meaning off) or 'n' (meaning on) - ex. - "0 off" -> to turn off camera with id=0 - "2 on" -> to turn on camera with id=2 - """ + def setCameraState(self, msg: String) -> None: + """ + Function reads str msgs from topic, 'camera_control' (published by mission control), and + turns on/off the periodic publishing of frames by a certain camera + + Function is called whenever a msg is published to 'camera_control' + + Function assumes str msgs sent to 'camera_control' begin with a number and ends with an 'f' + (meaning off) or 'n' (meaning on) + ex. + "0 off" -> to turn off camera with id=0 + "2 on" -> to turn on camera with id=2 + """ - def setCameraState(self, msg) -> None: # Check if this specific camera is targeted by mission control, stop the function otherwise - cameraNumber = int(self.get_parameter("cameraNumber")._value) - if int(msg.data[0]) != cameraNumber: + camera_number = int(self.get_parameter("cameraNumber")._value) + if int(msg.data[0]) != camera_number: return # Check if the desired camera state is already fulfilled, print and stop the function if so - cameraOn = bool(self.get_parameter("isOn")._value) - if str(msg.data[-1]) == "f" and not cameraOn: - self.get_logger().info("camera" + str(cameraNumber) + " is already off!") + camera_on = bool(self.get_parameter("isOn")._value) + if str(msg.data[-1]) == "f" and not camera_on: + self.get_logger().info("camera" + str(camera_number) + " is already off!") return - elif str(msg.data[-1]) == "n" and cameraOn: - self.get_logger().info("camera" + str(cameraNumber) + " is already on!") + elif str(msg.data[-1]) == "n" and camera_on: + self.get_logger().info("camera" + str(camera_number) + " is already on!") return # Set isOn bool parameter to either stop or restart the publishing of frames @@ -131,20 +130,24 @@ def setCameraState(self, msg) -> None: self.declare_parameter("isOn", True) -def main(args=None): +def main(args: list[str] | None = None) -> None: + """ + The entry point of the node. + """ + rclpy.init(args=args) try: # We need an executor because running .spin() is a blocking function. # using the MultiThreadedExecutor, we can control multiple nodes executor = MultiThreadedExecutor() nodes = [] - cameraNum = 0 + camera_num = 0 - for cameraID in getCameras(): - node = RosCamera("video_frames" + str(cameraNum), cameraID) + for camera_id in getCameras(): + node = RosCamera("video_frames" + str(camera_num), camera_id) nodes.append(node) executor.add_node(node) - cameraNum += 1 + camera_num += 1 try: executor.spin() From 946b279161e239b81810ccc201b686d581c8f0d2 Mon Sep 17 00:00:00 2001 From: Jonah Uellenberg Date: Fri, 17 Jan 2025 01:29:01 -0800 Subject: [PATCH 47/50] Update workflow to work with submodules --- .github/workflows/lint.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 32f464b..aa60c2a 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -7,6 +7,8 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + with: + submodules: true # Black has a first-party ci/cd solution doesn't require python or setup, so use that # before running setup. - name: Run Black From f4fe9feb7c5f0ca06f08a9c66ea414adfeb83ecb Mon Sep 17 00:00:00 2001 From: Jonah Uellenberg Date: Fri, 17 Jan 2025 01:35:28 -0800 Subject: [PATCH 48/50] Fix workflow erroring on vision_opencv --- .github/workflows/lint.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index aa60c2a..7c3735c 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -14,7 +14,7 @@ jobs: - name: Run Black uses: psf/black@stable with: - options: "--check --verbose" + options: "--check --verbose --exclude vision_opencv" src: "./src" version: 24.8.0 - name: Setup Python @@ -28,7 +28,7 @@ jobs: - name: Run Pylint # Ignoring ros packages is unideal, but installing them as packages is not trivial run: | - pylint --fail-under=8 --ignored-modules=rclpy,std_msgs,ament_copyright,ament_flake8,pytest,launch ./src + pylint --fail-under=8 --ignored-modules=rclpy,std_msgs,ament_copyright,ament_flake8,pytest,launch,vision_opencv --ignore-paths=vision_opencv ./src - name: Run Mypy run: | - mypy --exclude /test/ --exclude setup\.py ./src + mypy --exclude /test/ --exclude setup\.py --exclude vision_opencv ./src From 849fb875c526ddf9e78dc5c898b7f00aa580f2b3 Mon Sep 17 00:00:00 2001 From: Jonah Uellenberg Date: Fri, 17 Jan 2025 01:39:23 -0800 Subject: [PATCH 49/50] Fix pylint --- .github/workflows/lint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 7c3735c..7c38a3e 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -28,7 +28,7 @@ jobs: - name: Run Pylint # Ignoring ros packages is unideal, but installing them as packages is not trivial run: | - pylint --fail-under=8 --ignored-modules=rclpy,std_msgs,ament_copyright,ament_flake8,pytest,launch,vision_opencv --ignore-paths=vision_opencv ./src + pylint --fail-under=8 --ignored-modules=rclpy,std_msgs,ament_copyright,ament_flake8,pytest,launch,vision_opencv --ignore-paths=^src/vision_opencv.*$ ./src - name: Run Mypy run: | mypy --exclude /test/ --exclude setup\.py --exclude vision_opencv ./src From 5b1b786f5337a7650feafbf3b5c32e8b2367bbdf Mon Sep 17 00:00:00 2001 From: uellenberg Date: Fri, 17 Jan 2025 23:01:05 +0000 Subject: [PATCH 50/50] Remove old camera on/off functionality --- src/camera/camera/roscamera.py | 55 +--------------------------------- 1 file changed, 1 insertion(+), 54 deletions(-) diff --git a/src/camera/camera/roscamera.py b/src/camera/camera/roscamera.py index 14dd635..ee721a0 100644 --- a/src/camera/camera/roscamera.py +++ b/src/camera/camera/roscamera.py @@ -4,7 +4,6 @@ from rclpy.executors import MultiThreadedExecutor from rclpy.node import Node # Handles the creation of nodes from sensor_msgs.msg import CompressedImage # Image is the message type -from std_msgs.msg import String def getCameras() -> list[int]: @@ -43,17 +42,6 @@ def __init__(self, topicName: str, camera: int): self._publisher = self.create_publisher(CompressedImage, topicName, 10) self.get_logger().info("Created Publisher " + topicName) - # Create a subscription to read 'camera_control' topic from - # mission control. Topic messages are Strings. - # ex. topic message: "0 off", "0 on" - # The topic message should always have the corresponding camera number - # at the first index of each message. - sub_topic_name = "camera_control" - self.subscription = self.create_subscription( - String, sub_topic_name, self.setCameraState, 10 - ) - self.get_logger().info("Created Subscription to" + sub_topic_name) - # We will publish a message every 0.1 seconds # timer_period = 0.1 # seconds timer_period = 0.1 # seconds @@ -73,7 +61,6 @@ def __init__(self, topicName: str, camera: int): # Declare parameters for each 'ros_camera' node thread self.declare_parameter("cameraNumber", camera) - self.declare_parameter("isOn", True) def publishCameraFrame(self) -> None: """ @@ -85,50 +72,10 @@ def publishCameraFrame(self) -> None: # This method returns True/False as well as the video frame. ret, frame = self.cap.read() - # Get bool parameter, isOn, and check the state of the camera to publish frame or not - # Value of isOn is controlled by setCameraState() - is_on = bool(self.get_parameter("isOn")._value) - if ret and is_on: + if ret: # Publish the image. self._publisher.publish(self.br.cv2_to_compressed_imgmsg(frame)) - def setCameraState(self, msg: String) -> None: - """ - Function reads str msgs from topic, 'camera_control' (published by mission control), and - turns on/off the periodic publishing of frames by a certain camera - - Function is called whenever a msg is published to 'camera_control' - - Function assumes str msgs sent to 'camera_control' begin with a number and ends with an 'f' - (meaning off) or 'n' (meaning on) - ex. - "0 off" -> to turn off camera with id=0 - "2 on" -> to turn on camera with id=2 - """ - - # Check if this specific camera is targeted by mission control, stop the function otherwise - camera_number = int(self.get_parameter("cameraNumber")._value) - if int(msg.data[0]) != camera_number: - return - - # Check if the desired camera state is already fulfilled, print and stop the function if so - camera_on = bool(self.get_parameter("isOn")._value) - if str(msg.data[-1]) == "f" and not camera_on: - self.get_logger().info("camera" + str(camera_number) + " is already off!") - return - elif str(msg.data[-1]) == "n" and camera_on: - self.get_logger().info("camera" + str(camera_number) + " is already on!") - return - - # Set isOn bool parameter to either stop or restart the publishing of frames - self.undeclare_parameter("isOn") - if str(msg.data[-1]) == "f": - # self.get_logger().info("turning camera" + str(cameraNumber) + " off!") - self.declare_parameter("isOn", False) - else: - # self.get_logger().info("turning camera" + str(cameraNumber) + " on!") - self.declare_parameter("isOn", True) - def main(args: list[str] | None = None) -> None: """

n-*0`IgDbfLuR%Vf+a%B3;d(Hn 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%0AdD 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