利用CMake编译代码上传到Arduino,控制伺服电机运动
说明
- 当需要开发大点软件项目时,Arduino IDE对代码的管理能力就变得比较笨拙
- 直接在ROS功能包中进行编写配置,将代码编译上传,以发布/订阅节点形式运行
- 亲测在ubuntu(14.04)+ros(jade)+aruino uno正常运行
步骤
1. 参考此链接在其中源码基础上进行修改,大致实现当arduino 订阅到所需要的topic时,就控制舵机进行转动,此消息可以是不发布数据的消息类型:如,std_msgs::Empty类型。
2. 编辑所建包目录下的CMakeLists.txt文件(ros编程一般步骤);
3. 在包目录下创建firmware/CMakeLists.txt, 这是需要的第二个CMakeLists.txt,这个是针对固件的子项目,内容如下:
cmake_minimum_required(VERSION 2.8.3)
include_directories(${ROS_LIB_DIR})
add_definitions(-DUSB_CON)
generate_arduino_firmware(hello
SRCS chatter.cpp ${ROS_LIB_DIR}/time.cpp
BOARD leonardo // 根据情况更改
PORT /dev/ttyACM0 // 端口号根据情况更改(/dev/ttyUSB0)
)
解释:
generate_arduino_firmware 函数由arduino-cmake toolchain提供
它定位Arduino,连接所需的库等
BOARD 名称可以在/hardware/arduino/avr/boards.txt找到. 如:
arduino uno 的BOARD名为uno
arduino leonardo的BOARD名为leonardo
根据自己创建的名称进行对generate_arduino_firmware()其中内容进行修改。
编译
- 固件可以编译默认使用catkin_make:
catkin_make helloworld_firmware_hello
- 连接Arduino开发板,确认设备是在/dev/ttyACM0,或者修改firmware/CMakeLists.txt里面对应的设备号,编译上传:
catkin_make helloworld_firmware_hello-upload
测试
#新终端打开
$ roscore
#新终端打开
$ rosrun rosserial_python serial_node.py _port:=/dev/ttyUSB0
可以写个launch文件将要发布的话题节点和上行节点写在一起,硬件连接好一次启动完成。
附图