2025年9月8日 星期一

ROS1 建立專案空間 package node 範例說明

 下面以 ROS 1 (catkin,例:Noetic) 為準,給你最精簡、可直接照做的流程(Python 與 C++ 都含):

0) 準備環境

# 開新終端,不要 source ROS 2 source /opt/ros/noetic/setup.bash

1) 建立 Workspace

mkdir -p ~/catkin_ws/src cd ~/catkin_ws catkin_make # 會自動初始化 # 之後每次開新殼,記得: source ~/catkin_ws/devel/setup.bash

2) 建立 Package

cd ~/catkin_ws/src catkin_create_pkg my_pkg roscpp rospy std_msgs # 安裝相依(如需) rosdep install -i --from-paths . -y

3A) Python 節點(rospy)

~/catkin_ws/src/my_pkg/scripts/talker.py

#!/usr/bin/env python3 import rospy from std_msgs.msg import String if __name__ == "__main__": rospy.init_node("talker_py") pub = rospy.Publisher("chatter", String, queue_size=10) rate = rospy.Rate(5) while not rospy.is_shutdown(): pub.publish(String(data="hello ros1")) rate.sleep()
chmod +x ~/catkin_ws/src/my_pkg/scripts/talker.py

3B) C++ 節點(roscpp)

~/catkin_ws/src/my_pkg/src/talker.cpp

#include <ros/ros.h> #include <std_msgs/String.h> int main(int argc, char** argv){ ros::init(argc, argv, "talker_cpp"); ros::NodeHandle nh; ros::Publisher pub = nh.advertise<std_msgs::String>("chatter", 10); ros::Rate rate(5); while (ros::ok()){ std_msgs::String msg; msg.data = "hello ros1"; pub.publish(msg); rate.sleep(); } }

~/catkin_ws/src/my_pkg/CMakeLists.txt 加:

add_executable(talker src/talker.cpp) target_link_libraries(talker ${catkin_LIBRARIES}) add_dependencies(talker ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) install(TARGETS talker RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})

4) 編譯

cd ~/catkin_ws catkin_make source devel/setup.bash

5) 執行與驗證

開 1:啟動 master

roscore

開 2:跑節點

source ~/catkin_ws/devel/setup.bash rosrun my_pkg talker.py # Python # 或 rosrun my_pkg talker # C++

開 3:檢查 Topic

rostopic list rostopic echo /chatter

6) Launch 範例(可選)

~/catkin_ws/src/my_pkg/launch/demo.launch

<launch> <node pkg="my_pkg" type="talker.py" name="talker_py" output="screen"/> <!-- <node pkg="my_pkg" type="talker" name="talker_cpp" output="screen"/> --> </launch>
roslaunch my_pkg demo.launch

小提醒

  • 不要同時 source ROS 1 與 ROS 2(避免路徑衝突)。

  • 之後新增相依就改 package.xmlCMakeLists.txt,再 catkin_make

  • 喜歡 catkin_tools 的話:sudo apt install python3-catkin-toolscatkin build(取代 catkin_make)。



沒有留言:

張貼留言