准备工作
【创建工作空间】
mkder ledDemo[工作空间名称,可以自定义]
# 进入工作空间目录cd ledDemo[工作空间名称]# 初始化catkin_make
# 在工作目录下新建一个名为 src 的目录mkdir src# 进入 src 目录cd src# 执行创建功能包的命令catkin_create_pkg 自定义ROS包名 roscpp rospy std_msgs
代码实现
1. C++ 编写一个节点
gedit led.cpp
led.cpp文件:
#include <ros/ros.h>#include <std_msgs/Int8.h>int main(int argc, char **argv){ ros::init(argc, argv, "led_node"); ros::NodeHandle n; ros::Rate rate(1); ros::Publisher pub = n.advertise<std_msgs::Int8>("model",10); while (n.ok()) { ROS_INFO("spin once 000111222333--000111222333"); ros::spinOnce(); std_msgs::Int8 msg; msg.data = 2; pub.publish(msg); rate.sleep(); } return 0;}
》 # 打开
/ledDemo/src/led_package/src 下的 CMakeLists.txt文件,配置我们
gedit CMakeLists.txt
内容:
add_executable(led_node src/led.cpp)target_link_libraries(led_node ${catkin_LIBRARIES})# led_node为节点名称,led.cpp为主编程序
》 进入工作环境的根目录
catkin_make
2. arduino定义话题
#include <ros.h>#include <std_msgs/String.h>#include <std_msgs/Int8.h>#define led 7//ros节点变量ros::NodeHandle nh;//订阅的topic消息的处理void ModelCb(const std_msgs::Int8& model){ if(model.data==0){ digitalWrite(led,0); } else if(model.data==1){ digitalWrite(led,1); }}//定义订阅 名为 "model" 的topic 并指定处理函数ros::Subscriber<std_msgs::Int8> sub("model", ModelCb );void setup(void) { pinMode(led,OUTPUT); //初始化nodeHandle nh.initNode(); nh.subscribe(sub);} void loop(void) { nh.spinOnce(); delay(1);}
测试
roscore
# 安装 rosbridge-suitesudo apt-get install ros-melodic-rosbridge-server
# 启动 rosbridge_websocketroslaunch rosbridge_server rosbridge_websocket.launch
# 节点包包添加环境变量source ~/ros/workSpace/ledDemo/devel/setup.bash
# 启动rosrun led_package led_node
rosrun rosserial_python serial_node.py /dev/ttyACM0
rosnode echo led_node
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!