01 安装环境
在工作空间的src文件夹下安装功能包dynamixel-workbench
,dynamixel-workbench-msgs
,以及依赖库DynamixelSDK
具体参考:https://emanual.robotis.com/docs/en/software/dynamixel/dynamixel_workbench/
关于dynamixelSDK和workbench,我的理解是workbench是在dynamixelSDK的基础上,专为ROS开发,提供一些简单的易实现的API
接下来可以按照官方教程的Tutorials使用,也可以自己写
02 使用自己的程序
为了更适合自己,也为了更了解程序,所以是自己写的。
2.1 创建自己的功能包
- 创建功能包
catkin_create_pkg myDynamixel std_msgs rospy roscpp dynamixel_workbench_toolbox
注意:需要添加依赖dynamixel_workbench_toolbox
2.2 简单控制一个舵机
实现了一个舵机PID简单控制,可以位置控制(也可以电流控制),可以读取位置和电流
其中的一些API
DynamixelWorkbench dxl_wb; //声明对象
dxl_wb.begin("/dev/ttyUSB0",BAUDRATE); //打开串口
dxl_wb.ping(ID); //连接
dxl_wb.setPositionControlMode(ID); //设置位置控制模式
dxl_wb.torqueOn(ID); //上电,只有断电的情况下才能设置控制模式
dxl_wb.itemRead(ID,"Present_Position",&present_position); //读取当前的位置
dxl_wb.itemWrite(ID,"Goal_Position",goal_position); //写入目标的位置
具体过程如下:
-
首先在功能包的src下创建cpp文件
touch singleSimpleControl.cpp
-
然后把cpp设为可执行文件:
右键文件-属性-权限-执行:允许作为可执行文件 -
在CMakeList.txt中添加:
add_executable(my_dxl_node src/singleSimpleControl.cpp) target_link_libraries(my_dxl_node ${catkin_LIBRARIES})
-
cpp程序参考知乎博主的,但需要注意在
torqueOn
之前需要ping
,否则舵机无法执行动作
2.3 简单控制多个舵机
-
创建cpp文件,并设置为可执行文件
touch multiSimpleControl.cpp
-
头文件
my_dxl_controller.h
-
对应cpp文件
my_dxl_controller.cpp
(multiSimpleControl.cpp中创建对象调用) -
roslaunch文件
start_multi_dxl.launch
-
修改
CMakeList.txt
add_library(MyDynamixelController include/my_dynamixel/my_dxl_controller.h src/my_dxl_controller.cpp ) add_executable(my_multi_dxl_node src/multi_simple_control.cpp) add_dependencies(my_multi_dxl_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) target_link_libraries(my_multi_dxl_node MyDynamixelController ${catkin_LIBRARIES} ${YAML_CPP_LIBRARIES})
-
遇到的问题和解决:
- 这里主要遇到的就是自定义的头文件无法使用,要注意修改CMakeList.txt的一些依赖(比如
add_library
那一步,target_link_libraries
也要把add_library
加上去)(add_library
后面的MyDynamixelController
是类名,下面是一些文件)
然后可以先build一下,因为他其实是在devel文件下找头文件的 - 还有就是roslaunch启动含有node的cpp文件,因为涉及到
node_handle.param
读取启动的参数
- 这里主要遇到的就是自定义的头文件无法使用,要注意修改CMakeList.txt的一些依赖(比如