Skip to content

Commit 311df41

Browse files
Merge branch 'MoteusStuff' into MoteusStuff2
2 parents 775a97c + b75275c commit 311df41

File tree

5 files changed

+354
-83
lines changed

5 files changed

+354
-83
lines changed

src/arm_hardware_interface/CMakeLists.txt

Lines changed: 26 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -12,64 +12,53 @@ find_package(sensor_msgs REQUIRED)
1212
find_package(serial REQUIRED)
1313
find_package(rover_msgs REQUIRED)
1414
find_package(arm_control REQUIRED)
15-
# uncomment the following section in order to fill in
16-
# further dependencies manually.
17-
# find_package(<dependency> REQUIRED)
18-
include_directories(
19-
include
20-
${arm_control_INCLUDE_DIRS}
21-
)
15+
# uncomment the following section in order to fill in further dependencies
16+
# manually. find_package(<dependency> REQUIRED)
17+
include_directories(include ${arm_control_INCLUDE_DIRS})
2218

2319
add_subdirectory(moteus)
24-
add_library(${PROJECT_NAME} src/armprotocol.cpp include/arm_hardware_interface/ArmSerialProtocol.h)
25-
20+
add_library(${PROJECT_NAME} src/armprotocol.cpp
21+
include/arm_hardware_interface/ArmSerialProtocol.h)
2622

2723
# For old and new arm
28-
add_executable(serial_arm_driver src/ArmSerialInterface.cpp include/ArmSerialInterface.h include/arm_hardware_interface/ArmSerialProtocol.h)
29-
add_executable(moteus_arm_driver src/MoteusInterface.cpp include/ArmSerialInterface.h include/arm_hardware_interface/ArmSerialProtocol.h)
24+
add_executable(
25+
serial_arm_driver src/ArmSerialInterface.cpp include/ArmSerialInterface.h
26+
include/arm_hardware_interface/ArmSerialProtocol.h)
27+
add_executable(
28+
moteus_arm_driver src/MoteusInterface.cpp include/ArmMoteusInterface.h
29+
include/arm_hardware_interface/ArmSerialProtocol.h)
3030

31-
target_compile_definitions(moteus_arm_driver
32-
PRIVATE
33-
BUILDING_NEW_DRIVER=1
34-
)
31+
target_compile_definitions(moteus_arm_driver PRIVATE BUILDING_NEW_DRIVER=1)
3532

3633
target_link_libraries(moteus_arm_driver moteus::cpp)
37-
ament_target_dependencies(serial_arm_driver rclcpp sensor_msgs serial rover_msgs arm_control)
38-
ament_target_dependencies(moteus_arm_driver rclcpp sensor_msgs serial rover_msgs arm_control)
34+
ament_target_dependencies(serial_arm_driver rclcpp sensor_msgs serial
35+
rover_msgs arm_control)
36+
ament_target_dependencies(moteus_arm_driver rclcpp sensor_msgs serial
37+
rover_msgs arm_control)
3938

4039
if(BUILD_TESTING)
4140
find_package(ament_lint_auto REQUIRED)
42-
# the following line skips the linter which checks for copyrights
43-
# comment the line when a copyright and license is added to all source files
41+
# the following line skips the linter which checks for copyrights comment the
42+
# line when a copyright and license is added to all source files
4443
set(ament_cmake_copyright_FOUND TRUE)
45-
# the following line skips cpplint (only works in a git repo)
46-
# comment the line when this package is in a git repo and when
47-
# a copyright and license is added to all source files
44+
# the following line skips cpplint (only works in a git repo) comment the line
45+
# when this package is in a git repo and when a copyright and license is added
46+
# to all source files
4847
set(ament_cmake_cpplint_FOUND TRUE)
4948
ament_lint_auto_find_test_dependencies()
5049
endif()
51-
install(DIRECTORY
52-
launch
53-
DESTINATION share/${PROJECT_NAME}/launch
54-
)
50+
install(DIRECTORY launch DESTINATION share/${PROJECT_NAME}/launch)
5551

5652
# Install headers for other packages (for arm serial protocol)
57-
install(
58-
DIRECTORY include/
59-
DESTINATION include/
60-
)
53+
install(DIRECTORY include/ DESTINATION include/)
6154

