转过来,控制/地图 看上去也是json mqtt 通迅是一样的,单片机端添加ros json接口,由上位机获取单片机控制端的三轴/gps/ 姿态/轨迹数据后由json更新控制参数实现在agv小车在地图上面的动作控制
1/ui接口类与ros连接
2/控制消息发布操作---mqtt
3/地图接口
4/节点操作
声明rviz的RenderPanel,这个面板类最终继承QWidget
mapp.cpp源文件:
void MAPP::on_btn_map_clicked(){manager_->removeAllDisplays();rviz::Display
清除 显示内存 初始化
*map_=manager_->createDisplay("rviz/Map","adjustable map",true);
显示 rviz 目录
地图ROS_ASSERT(map_!=NULL);
非空检测----设备初始化 操作
设置地图路径并发布
>subProp("Topic")->setValue("/map");
发布地图信息
rviz::Display *robot_=manager_->createDisplay("rviz/RobotModel","adjustable robot",true);
显示ROS_ASSERT(robot_!=NULL);robot_->subProp("Robot Description")->setValue("robot_description");
添加 模式显示rviz::
Display *laser_=manager_->createDisplay("rviz/LaserScan","adjustable scan",true);
开始 激光雷达 扫描 ROS_ASSERT(laser_!=NULL);laser_-
设置激光雷发布消息
>subProp("Topic")->setValue("/scan");laser_->subProp("Size (m)")->setValue("0.1");}
发布 雷达 信息代码解释:创建了显示createDisplay(),
然后添加topic值,加载地图void MAPP::on_btn_left_pressed(){ros::NodeHandle node;
映射节点 句柄cmdVelPub
= node.advertise<:twist>("/cmd_vel", 1);
写入节点
参数ROS_INFO("move_turtle_goforward cpp start...");
显示 前进 操作字符geometry_msgs::
Twist speed;
设置界面同步 修正 获取 三轴
姿态参数获取 驱动器编码器
当前值获取 当前任务 运行时间写入
修正参数/修正接口速度 写 0speed.linear.x = 0;
角度 写 0.05speed.angular.z = 0.05;
发布 操作参数cmdVelPub.publish(speed);}
代码解释:向前、向后、向左、向右、停止的
函数大同小异,主要修改speed.linear.x
和speed.angular.z为这个进程的节点
创建一个句柄node在/cmd_vel 话题
发布一个geometry_msgs/Twist的消息
控制信号载体Twist message设置线速度为0m/s,
正为前进,负为后退 (0)设置角速度为0.05rad/s,
正为左转,负为右转 (0.5)将刚才设置的指令
发送给机器人cmdVelPub.publish()