利用CMake编译代码上传到arduino(非Arduino IDE),实现ROS与Arduino连接

利用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文件将要发布的话题节点和上行节点写在一起,硬件连接好一次启动完成。

附图
利用CMake编译代码上传到arduino(非Arduino IDE),实现ROS与Arduino连接_第1张图片
利用CMake编译代码上传到arduino(非Arduino IDE),实现ROS与Arduino连接_第2张图片

你可能感兴趣的:(ROS开发,ROS,ubuntu,arduino)