iohannes
Published on 2025-03-12 / 17 Visits

ros 编程简介

install ros noetic

sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

sudo apt update
sudo apt install -y ros-noetic-ros-base

echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

sudo apt install python3-rosdep

sudo rosdep init
rosdep update

create workspace

mkdir -p ~/workspace/src
cd ~/workspace
catkin_make
source devel/setup.bash

创建python包

cd ~/workspace/src
catkin_create_pkg deep_img rospy std_msgs
cd deep_img
nano src/main.py
#!/usr/bin/env python3
import rospy

def talker():
    rospy.init_node('my_python_node', anonymous=True)
    rate = rospy.Rate(10)  # 10hz
    while not rospy.is_shutdown():
        rospy.loginfo("Hello, ROS!")
        rate.sleep()

if __name__ == '__main__':
    try:
        talker()
    except rospy.ROSInterruptException:
        pass

1. launch py包

创建启动文件
chmod +x src/main.py
mkdir launch
nano launch/default.launch
<launch>
    <node name="deep_img_python_node" pkg="deep_img" type="main.py" output="screen"/>
</launch>
启动
cd ~/workspace
catkin_make
source devel/setup.bash
roslaunch deep_img default.launch

2. rosrun 启动

chmod +x src/main.py
cd ~/workspace
catkin_make
source devel/setup.bash
rosrun deep_img main.py

创建cpp包

cd ~/workspace/src
catkin_create_pkg laser_radar std_msgs roscpp
cd laser_radar
nano src/main.cpp
#include "ros/ros.h"
#include "std_msgs/String.h"

int main(int argc, char **argv)
{
    // 初始化节点
    ros::init(argc, argv, "helloworld_node");

    // 创建节点句柄
    ros::NodeHandle nh;

    // 创建一个发布者,发布到 "chatter" 话题
    ros::Publisher chatter_pub = nh.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);

        // 等待下一个循环
        loop_rate.sleep();
        ++count;
    }

    return 0;
}
nano CMakeLists.txt
# 添加可执行文件
add_executable(helloworld_node src/main.cpp)

# 添加依赖
target_link_libraries(helloworld_node ${catkin_LIBRARIES})

launch 运行

cd ~/workspace
catkin_make
source
devel/setup.bash
rosrun laser_radar helloworld_node