实验一 编程 Hello World
turtlebot官方給出的代碼包功能
- turtlebot:運(yùn)行和使用帶有ROS的Turtlebot的所需的所有驅(qū)動程序,最新版本為melodic,鏈接:https://github.com/turtlebot/turtlebot。
- turtlebot_app:一組可在turtlebot上運(yùn)行的簡單演示和示例,最新版本為indogo,鏈接:https://github.com/turtlebot/turtlebot_apps。
- turtlebot_simulator:用于Gazebo上模擬Turtlebot,最新版本為melodic,鏈接:https://github.com/turtlebot/turtlebot_simulator。
- turtlebot_viz:Turtlebot的可視化和交互工具,最新版本為indigo,鏈接:https://github.com/turtlebot/turtlebot_viz。
- turtlebot_interactions:是turtlebot_viz的演變,是用戶與turtlebot進(jìn)行交互的程序,最新版本為indigo,鏈接:https://github.com/turtlebot/turtlebot_interactions。
- robot_pose_ekf:用來在機(jī)器人IMU和里程計值上應(yīng)用傳感器融合來估計3D位姿,鏈接:https://github.com/udacity/robot_pose_ekf。
- depthimage_to_laserscan:將深度圖像轉(zhuǎn)換為激光掃描以用于導(dǎo)航和定位,鏈接:https://github.com/ros-perception/depthimage_to_laserscan/tree/melodic-devel。
- kobuki_msgs:kubuki的ROS消息、服務(wù)和操作接口,鏈接:https://github.com/yujinrobot/kobuki_msgs/tree/melodic。
- kobuki_desktop:Kubuki的可視化和仿真工具,鏈接:https://github.com/yujinrobot/kobuki_desktop/tree/melodic。刪去其中的kobuki_qtestsuite,在kubuki_desktop中添加以下三個程序包:
– orocos-bayesian-filtering:貝葉斯濾波庫,鏈接:https://github.com/orocos/orocos-bayesian-filtering。
– turtlebot_msgs:turtlebot的消息、服務(wù)和動作,鏈接:https://github.com/turtlebot/turtlebot_msgs,。
– joystick_drivers:一組簡單的節(jié)點(diǎn),用于支持各種類型的操縱桿輸入,并從底層操作系統(tǒng)信息中產(chǎn)生ROS消息,鏈接:https://github.com/ros-drivers/joystick_drivers/tree/master。
– astar:A*算法,鏈接:。 - kubuki:底盤驅(qū)動程序的ROS包裝器以及各類工具和應(yīng)用程序,鏈接:https://github.com/yujinrobot/kobuki/tree/melodic。
- yujin_ocs:Yujin Robot的開源控制系統(tǒng),包括庫和可執(zhí)行文件,鏈接:https://github.com/yujinrobot/yujin_ocs,需要下載其中的yocs_cmd_vel_mux和yocs_controllers。
1. 體驗內(nèi)容
# 啟動最基礎(chǔ)launch文件
roslaunch turtlebot_bringup minimal.launch
# 啟動鍵盤控制文件
roslaunch turtlebot_teleop keyboard_teleop.launch
# 查看話題信息
rostopic info /cmd_vel_mux/input/navi
# 發(fā)布話題消息
rostopic pub /cmd_vel_mux/input/navi geometry_msgs/Twist "linear:x: 0.0y: 0.0z: 0.0
angular:x: 0.0y: 0.0z: 1"
注意,發(fā)布話題消息控制前需要先殺死鍵盤控制節(jié)點(diǎn),否則鍵盤控制節(jié)點(diǎn)會持續(xù)發(fā)布停止指令。
2. 作業(yè)內(nèi)容
一、查看tf樹和rqt_graph
rosrun rqt_tf_tree rqt_tf_tree
可以看到,其上面三個tf對象為odom(里程計)、base_footprint(機(jī)器人行走足跡)、base_link(底盤基底)
rqt_graph
二、列出當(dāng)前運(yùn)行的節(jié)點(diǎn)和話題
運(yùn)行rosnode list查看節(jié)點(diǎn)列表
/bumper2pointcloud
/cmd_vel_mux
/diagnostic_aggregator
/mobile_base
/mobile_base_nodelet_manager
/robot_state_publisher
/rosout
/rqt_gui_py_node_8445
/rqt_gui_py_node_9013
/turtlebot_teleop_keyboard
運(yùn)行rostopic list查看話題列表
/cmd_vel_mux/active
/cmd_vel_mux/input/navi
/cmd_vel_mux/input/safety_controller
/cmd_vel_mux/input/switch
/cmd_vel_mux/input/teleop
/cmd_vel_mux/parameter_descriptions
/cmd_vel_mux/parameter_updates
/diagnostics
/diagnostics_agg
/diagnostics_toplevel_state
/joint_states
/mobile_base/commands/controller_info
/mobile_base/commands/digital_output
/mobile_base/commands/external_power
/mobile_base/commands/led1
/mobile_base/commands/led2
/mobile_base/commands/motor_power
/mobile_base/commands/reset_odometry
/mobile_base/commands/sound
/mobile_base/commands/velocity
/mobile_base/controller_info
/mobile_base/debug/raw_control_command
/mobile_base/debug/raw_data_command
/mobile_base/debug/raw_data_stream
/mobile_base/events/bumper
/mobile_base/events/button
/mobile_base/events/cliff
/mobile_base/events/digital_input
/mobile_base/events/power_system
/mobile_base/events/robot_state
/mobile_base/events/wheel_drop
/mobile_base/sensors/bumper_pointcloud
/mobile_base/sensors/core
/mobile_base/sensors/dock_ir
/mobile_base/sensors/imu_data
/mobile_base/sensors/imu_data_raw
/mobile_base/version_info
/mobile_base_nodelet_manager/bond
/odom
/rosout
/rosout_agg
/statistics
/tf
/tf_static
三、查看話題/odom的話題類型和數(shù)據(jù)結(jié)構(gòu),并對各個部分進(jìn)行標(biāo)注解釋
運(yùn)行rostopic info /odom查看/odom話題類型
Type: nav_msgs/OdometryPublishers: * /mobile_base_nodelet_manager (http://lj:34723/)Subscribers: None
運(yùn)行rosmsg info nav_msgs/Odometry查看/odom話題的具體數(shù)據(jù)結(jié)構(gòu)
std_msgs/Header headeruint32 seqtime stampstring frame_id
string child_frame_id
geometry_msgs/PoseWithCovariance posegeometry_msgs/Pose posegeometry_msgs/Point positionfloat64 xfloat64 yfloat64 zgeometry_msgs/Quaternion orientationfloat64 xfloat64 yfloat64 zfloat64 wfloat64[36] covariance
geometry_msgs/TwistWithCovariance twistgeometry_msgs/Twist twistgeometry_msgs/Vector3 linearfloat64 xfloat64 yfloat64 zgeometry_msgs/Vector3 angularfloat64 xfloat64 yfloat64 zfloat64[36] covariance
四、使用rostopic pub 指令控制機(jī)器人做圓周運(yùn)動
控制機(jī)器人做圓周運(yùn)動即按一定頻率不間斷地給turtlebot發(fā)送前進(jìn)的轉(zhuǎn)彎的指令。
rostopic pub -r 10 /cmd_vel_mux/input/navi geometry_msgs/Twist "linear:x: 0.2y: 0.0z: 0.0
angular:x: 0.0y: 0.0z: -0.5"
五、ros編程“hello world”
需要編寫一個包含話題發(fā)布的節(jié)點(diǎn),發(fā)出消息類型為String的字符串“hello world”。
catkin_create_pkg beginner_tutorials roscpp std_msgs rospy
catkin_make
source devel/setup.bash
roscd beginner_tutorials
mkdir src
cd src
touch talker.cpp
gedit talker.cpp
talker.cpp
#include "ros/ros.h"
#include "std_msgs/String.h"#include <sstream>int main(int argc, char **argv)
{ros::init(argc, argv, "talker");ros::NodeHandle n;ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);ros::Rate loop_rate(10);int count = 0;while(ros::ok()){std_msgs::String msg;std::stringstream ss;ss << "hello world" << count;msg.data = ss.str();ROS_INFO("%s", msg.data.c_str());chatter_pub.publish(msg);ros::spinOnce();loop_rate.sleep();++count;}return 0;
}
gedit ../CMakeList.txt
添加內(nèi)容
add_executable(talker src/talker.cpp)
target_link_libraries(talker ${catkin_LIBRARIES})
add_dependencies(talker beginner_tutorials_generate_messages_cpp)
再進(jìn)行一次編譯和運(yùn)行
cd ../../..
catkin_make
source devel/setup.bash
rosrun beginner_tutorials talker
出現(xiàn)
[ INFO] [1631770033.782646511]: hello world0
[ INFO] [1631770033.882787094]: hello world1
[ INFO] [1631770033.982805683]: hello world2
......
官方教程:http://wiki.ros.org/cn/ROS/Tutorials/WritingPublisherSubscriber%28c%2B%2B%29
總結(jié)
以上是生活随笔為你收集整理的实验一 编程 Hello World的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ROS Melodic安装、配置和使用t
- 下一篇: 实验三 Gmapping建图