62-
install(TARGETS
63-
serial_arm_driver
64-
moteus_arm_driver
65-
${PROJECT_NAME}
55+
install(
56+
TARGETS serial_arm_driver moteus_arm_driver ${PROJECT_NAME}
6657
DESTINATION lib/${PROJECT_NAME}
6758
ARCHIVE DESTINATION lib
68-
LIBRARY DESTINATION lib
69-
)
59+
LIBRARY DESTINATION lib)
7060

7161
ament_export_include_directories(include)
7262
ament_export_libraries(${PROJECT_NAME})
7363

74-
7564
ament_package()
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
#include "arm_control/include/armControlParams.h"
2+
#include "sensor_msgs/msg/joint_state.hpp"
3+
#include "sensor_msgs/msg/joy.hpp"
4+
#include <rclcpp/rclcpp.hpp>
5+
6+
#include "rover_msgs/msg/arm_command.hpp"
7+
#include <chrono>
8+
#include <thread>
9+
10+
#include "moteus.h"
11+
using namespace mjbots;
12+
13+
#include <arm_hardware_interface/ArmSerialProtocol.h>
14+
#include <serial/serial.h>
15+
16+
#define SIMULATE false
17+
#define PI 3.14159
18+
19+
#define TX_UART_BUFF 128
20+
#define RX_UART_BUFF 128
21+
22+
#define AXIS_1_DIR 1
23+
#define AXIS_2_DIR 1
24+
#define AXIS_3_DIR 1
25+
#define AXIS_4_DIR 1
26+
#define AXIS_5_DIR 1
27+
#define AXIS_6_DIR 1
28+
29+
using std::string;
30+
31+
class ArmSerial : public rclcpp::Node {
32+
public:
33+
ArmSerial();
34+
35+
rover_msgs::msg::ArmCommand current_arm_status;
36+
37+
string joint_names[NUM_JOINTS + 2] = {"joint_1", "joint_2", "joint_3", "joint_4",
38+
"joint_5", "joint_6", "finger_left_joint", "finger_right_joint"};
39+
40+
private:
41+
unsigned long baud = 115200;
42+
string port = "/dev/serial/by-id/usb-ZEPHYR_UBC_ROVER_Arm_500100C6224069D7-if00";
43+
44+
serial::Serial teensy;
45+
serial::Timeout timeout_uart = serial::Timeout::simpleTimeout(1000);
46+
47+
std::map<int, std::shared_ptr<moteus::Controller>> controllers;
48+
std::map<int, moteus::Query::Result> servo_data;
49+
std::shared_ptr<moteus::Transport> transport;
50+
51+
bool send_angles = true;
52+
53+
struct Axis {
54+
float curr_pos;
55+
float target_pos;
56+
float speed;
57+
float zero_rad;
58+
float max_rad;
59+
int dir;
60+
};
61+
62+
Axis axes[NUM_JOINTS];
63+
64+
float target_position[NUM_JOINTS];
65+
float target_velocities[NUM_JOINTS];
66+
67+
int homed = 0;
68+
bool homing = false;
69+
float EE = 0;
70+
volatile float current_velocity[NUM_JOINTS] = {00.00, 00.00, 00.00, 00.00, 00.00, 00.00, 00.00};
71+
volatile float current_position[NUM_JOINTS] = {00.00, 00.00, 00.00, 00.00, 00.00, 00.00, 00.00};
72+
volatile int current_limit_switches[NUM_JOINTS] = {-1, -1, -1, -1, -1, -1, -1};
73+
74+
rclcpp::Subscription<rover_msgs::msg::ArmCommand>::SharedPtr command_subscriber;
75+
void CommandCallback(const rover_msgs::msg::ArmCommand::SharedPtr msg);
76+
77+
rclcpp::Publisher<sensor_msgs::msg::JointState>::SharedPtr joint_state_publisher_;
78+
79+
sensor_msgs::msg::JointState prev_joint_states;
80+
rclcpp::Publisher<rover_msgs::msg::ArmCommand>::SharedPtr arm_position_publisher;
81+
82+
rclcpp::TimerBase::SharedPtr timer_;
83+
84+
std::thread serialRxThread;
85+
86+
void serial_rx();
87+
float degToRad(float deg);
88+
float firmToMoveitOffsetPos(float deg, int axis);
89+
float firmToMoveitOffsetVel(float deg, int axis);
90+
void send_position_command(float pos[NUM_JOINTS]);
91+
void send_velocity_command(float vel[NUM_JOINTS]);
92+
void ConfigureMotor(int axis_number, mjbots::moteus::Controller &controller);
93+
void send_test_limits_command();
94+
void sendHomeCmd(int target_axis);
95+
void sendCommCmd(int target_state);
96+
void sendMsg(std::string outMsg);
97+
void parseArmAngleUart(std::string msg);
98+
void parseLimitSwitchTest(std::string msg);
99+
};

