ROS教程——使用rosbridge进行综合实例

准备工作

【创建工作空间】

  • 新建一个目录
  • mkder ledDemo[工作空间名称,可以自定义]
  • 初始化工作空间
  • # 进入工作空间目录cd ledDemo[工作空间名称]# 初始化catkin_make
  • 创建功能包
  • # 在工作目录下新建一个名为 src 的目录mkdir src# 进入 src 目录cd src# 执行创建功能包的命令catkin_create_pkg 自定义ROS包名 roscpp rospy std_msgs

    代码实现

    1. C++ 编写一个节点

  • 进入功能包的src目录 ledDemo/src/led_package/src
  • 新建一个名为 led.cpp 的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
  • roscore
  • 启动websocket
  • # 安装 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
  • 使用Android的 ROSBridgeClient 测试程序或者 webSocket模拟客户端软件进行发布消息
  • 声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

    上一篇 2022年6月5日
    下一篇 2022年6月5日

    相关推荐