当前位置: 首页 > news >正文

免费域名网站黄网站开发 产品经理

免费域名网站黄,网站开发 产品经理,怎么做电子商务的网站推广,教育在线网站怎样做直播引言#xff1a;在实际工程项目中#xff0c;为了提高系统的响应速度和稳定性#xff0c;往往需要采用一定的控制算法进行目标跟踪。这里抛砖引玉#xff0c;仅采用简单的PID算法进行目标的跟随控制#xff0c;目标的识别依然采用yolo。对系统要求更高的#xff0c;可以对…引言在实际工程项目中为了提高系统的响应速度和稳定性往往需要采用一定的控制算法进行目标跟踪。这里抛砖引玉仅采用简单的PID算法进行目标的跟随控制目标的识别依然采用yolo。对系统要求更高的可以对算法进行改进也欢迎读者与我们联系合作开发。 步骤一打开摄像头 注意为了获取目标物的三维位置信息我们采用了D435深度摄像头仅供参考可根据需要自行选择即可 roslaunch realsense2_camera rs_camera.launch查看话题需要/camera/color/image_raw和/camera/depth/image_rect_raw 步骤二打开yolo识别节点具体yolo版本可以根据需要选择 roslaunch darknet_ros darknet_ros.launch 没有报错的情况下会弹出识别效果图如下 ## 注我这里训练的是自己打印的H型地标具体可以根据需要选择合适的目标物 步骤三打开三维坐标转换节点 该节点可以直接一话题的形式输出目标物的名称和真实的位置信息 roslaunch darknet_real_position darknet_real_position.launchlaunch文件解析 此处的launch文件以参数的方式指定了识别目标。比如landing因此这个节点只会把指定的landing地标位置信息打印出来其他的目标通通忽略 查看话题数据/object_position 从上述图片可以看出系统非常准确的给出了目标物的名称和真实的位置信息单位是米。需要指出的是这里的位置是相对于D435摄像头的位置信息X表示横向位置Y表示纵向位置Z表示实际的距离信息 步骤四启动PID跟随节点。注意可以先不要启动mavros仅仅测试PID控制器发布出的速度是否正确。在确认了没问题后在启动mavros节点无人机就可以进行正常的跟随运动了 roslaunch follow_pid follow_pid.launch launch文件解析 这里仅仅进行偏航角度和距离的控制如果需要对高度方向控制。可以直接复制代码进行简单的修改即可。参数linear_x_p和linear_x_d是距离的PID控制同理yaw_rate_p和yaw_rate_d是角度的控制。参数target_x_angle是期望保持的角度通常设置为0即可。最后参数target_distance是期望保持的距离单位是毫米 代码如下 #include ros/ros.h #include std_msgs/Bool.h #include geometry_msgs/PoseStamped.h #include geometry_msgs/TwistStamped.h #include mavros_msgs/CommandBool.h #include mavros_msgs/SetMode.h #include mavros_msgs/State.h #include mavros_msgs/PositionTarget.h #include cmath #include tf/transform_listener.h #include nav_msgs/Odometry.h #include mavros_msgs/CommandLong.h #include string#define MAX_ERROR 0.20 #define VEL_SET 0.10 #define ALTITUDE 0.40using namespace std;float target_x_angle 0; float target_distance 2000; float linear_x_p 0.5; float linear_x_d 0.33; float yaw_rate_p 4.0; float yaw_rate_d 15;geometry_msgs::PointStamped object_pos; nav_msgs::Odometry local_pos; mavros_msgs::State current_state; mavros_msgs::PositionTarget setpoint_raw; //检测到的物体坐标值 string current_frame_id no_object; double current_position_x 0; double current_position_y 0; double current_distance 0;//1、订阅无人机状态话题 ros::Subscriber state_sub;//2、订阅无人机实时位置信息 ros::Subscriber local_pos_sub;//3、订阅实时位置信息 ros::Subscriber object_pos_sub;//4、发布无人机多维控制话题 ros::Publisher mavros_setpoint_pos_pub;//5、请求无人机解锁服务 ros::ServiceClient arming_client;//6、请求无人机设置飞行模式本代码请求进入offboard ros::ServiceClient set_mode_client;void pid_control() {static float last_error_x_angle 0;static float last_error_distance 0; float x_angle;float distance;if(current_position_x 0 current_position_y 0 current_distance 0){x_angle target_x_angle;distance target_distance;}else{x_angle current_position_x / current_distance;distance current_distance;}float error_x_angle x_angle - target_x_angle;float error_distance distance - target_distance;if(error_x_angle -0.01 error_x_angle 0.01) {error_x_angle 0;}if(error_distance -80 error_distance 80) {error_distance 0;}setpoint_raw.velocity.x error_distance*linear_x_p/1000 (error_distance - last_error_distance)*linear_x_d/1000;if(setpoint_raw.velocity.x -0.3) {setpoint_raw.velocity.x -0.3;}else if(setpoint_raw.velocity.x 0.3) {setpoint_raw.velocity.x 0.3; }setpoint_raw.yaw_rate error_x_angle*yaw_rate_p (error_x_angle - last_error_x_angle)*yaw_rate_d;if(setpoint_raw.yaw_rate -0.5) {setpoint_raw.yaw_rate -0.5;}else if(setpoint_raw.yaw_rate 0.5) {setpoint_raw.yaw_rate 0.5;}mavros_setpoint_pos_pub.publish(setpoint_raw);last_error_x_angle error_x_angle;last_error_distance error_distance; }void state_cb(const mavros_msgs::State::ConstPtr msg) {current_state *msg; }void local_pos_cb(const nav_msgs::Odometry::ConstPtr msg) {local_pos *msg; }void object_pos_cb(const geometry_msgs::PointStamped::ConstPtr msg) {object_pos *msg;current_position_x object_pos.point.x*(-1000);current_position_y object_pos.point.y*(-1000);//此处将距离由单位米改称毫米方便提高控制精度current_distance object_pos.point.z*1000;current_frame_id object_pos.header.frame_id; pid_control(); //ROS_INFO(current_position_x %f,current_position_x);//ROS_INFO(current_position_y %f,current_position_y);//ROS_INFO(current_distance %f ,current_distance); }int main(int argc, char *argv[]) {ros::init(argc, argv, follow_pid);ros::NodeHandle nh;state_sub nh.subscribemavros_msgs::State(mavros/state, 100, state_cb);local_pos_sub nh.subscribenav_msgs::Odometry(/mavros/local_position/odom, 100, local_pos_cb);object_pos_sub nh.subscribegeometry_msgs::PointStamped(object_position, 100, object_pos_cb);mavros_setpoint_pos_pub nh.advertisemavros_msgs::PositionTarget(/mavros/setpoint_raw/local, 100); arming_client nh.serviceClientmavros_msgs::CommandBool(mavros/cmd/arming);set_mode_client nh.serviceClientmavros_msgs::SetMode(mavros/set_mode);ros::Rate rate(20.0); ros::param::get(linear_x_p,linear_x_p);ros::param::get(linear_x_d,linear_x_d);ros::param::get(yaw_rate_p,yaw_rate_p);ros::param::get(yaw_rate_d,yaw_rate_d);ros::param::get(target_x_angle, target_x_angle);ros::param::get(target_distance,target_distance);//等待连接到PX4无人机/* while(ros::ok() current_state.connected){ros::spinOnce();rate.sleep();}*/setpoint_raw.type_mask /*1 2 4 8 16 32*/ 64 128 256 512 /* 1024 2048*/;setpoint_raw.coordinate_frame 1;setpoint_raw.position.x 0;setpoint_raw.position.y 0;setpoint_raw.position.z 0 ALTITUDE;mavros_setpoint_pos_pub.publish(setpoint_raw);for(int i 100; ros::ok() i 0; --i){mavros_setpoint_pos_pub.publish(setpoint_raw);ros::spinOnce();rate.sleep();}//请求offboard模式变量mavros_msgs::SetMode offb_set_mode;offb_set_mode.request.custom_mode OFFBOARD;//请求解锁变量mavros_msgs::CommandBool arm_cmd;arm_cmd.request.value true;ros::Time last_request ros::Time::now();//请求进入offboard模式并且解锁无人机15秒后退出防止重复请求 /*while(ros::ok()){//请求进入OFFBOARD模式if( current_state.mode ! OFFBOARD (ros::Time::now() - last_request ros::Duration(5.0))){if( set_mode_client.call(offb_set_mode) offb_set_mode.response.mode_sent){ROS_INFO(Offboard enabled);}last_request ros::Time::now();}else {//请求解锁if( !current_state.armed (ros::Time::now() - last_request ros::Duration(5.0))){if( arming_client.call(arm_cmd) arm_cmd.response.success){ROS_INFO(Vehicle armed);}last_request ros::Time::now();}}if(ros::Time::now() - last_request ros::Duration(15.0))break;mavros_setpoint_pos_pub.publish(setpoint_raw);ros::spinOnce();rate.sleep();}*/ while(ros::ok()){//ROS_INFO(11111);ros::spinOnce();rate.sleep();}}步骤五在上述基础上再打开mavros即可开始跟随控制。代码后续会在B站进行讲解。同时会提供相应的实机演示。链接会在后续给出。
http://www.dnsts.com.cn/news/69365.html