src/arm_hardware_interface/include/ArmSerialInterface.h

Lines changed: 6 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,7 @@
77
#include <chrono>
88
#include <thread>
99

10-
#ifdef BUILDING_NEW_DRIVER
11-
#include "moteus.h"
12-
using namespace mjbots;
13-
#endif
14-
1510
#include <arm_hardware_interface/ArmSerialProtocol.h>
16-
1711
#include <serial/serial.h>
1812

1913
#define SIMULATE false
@@ -35,31 +29,18 @@ class ArmSerial : public rclcpp::Node {
3529
public:
3630
ArmSerial();
3731

38-
// float firm
39-
4032
rover_msgs::msg::ArmCommand current_arm_status;
4133

42-
// angle_echo.positions.resize(NUM_JOINTS);
43-
// void start_rx() {
44-
// serialRxThread = std::thread(&ArmSerial::serial_rx(), this);
45-
// }
46-
// string joint_names[6] = {"joint_turntable", "joint_axis1", "joint_axis2", "joint_axis3", "joint_axis4", "joint_ender"}; //? old arm
47-
// urdf
4834
string joint_names[NUM_JOINTS + 2] = {"joint_1", "joint_2", "joint_3", "joint_4",
49-
"joint_5", "joint_6", "finger_left_joint", "finger_right_joint"}; //? newest (Sep 2024) arm urdf
35+
"joint_5", "joint_6", "finger_left_joint", "finger_right_joint"};
5036

5137
private:
52-
unsigned long baud = 115200; // 19200;
38+
unsigned long baud = 115200;
5339
string port = "/dev/serial/by-id/usb-ZEPHYR_UBC_ROVER_Arm_500100C6224069D7-if00";
5440

5541
serial::Serial teensy;
56-
serial::Timeout timeout_uart = serial::Timeout::simpleTimeout(1000); // E.g., 1000 ms or 1 second
42+
serial::Timeout timeout_uart = serial::Timeout::simpleTimeout(1000);
5743

58-
#ifdef BUILDING_NEW_DRIVER
59-
std::map<int, std::shared_ptr<moteus::Controller>> controllers;
60-
std::map<int, moteus::Query::Result> servo_data;
61-
std::shared_ptr<moteus::Transport> transport;
62-
#endif
6344
bool send_angles = true;
6445

6546
struct Axis {
@@ -72,7 +53,6 @@ class ArmSerial : public rclcpp::Node {
7253
};
7354

7455
Axis axes[NUM_JOINTS];
75-
// Axis axis_EE;
7656

7757
float target_position[NUM_JOINTS];
7858
float target_velocities[NUM_JOINTS];
@@ -89,19 +69,20 @@ class ArmSerial : public rclcpp::Node {
8969

9070
rclcpp::Publisher<sensor_msgs::msg::JointState>::SharedPtr joint_state_publisher_;
9171

92-
sensor_msgs::msg::JointState prev_joint_states; // for sim
72+
sensor_msgs::msg::JointState prev_joint_states;
9373
rclcpp::Publisher<rover_msgs::msg::ArmCommand>::SharedPtr arm_position_publisher;
9474

9575
rclcpp::TimerBase::SharedPtr timer_;
9676

9777
std::thread serialRxThread;
9878

99-
void serial_rx(); //? should be static inline?
79+
void serial_rx();
10080
float degToRad(float deg);
10181
float firmToMoveitOffsetPos(float deg, int axis);
10282
float firmToMoveitOffsetVel(float deg, int axis);
10383
void send_position_command(float pos[NUM_JOINTS]);
10484
void send_velocity_command(float vel[NUM_JOINTS]);
85+
10586
void send_test_limits_command();
10687
void sendHomeCmd(int target_axis);
10788
void sendCommCmd(int target_state);

0 commit comments

Comments
 (0)