資源簡介
本項(xiàng)目主要是實(shí)現(xiàn)移動(dòng)機(jī)器人多站點(diǎn)循環(huán)導(dǎo)航和自主探索建圖功能,并拓展加入U(xiǎn)I可視化界面增加導(dǎo)航目標(biāo)和尋墻檢測建圖。在多站點(diǎn)循環(huán)導(dǎo)航任務(wù)中,首先要完成多點(diǎn)導(dǎo)航函數(shù)的撰寫,實(shí)現(xiàn)單次導(dǎo)航任務(wù),然后在函數(shù)中加入里程計(jì)清零環(huán)節(jié)和循環(huán)次數(shù)設(shè)定環(huán)節(jié),最后使用UI界面實(shí)現(xiàn)循環(huán)次數(shù)和導(dǎo)航點(diǎn)的設(shè)定。在自主探索建圖任務(wù)中,首先配置好自主避障參數(shù),然后實(shí)現(xiàn)自主建圖探索功能,接下來根據(jù)建圖效果確立停止條件,最后完成停止條件函數(shù)的撰寫。
代碼片段和文件信息
//代碼說明:接收循環(huán)次數(shù)和多個(gè)導(dǎo)航點(diǎn),對(duì)數(shù)據(jù)進(jìn)行處理,循環(huán)發(fā)布導(dǎo)航點(diǎn)至move_base
//需要的頭文件
#include?
#include?
#include?se_msgs/MovebaseAction.h>
#include?
#include?
#include?
//定義一個(gè)vector用以接收多個(gè)導(dǎo)航點(diǎn)
std::vector?pose_list;
//聲明循環(huán)次數(shù)和多導(dǎo)航點(diǎn)的接收者
ros::Subscriber?vec_sub;
ros::Subscriber?tim_sub;
nav_msgs::Odometry?odom;
ros::Publisher?odom_pub;
//聲明循環(huán)次數(shù),導(dǎo)航目標(biāo)個(gè)數(shù),循環(huán)需要的中間值
int?Cycle_timesGoals_numcount?=?0;
//接收循環(huán)次數(shù)
void?timcallback(const?std_msgs::Int8::ConstPtr&?msg)
{
Cycle_times?=?msg->data;
}
//接收導(dǎo)航點(diǎn)數(shù)組,循環(huán)發(fā)布導(dǎo)航點(diǎn)到move_base
void?callback(const?geometry_msgs::PoseArray::ConstPtr&?pose_array)
{
//取得導(dǎo)航點(diǎn)個(gè)數(shù)
Goals_num?=?pose_array->poses.size();
//存入多個(gè)導(dǎo)航點(diǎn)
for(int?i?=0;i {
pose_list.push_back(pose_array->poses[i]);
}
actionlib::SimpleActionClientse_msgs::MovebaseAction>?cycle_client(“move_base“true);
ROS_INFO(“Waiting?for?move_base?action?server...“);
if(!cycle_client.waitForServer(ros::Duration(60)))
{
ROS_INFO(“Can‘t?connected?to?move?base?server“);
}
ROS_INFO(“Connected?to?move?base?server“);
ROS_INFO(“Starting?navigation?“);
ROS_INFO(“cycle?times?is?%d“Cycle_times);
ROS_INFO(“cycle?goals?is?%d“Goals_num);
//多次循環(huán)
for?(int?i?=0?;?i {
//循環(huán)一次所發(fā)布的多個(gè)導(dǎo)航點(diǎn)
while(count? {
move_base_msgs::MovebaseGoal?goal;
goal.target_pose.header.frame_id?=?“map“;
goal.target_pose.header.stamp?=?ros::Time::now();
goal.target_pose.pose?=?pose_list[count];
cycle_client.sendGoal(goal);
//60S內(nèi)如果不能達(dá)到目標(biāo)點(diǎn)則放棄該目標(biāo)點(diǎn)
bool?finished_within_time?=?cycle_client.waitForResult(ros::Duration(60));
if(!finished_within_time)
{
cycle_client.cancelGoal();
ROS_INFO(“Timed?out?achieving?goal“);
}
else
{
//導(dǎo)航成功
if(cycle_client.getState()?==?actionlib::SimpleClientGoalState::SUCCEEDED)
{
ROS_INFO(“Goal?%d?succeeded!“count+1);
}
//導(dǎo)航失敗
else
{
ROS_INFO(“move?plan?is?error“);
}
}
count?+=?1;
}
count?=?0;
odom.header.stamp?=?ros::Time::now();
??odom.header.frame_id?=?“odom“;
odom.child_frame_id?=?“base_link“;
??odom.pose.pose.position.x?=?0.0;
??odom.pose.pose.position.y?=?0.0;
??odom.pose.pose.position.z?=?0.0;
odom.pose.pose.orientation.z?=?0.0;
odom.pose.pose.orientation.z?=?0.0;
odom.pose.pose.orientation.z?=?0.0;
odom.pose.pose.orientation.w?=?1.0;
odom_pub.publish(odom);
ROS_INFO(“Odom?is?clear“);
ROS_INFO(“odom.pose.pose.position.x?=?%lf“odom.pose.pose.position.x);
ROS_INFO(“odom.pose.pose.position.y?=?%lf“odom.pose.pose.position.y);
ROS_INFO(“odom.pose.pose.position.z?=?%lf“odom.pose.pose.position.z);
}
//導(dǎo)航結(jié)束,清空存放多個(gè)導(dǎo)航點(diǎn)的vector
ROS_INFO(“The?Cycle?Goals?is?over“);
pose_list.clear();
}
int?main(int?argcchar**?argv)
{
//初始化并設(shè)置節(jié)點(diǎn)名
ros::init(argcargv“cycle_nav“);
//創(chuàng)建句柄
ros::NodeHandle?n;
ROS_INFO(“Cycle_nav?is?start...“);
odom_pub?=?n.advertise?(“/odom“?50);
//定義循環(huán)次數(shù)的接收者
t
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-11-25?15:46??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\
?????文件???????21315??2018-08-23?03:36??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\1移動(dòng)機(jī)器人項(xiàng)目需求.docx
?????目錄???????????0??2018-11-25?15:45??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\
?????目錄???????????0??2018-11-25?15:45??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\
?????目錄???????????0??2018-11-25?15:45??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\CBH_cycle_nav\
?????目錄???????????0??2018-11-25?15:45??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\CBH_cycle_nav\cycle_nav\
?????文件????????6901??2018-09-06?06:57??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\CBH_cycle_nav\cycle_nav\CMakeLists.txt
?????目錄???????????0??2018-11-25?15:45??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\CBH_cycle_nav\cycle_nav\include\
?????目錄???????????0??2018-09-06?05:43??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\CBH_cycle_nav\cycle_nav\include\cycle_nav\
?????文件????????3039??2018-09-06?06:56??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\CBH_cycle_nav\cycle_nav\package.xm
?????目錄???????????0??2018-11-25?15:45??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\CBH_cycle_nav\cycle_nav\src\
?????文件????????3604??2018-09-11?02:24??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\CBH_cycle_nav\cycle_nav\src\cycle_nav.cpp
?????目錄???????????0??2018-11-25?15:45??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\CBH_cycle_nav\nav_panel\
?????文件????????7611??2018-09-06?06:12??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\CBH_cycle_nav\nav_panel\CMakeLists.txt
?????目錄???????????0??2018-11-25?15:45??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\CBH_cycle_nav\nav_panel\include\
?????目錄???????????0??2018-09-06?06:01??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\CBH_cycle_nav\nav_panel\include\nav_panel\
?????文件?????????310??2018-09-06?06:30??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\CBH_cycle_nav\nav_panel\nav_panel.xm
?????文件????????2914??2018-09-06?06:13??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\CBH_cycle_nav\nav_panel\package.xm
?????目錄???????????0??2018-11-25?15:45??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\CBH_cycle_nav\nav_panel\src\
?????文件????????3269??2018-09-11?02:23??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\CBH_cycle_nav\nav_panel\src\nav_panel.cpp
?????文件????????1384??2018-09-06?07:46??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\CBH_cycle_nav\nav_panel\src\nav_panel.h
?????目錄???????????0??2018-11-25?15:45??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\CBH_cycle_nav\nav_tool\
?????文件????????7623??2018-09-06?06:52??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\CBH_cycle_nav\nav_tool\CMakeLists.txt
?????目錄???????????0??2018-11-25?15:45??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\CBH_cycle_nav\nav_tool\include\
?????目錄???????????0??2018-09-06?06:01??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\CBH_cycle_nav\nav_tool\include\nav_tool\
?????文件?????????292??2018-09-06?06:48??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\CBH_cycle_nav\nav_tool\nav_tool.xm
?????文件????????2910??2018-09-06?06:04??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\CBH_cycle_nav\nav_tool\package.xm
?????目錄???????????0??2018-11-25?15:45??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\CBH_cycle_nav\nav_tool\src\
?????文件????????1905??2018-09-06?08:01??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\CBH_cycle_nav\nav_tool\src\nav_tool.cpp
?????文件?????????751??2018-09-06?07:59??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\CBH_cycle_nav\nav_tool\src\nav_tool.h
?????文件?????????912??2018-10-03?08:21??移動(dòng)機(jī)器人項(xiàng)目功能包--ROS功能包\仿真機(jī)器人原功能包\fake_robot_pkg\CBH_cycle_nav\README.md
............此處省略1319個(gè)文件信息
評(píng)論
共有 條評(píng)論