相关文章:

  • 免费推广网站2023菜单设计制作网站
  • 阳明拍卖公司网站哪些网站需要备案
  • 优化排名哈尔滨网站基础优化
  • 百度广告联盟赚广告费群排名优化软件
  • 对电子商务网站建设与管理的心得wordpress修改主题函数
  • 教做香肠的网站wordpress 备份 还原
  • 网站建设合同 知乎wordpress 教程
  • 迪虎科技网站建设网站运营需要 做哪些工作
  • 2018江苏省海门市建设局网站怎么编辑网站代码
  • 网站的ns记录网站建设学生选课系统
  • 网站设计 北京店小小影视免费
  • 网络公司做网站青岛开发区网站建设哪家好
  • 网站建设租房网模块一起做网店17普宁池尾
  • 做购物网站的步骤wordpress实现聊天功能
  • 建设网站的功能定位是什么原因后期网站建设及维护推广
  • 聊城正规网站建设设计公司淘宝联盟网站建设不完整
  • 自己建立网站后怎么做淘客网站建设招标公示
  • 广州网站建设免费wordpress自定义字体
  • 制作网页网站的软件是网络软件开发专业
  • 眉山北京网站建设网站seo优化技能
  • 枣庄建网站通过邮箱查注册网站
  • 新浪云 建设网站wordpress 评论框主题
  • 企业查查官网入口官网南宁网站运营优化平台
  • 网站建设质量体系审核指导自己编写代码建设微网站
  • 建设银行网站色调wordpress商城购物表单
  • 苏州营销型网站制作多少钱那家公司网站做的好
  • 合肥网站建设套餐顺德大良哪家做网站好
  • 网站建设好的乡镇做网站的北京
  • 设计兼职网站推荐免备案网站建设
  • 网站建设要什么软件网站建设企业网站制作平台